关于作者

用户名:p8499
笔名:p8499
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



友情链接Group A

友情链接Group B

友情链接Group C

访问统计:
文章个数:85
评论个数:11
留言条数:7




Powered by BlogDriver 2.1

数字番茄酱的技术记事本

 

11/7完成fundamentals I考试 93%

Installation Issue of Standalone 8.12 with Tools 8.97
Try the following;
Jacob

ISSUE:
Customer followed all the steps in the Standalone Installation Guide and is having issues when trying to log in. After the "Waiting for security server" message appears on screen for a couple of minutes, the following error messages pop up:

"Unable to locate security server. Failed to communicate with security server: Unable to locate Security Server.
JD Edwards EnterpriseOne could not sign you on. Make sure your User ID is correct and retype your Password."

Link to Standalone Installation Guide:
http://www4.peoplesoft.com/contdoc.nsf/0/8C7EAED60690829C8825715D00752877?OpenDocument



SOLUTION:
The cause of the issue is the "JDESY812" datasource was not attached during installation. This maybe identified by the following err or message:

A. JDE.LOG:
ODB0000164 - STMT:00 [42S02][208] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'JDESY812.dbo.F986101'. Indicates that the object under the JDESY812 datasource does not exist.

B. The related datasource files are missing. Verify this by checking whether "JDEDEMOSY.LDF" and "JDEDEMOSY.MDF" files are in the corresponding path "C:\E812\DEMO\data".

C. Verify whether JDESY812 datasource is listed when executing the following OSQL query through command prompt: "select name from sysdatabases" (using the master database).

This is done by opening a command prompt window from your desktop (START menu>>RUN ).
Run the following commands to verify that JDESY812 appears in the list.:

>> osql -E -S (Local)\JDELocal
>> use master
>> go
>> select name from sysdatabases
>> go

If all thr ee points above mentioned are true, then you must attach the JDESY812 datasource. By attaching the missing datasource, when E1 standalone is launched, the security server will be found, since all the security server information is in this datasource.


Follow these steps for the solution:

1. Extract both files: "JDEDEMOSY.mdf" and "JDEDEMOSY.ldf" which are in the second installation CD under the path: "\\DataComponents-English\Data\JDEDEMOSY.CAB" to the following path in the machine you are installing standalone: "C:\E812\DEMO\data".

2. Open a command prompt window, by clicking on the START menu>>RUN.

3. Execute the following commands in the command line, one at a time:
osql -E -S (Local)\JDELocal
use master
go
sp_attach_db 'JDESY812', 'C:\E812\DEMOdata\JDEDEMOSY.mdf', 'C:\E812\DEMOdata\JDEDEMOSY.ldf'
go
sp_addlogin 'JDE', 'JDE'
go
use JDESY812
go
sp_addUser 'JDE', 'JDE'
go
sp_addrol emember 'db_owner', 'JDE'
go
sp_change_users_login 'Update_One', 'JDE','JDE'
go

4. Exit and reboot your workstation.

5. Launch EnterpriseOne and Log In.

- 作者: p8499 2009年02月6日, 星期五 17:13  回复(0) |  引用(0) 加入博采

XML Publisher

#
Run report with XML output.
Create RTF template using XML output.
Upload RTF template by P95600.
Creating Report Definiton by P95620.
Revise Report Definiton of UBE version.

Now you can run UBE.
$

- 作者: p8499 2008年12月1日, 星期一 17:57  回复(0) |  引用(0) 加入博采

Trigger

FC:改值时,手动调用Trigger

-----------------------------------------------------------------------
     CONTROL:  EDIT Find-MCU
     EVENT:  Control Exited/Changed-Asynch
-----------------------------------------------------------------------
0001 Press Button(FC trigger/OnSetFind-MCU)

----------------------------------------------------------------------
     CONTROL:  BUTTON trigger/OnSetFind-MCU [HIDDEN]
     EVENT:  Button Clicked
-----------------------------------------------------------------------
0001 SI szFindMCU = FC Find-MCU
0002 Find-CO = ""
0003 Find-E58AN8 = ""
0004 F0006.Fetch Single
        FC Find-MCU =  TK Business Unit
        FC Find-CO <- TK Company
        FC Find-E58AN8 <- TK Address Number
0005 Press Button(FC trigger/OnSetFind-CO)
0006 Press Button(FC trigger/OnSetFind-E58AN8)
0007 Update Parent

-----------------------------------------------------------------------
     CALLING
-----------------------------------------------------------------------
0001 FC Find-MCU = FC Combo-MCU
0002 Press Button(FC trigger/OnSetFind-MCU)

COMBO:改值时,自动调用Trigger

-----------------------------------------------------------------------
     CONTROL:  COMBOBOX Combo-MCU
     EVENT:  Selection Changed
-----------------------------------------------------------------------
0001 Press Button(FC trigger/OnSetCombo-MCU)

-----------------------------------------------------------------------
     CONTROL:  BUTTON trigger/OnSetCombo-MCU [HIDDEN]
     EVENT:  Button Clicked
-----------------------------------------------------------------------
0001 FC Find-MCU = FC Combo-MCU
0002 Press Button(FC trigger/OnSetFind-MCU)

-----------------------------------------------------------------------
     CALLING
-----------------------------------------------------------------------
0020    Select Item(FC Combo-MCU, VA evt_MCUFirst)

- 作者: p8499 2008年09月25日, 星期四 11:38  回复(0) |  引用(0) 加入博采

Wide Security完全版

Listing of ER for Application : Work With Gift Logistics Status (P58N337)


=======================================================================
     FORM: Find/Browse:330 [FIND BROWSE] (W58N337A)
=======================================================================
     CONTROL:  FORM
     EVENT:  Dialog is Initialized

-----------------------------------------------------------------------
0019 // Use Security YN
0020 If PO cUseScrtyYN is equal to "1" Or PO cUseScrtyYN is equal to "Y"
0021    VA frm_UseSecurityYN = "Y"
0022 Else
0023    VA frm_UseSecurityYN = "N"
0024 End If

-----------------------------------------------------------------------
     EVENT:  Post Dialog is Initialized
-----------------------------------------------------------------------
0006 If VA frm_UseSecurityYN is equal to "Y"
0007    Press Button(FC func/Security)
0008 Else
0009    Hide Control(FC combo-MCU)
0010    Hide Control(FC combo-E58AN8)
0011 End If

-----------------------------------------------------------------------
     EVENT:  Variable
-----------------------------------------------------------------------
     frm_UseSecurityYN
     frm_SecurityYN
     frm_SecurityDefaultCO
     frm_SecurityDefaultE58AN8
     frm_SecurityDefaultMCU
     frm_SecurityE58AN8Number
     frm_SecurityE58AN8MultiYN

=======================================================================
     CONTROL:  COMBOBOX combo-E58AN8
     EVENT:  Selection Changed

-----------------------------------------------------------------------
0001 // Security
0002 FC find-E58AN8 = FC combo-E58AN8
0003 Press Button(FC func/SetComboMCU)
0004 // ~Security

=======================================================================
     CONTROL:  COMBOBOX combo-MCU
     EVENT:  Selection Changed

-----------------------------------------------------------------------
0001 // Security
0002 FC find-MCU = FC combo-MCU
0003 Press Button(HC F&ind)
0004 // ~Security

=======================================================================
     CONTROL:  BUTTON func/Security [HIDDEN]
     EVENT:  Button Clicked

-----------------------------------------------------------------------
     evt_CurrE58AN8
     evt_CurrMCU
     evt_CurrName
     evt_CurrLineNumber2
     evt_CurrLineNumber
0001 VA frm_SecurityYN = "N"
0002 Retrive Store User Profile Information By User ID
        SL UserID -> BF szE58PortalUserID
        VA frm_SecurityDefaultCO <- BF szCompany
        VA frm_SecurityDefaultE58AN8 <- BF mnE58StoreAddressNumber
        VA frm_SecurityYN <> BF cRecordExistYN
        VA frm_SecurityDefaultMCU <- BF szCostCenter
0003 If A frm_SecurityYN is equal to "Y"
0004    Hide Control(FC find-MCU)
0005    Hide Control(FC FIND-MCU)
0006    Hide Control(FC find-E58AN8)
0007    Hide Control(FC FIND-E58AN8)
0008    Disable Control(FC find-CO)
0009    Initial SMS Security By user id
           SL UserID -> BF szE58PortalUserID
           VA frm_SecurityE58AN8Number <- BF nTotalNumberOfReturnValue
           VA frm_SecurityDefaultE58AN8 -> BF mnDefaultE58StoreAddressNumber
           VA frm_SecurityDefaultMCU -> BF szDefaultCostCenter
           VA frm_SecurityDefaultCO -> BF szDefaultCompany
           VA frm_SecurityE58AN8MultiYN <- BF cHavingMultiStoreAddressYN
0010    // Setting
0011    Remove Item by Key(FC combo-E58AN8, "1",  <Remove All>)
0012    Fetch First Store Address Number
           VA evt_CurrE58AN8 <- BF mnE58StoreAddressNumber
           VA evt_CurrMCU <- BF szCostCenter
           SL UserID -> BF szE58PortalUserID
           VA evt_CurrLineNumber <> BF mnCurrentLineNumber
           VA frm_SecurityE58AN8Number <- BF nTotalStoreAddressNumber
           VA evt_CurrName <- BF szNameAlpha
0013    If VA frm_SecurityE58AN8Number is less than or equal to "1"
0014       Add Item(FC combo-E58AN8, VA evt_CurrE58AN8, VA evt_CurrName,  <Null>)
0015       Disable Control(FC combo-E58AN8)
0016    Else
0017       VA evt_CurrLineNumber2 = "1"
0018       While VA evt_CurrLineNumber2 is less than or equal to VA frm_SecurityE58AN8Number
0019          Add Item(FC combo-E58AN8, VA evt_CurrE58AN8, VA evt_CurrName,  <Null>)
0020          Fetch Next Store Address Number
                 VA evt_CurrE58AN8 <- BF mnE58StoreAddressNumber
                 VA evt_CurrMCU <- BF szCostCenter
                 SL UserID -> BF szE58PortalUserID
                 VA evt_CurrLineNumber <> BF mnCurrentLineNumber
                 VA evt_CurrName <- BF szNameAlpha
0021          VA evt_CurrLineNumber2 = VA evt_CurrLineNumber2+1
0022       End While
0023    End If
0024    FC combo-E58AN8 = VA frm_SecurityDefaultE58AN8
0025    FC find-CO = VA frm_SecurityDefaultCO
0026    FC find-E58AN8 = VA frm_SecurityDefaultE58AN8
0027    FC find-MCU = VA frm_SecurityDefaultMCU
0028    Press Button(FC func/SetComboMCU)
0029    // ~Setting
0030 Else
0031    Hide Control(FC combo-MCU)
0032    Hide Control(FC combo-E58AN8)
0033 End If

=======================================================================
     CONTROL:  BUTTON func/SetComboMCU [HIDDEN]
     EVENT:  Button Clicked

-----------------------------------------------------------------------
     evt_MCUNumber
     evt_CurrMCU
     evt_CurrLineNumber
     evt_CurrLineNumber2
     evt_CurrName
     evt_CurrCO
     evt_CurrSPHD
     evt_1stMCU
0001 Remove Item by Key(FC combo-MCU, "1",  <Remove All>)
0002 Fetch First Store MCU Number
        FC find-E58AN8 -> BF mnE58StoreAddressNumber
        VA evt_CurrMCU <- BF szCostCenter
        SL UserID -> BF szE58PortalUserID
        VA evt_CurrLineNumber <> BF mnCurrentLineNumber
        VA evt_CurrName <- BF szNameAlpha
        VA evt_MCUNumber <- BF nTotalMCUNumberByStoreAddreeNo
        VA evt_CurrSPHD -> BF szSpecialHandlingCode
        VA evt_CurrCO <- BF szCompany
0003 FC find-CO = VA evt_CurrCO
0004 If VA evt_MCUNumber is less than or equal to "1"
0005    Add Item(FC combo-MCU, VA evt_CurrMCU, VA evt_CurrName,  <Null>)
0006    FC combo-MCU = VA evt_CurrMCU
0007    Disable Control(FC combo-MCU)
0008 Else
0009    VA evt_CurrLineNumber2 = "1"
0010    VA evt_1stMCU = VA evt_CurrMCU
0011    While VA evt_CurrLineNumber2 is less than or equal to VA evt_MCUNumber
0012       Add Item(FC combo-MCU, VA evt_CurrMCU, VA evt_CurrName,  <Null>)
0013       Fetch Next Store MCU Number
              FC find-E58AN8 -> BF mnE58StoreAddressNumber
              VA evt_CurrMCU <- BF szCostCenter
              SL UserID -> BF szE58PortalUserID
              VA evt_CurrLineNumber <> BF mnCurrentLineNumber
              VA evt_CurrName <- BF szNameAlpha
              VA evt_CurrSPHD -> BF szSpecialHandlingCode
              VA evt_CurrCO <- BF szCompany
0014       VA evt_CurrLineNumber2 = VA evt_CurrLineNumber2+1
0015    End While
0016    FC combo-MCU = VA evt_1stMCU
0017    Enable Control(FC combo-MCU)
0018 End If

Saturday September 06, 2008  15:03

- 作者: p8499 2008年09月6日, 星期六 16:53  回复(0) |  引用(0) 加入博采

SubForm Routine

Sub Form MessageDispatcher

0001 If SI MSG_IN is equal to "init"
0002    Press Button(FC Msg/Init)
0003 End If
0004 //

0005 SI MSG_IN = ""
0006 SI MSG_OUT = "

Sub Form Msg/Init

0001 Get Audit Information
        VA frm_Today <- BF jdDate
0002 Press Button(FC Find)

Power Form Post Dialog Initialization

0001 VA frm_01_MSG_TO = "init"
0002 Notify Child(FC Select Player)

Power Edit Notified By Child

0001 If VA frm_01_MSG_FROM is equal to "sel"
0002    FC Player ID = VA frm_01_E55PLID
0003 End If
//to clear every fromsubform parameters

- 作者: p8499 2008年08月22日, 星期五 11:24  回复(0) |  引用(0) 加入博采

JDE空值研究

地球人都知道的Excel97-03格式
http://p8499.bokee.com/inc/blank_null_zero.xls.bmp

- 作者: p8499 2008年08月19日, 星期二 10:40  回复(0) |  引用(0) 加入博采

Headerless Detail(强域)

Headerless Detail

  Header fields类型

    1 强域(用于分组,使用关联表的DD)
      1.1 Add时
        1.1.1 Grid Focus时,Check强域是否有值
        1.1.2 强域Changed时自动CheckChanged
        1.1.3 Load按钮逻辑:
If Grid Cols Count>0(Grid已编辑)
  Fetch Single(Find他组既存行)
    Y: Message Error
    N: Change it successfully
Else(Grid未编辑)
  Change it successfully
  Find

        1.1.4 Grid中对应强域的列全部继承自Header值且disabled
      1.2 Update时
        1.1.1  FormMode=Update时强域被disable
    2 待定

事例:
http://p8499.bokee.com/inc/P58Q411_Memo_HeaderlessDetail.doc.bmp (doc文件)

Listing of ER for Application : Work With Store Procurement Orders (P58Q411)

=======================================================================

     FORM: Find/Browse [FIND BROWSE] (W58Q411A)

=======================================================================

     CONTROL:  FORM

     EVENT:  Post Dialog is Initialized

-----------------------------------------------------------------------

0001 Set Form Title(TV Browsing)

0002 Hide Grid Column(FC Grid, GC BatchNumber)

0003 Hide Grid Column(FC Grid, GC UserID)

0004 Hide Grid Column(FC Grid, GC TransactionNumber)

0005 Hide Grid Column(FC Grid, GC LineNumber)

=======================================================================

     CONTROL:  HYPITEM &Select

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 Call( App:P58Q411 , Form: W58Q411B )

        GC UserID -> FI szEdiUserId

        GC BatchNumber -> FI szEdiBatchNumber

        GC TransactionNumber -> FI szEdiTransactNumber

        GC LineNumber -> FI mnEdiLineNumber

=======================================================================

     CONTROL:  HYPITEM &Add

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 Call( App:P58Q411 , Form: W58Q411B )

=======================================================================

     FORM: Headerless Detail [HEADERLESS DETAIL] (W58Q411B)

=======================================================================

     CONTROL:  FORM

     EVENT:  Post Dialog is Initialized

-----------------------------------------------------------------------

0001 Set Form Title(TV Editing)

0002 Hide Control(FC LineNumber)

0003 Hide Control(FC LineNumber-Out-LNID)

0004 Hide Control(FC Values4New)

0005 Hide Control(FC StrongRequired)

0006 Hide Control(FC Load)

0007 Hide Control(FC Load-Out-Status)

0008 Hide Grid Column(FC Grid, GC UserID)

0009 Hide Grid Column(FC Grid, GC BatchNumber)

0010 Hide Grid Column(FC Grid, GC TransactionNumber)

0011 Hie Grid Column(FC Grid, GC YN)

0012 If SV Form_ Mode is equal to CO UPDATE_MODE

0013    Disable Control(FC Strong-EDBT)

0014    Disable Control(FC Strong-EDTN)

0015    Disable Control(FC Strong-EDUS)

0016    Press Button(HC F&ind)

0017 End If

-----------------------------------------------------------------------

     EVENT:  Write Grid Line-After

-----------------------------------------------------------------------

0001 GC YN = "Y"

-----------------------------------------------------------------------

     EVENT:  Variable

-----------------------------------------------------------------------

     frm_PC_EDUS

     frm_PC_EDBT

     frm_PC_EDTN

     frm_BC_EDBT

     frm_BC_EDTN

     frm_BC_EDUS

=======================================================================

     CONTROL:  EDIT Strong-EDUS

     EVENT:  Control is Entered

-----------------------------------------------------------------------

0001 Clear Control Error(FC Strong-EDUS)

0002 VA frm_PC_EDUS = FC Strong-EDUS

-----------------------------------------------------------------------

     EVENT:  Control Exited/Changed-Asynch

-----------------------------------------------------------------------

0001 VA frm_BC_EDUS = FC Strong-EDUS

0002 Press Button(FC Load)

0003 If FC Load-Out-Status is equal to "N"

0004    VA frm_BC_EDUS = VA frm_PC_EDUS

0005    FC Strong-EDUS = VA frm_PC_EDUS

0006 End If

=======================================================================

     CONTROL:  EDIT Strong-EDBT

     EVENT:  Control is Entered

-----------------------------------------------------------------------

0001 Clear Control Error(FC Strong-EDBT)

0002 VA frm_PC_EDBT = FC Strong-EDBT

-----------------------------------------------------------------------

     EVENT:  Control Exited/Changed-Asynch

-----------------------------------------------------------------------

0001 VA frm_BC_EDBT = FC Strong-EDBT

0002 Press Button(FC Load)

0003 If FC Load-Out-Status is equal to "N"

0004    VA frm_BC_EDBT = VA frm_PC_EDBT

0005    FC Strong-EDBT = VA frm_PC_EDBT

0006 End If

=======================================================================

     CONTROL:  EDIT Strong-EDTN

     EVENT:  Control is Entered

-----------------------------------------------------------------------

0001 Clear Control Error(FC Strong-EDTN)

0002 VA frm_PC_EDTN = FC Strong-EDTN

-----------------------------------------------------------------------

     EVENT:  Control Exited/Changed-Asynch

-----------------------------------------------------------------------

0001 VA frm_BC_EDTN = FC Strong-EDTN

0002 Press Button(FC Load)

0003 If FC Load-Out-Status is equal to "N"

0004    VA frm_BC_EDTN = VA frm_PC_EDTN

0005    FC Strong-EDTN = VA frm_PC_EDTN

0006 End If

=======================================================================

     CONTROL:  GRID Grid

     EVENT:  Add Grid Rec to DB - Before

-----------------------------------------------------------------------

0001 Press Button(FC Audit)

-----------------------------------------------------------------------

     EVENT:  Update Grid Rec to DB-Before

-----------------------------------------------------------------------

0001 Press Button(FC Audit)

-----------------------------------------------------------------------

     EVENT:  Add Last Entry Row to Grid

-----------------------------------------------------------------------

0001 GC YN = "N"

-----------------------------------------------------------------------

     EVENT:  Set Focus on Grid

-----------------------------------------------------------------------

0001 Press Button(FC StrongRequired)

-----------------------------------------------------------------------

     EVENT:  Row Exit & Changed - Asynch

-----------------------------------------------------------------------

0001 If GC YN is equal to "Y"

0002    // Existing

0003 Else

0004    If GC YN is equal to "N"

0005       // New

0006       Press Button(FC Values4New)

0007    End If

0008 End If

=======================================================================

     CONTROL:  BUTTON LineNumber

     EVENT:  Button Clicked

-----------------------------------------------------------------------

     evt_RowNumber_Ori

     evt_RowNumber_Curr

     evt_RowNumber_Min

     evt_RowNumber_Max

     evt_LineNumber_Max

     evt_LineNumber_Curr

     evt_LineNumber_Next

0001 Get Selected Grid Row Number(FC Grid, VA evt_RowNumber_Ori)

0002 VA evt_RowNumber_Min = 0

0003 Get Max Grid Rows(FC Grid, VA evt_RowNumber_Max)

0004 VA evt_RowNumber_Curr = VA evt_RowNumber_Min

0005 While VA evt_RowNumber_Curr is less than or equal to VA evt_RowNumber_Max

0006    Get Grid Row(FC Grid, VA evt_RowNumber_Curr)

0007    If VA evt_RowNumber_Curr is equal to VA evt_RowNumber_Min

0008       VA evt_LineNumber_Max = GC LineNumber

0009    Else

0010       VA evt_LineNumber_Curr = GC LineNumber

0011       If VA evt_RowNumber_Curr is not equal to VA evt_RowNumber_Ori

0012          If VA evt_LineNumber_Curr is greater than VA evt_LineNumber_Max

0013             VA evt_LineNumber_Max = VA evt_LineNumber_Curr

0014          End If

0015       End If

0016    End If

0017    VA evt_RowNumber_Curr = VA evt_RowNumber_Curr+1

0018 End While

0019 VA evt_LineNumber_Next = VA evt_LineNumber_Max+1

0020 FC LineNumber-Out-LNID = VA evt_LineNumber_Next

=======================================================================

     CONTROL:  BUTTON Values4New

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 Press Button(FC LineNumber)

0002 GC LineNumber = FC LineNumber-Out-LNID

=======================================================================

     CONTROL:  BUTTON StrongRequired

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 If FC Strong-EDBT is equal to Or FC Strong-EDBT is equal to Or FC Strong-EDBT is equal to

0002    Set Control Error(FC Strong-EDBT, "0003")

0003 End If

0004 If FC Strong-EDTN is equal to Or FC Strong-EDTN is equal to Or FC Strong-EDTN is equal to

0005    Set Control Error(FC Strong-EDTN, "0003")

0006 End If

0007 If FC Strong-EDUS is equal to Or FC Strong-EDUS is equal to Or FC Strong-EDUS is equal to

0008    Set Control Error(FC Strong-EDUS, "0003")

0009 End If

0010 //

=======================================================================

     CONTROL:  BUTTON Load

     EVENT:  Button Clicked

-----------------------------------------------------------------------

     evt_GridRowsCount

     evt_AlertRT

0001 Get Max Grid Rows(FC Grid, VA evt_GridRowsCount)/p>

0002 If VA evt_GridRowsCount is greater than

0003    F58Q411.Fetch Single

           FC Strong-EDUS =  TK EDI - User ID

           FC Strong-EDBT =  TK EDI - Batch Number

           FC Strong-EDTN =  TK EDI - Transaction Number

0004    If SV File_IO_Status is equal to CO SUCCESS

0005       Call( App:P58Q411 , Form: W58Q411C )

              TV Conflicting with existing records! [HIDDEN] -> FI szMessage

              VA evt_AlertRT <- FI cRTCode

0006       // Error

0007       FC Load-Out-Status = "N"

0008    Else

0009       // OK

0010       FC Load-Out-Status = "Y"

0011    End If

0012 Else

0013    // OK

0014    FC Load-Out-Status = "Y"

0015 End If

=======================================================================

     CONTROL:  BUTTON Audit

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 BC Program ID (F58Q411) = "P58Q411"

0002 Get Audit Information

        BC User ID (F58Q411) <- BF szUserName

        BC Date - Updated (F58Q411) <- BF jdDate

        BC Time - Last Updated (F58Q411) <- BF mnTime

        BC Work Station ID (F58Q411) <- BF szWorkstation_UserId

=======================================================================

     FORM: Message [MESSAGE] (W58Q411C)

=======================================================================

     CONTROL:  FORM

     EVENT:  Dialog is Initialized

-----------------------------------------------------------------------

0001 Set Control Text(FC Insert Text Here, FI szMessage)

=======================================================================

     CONTROL:  BUTTON OK

     EVENT:  Button Clicked

-----------------------------------------------------------------------

0001 FI cRTCode = "Y"

Tuesday July 08, 2008  10:14

绿色是事件,黄色是Strong Fields处理

- 作者: p8499 2008年07月7日, 星期一 18:03  回复(0) |  引用(0) 加入博采

自动行号
     evt_RowNumber_Ori   --原先行
     evt_RowNumber_Curr  --行游标
     evt_RowNumber_Min   --首行
     evt_RowNumber_Max   --末行
     evt_LineNumber_Max  --已找到的最大结果
     evt_LineNumber_Curr --本行的结果
     evt_LineNumber_Next --本行结果+1
//获取原先行号
0001 Get Selected Grid Row Number(FC Grid, VA evt_RowNumber_Ori)
//定义画面上的第一行和最后一行
0002 VA evt_RowNumber_Min = 0
0003 Get Max Grid Rows(FC Grid, VA evt_RowNumber_Max)
//游标
0004 VA evt_RowNumber_Curr = VA evt_RowNumber_Min
//从首行到末行
0005 While VA evt_RowNumber_Curr is less than or equal to VA evt_RowNumber_Max
0006    Get Grid Row(FC Grid, VA evt_RowNumber_Curr)
0007    If VA evt_RowNumber_Curr is equal to VA evt_RowNumber_Min
           //首行
0008       VA evt_LineNumber_Max = GC SequenceNumber
0009    Else
           //非首行:更大,非本行
0010       VA evt_LineNumber_Curr = GC SequenceNumber
0011       If VA evt_RowNumber_Curr is not equal o VA evt_RowNumber_Ori
0012          If VA evt_LineNumber_Curr is greater than VA evt_LineNumber_Max
0013             VA evt_LineNumber_Max = VA evt_LineNumber_Curr
0014          End If
0015       End If
0016    End If
0017    VA evt_RowNumber_Curr = VA evt_RowNumber_Curr+1
0018 End While
//最大结果+1
0019 VA evt_LineNumber_Next = VA evt_LineNumber_Max+1
0020 FC NextLineNumber-Out-SQNU = VA evt_LineNumber_Next

- 作者: p8499 2008年07月7日, 星期一 15:46  回复(0) |  引用(0) 加入博采

Security via Sub Form™(2)

SSF(Security Sub Form) Side:

1. Visible elements:
CO elements(label,fc,desc,combo),
E58AN8 elements(label,fc,desc,combo)
MCU elements(label,fc,desc,combo)

2. Logic elements:
A,B,...etc.

3. Form variables:
     frm_Curr_AN8
     frm_Curr_MCU
     frm_Curr_LNID
     frm_Curr_ALPH
     frm_AN8Number
     frm_Curr_INT01
     frm_SPHD
     frm_MCUNumber
     frm_1st_MCU
     frm_SecurityDefaultCO
     frm_SecurityDefaultE58AN8
     frm_SecurityDefaultMCU

4. Set button:
0001 SI szFindCO = FC Find-CO
0002 SI mnFindE58AN8 = FC Find-E58AN8
0003 SI szFindMCU = FC Find-MCU
0004 Update Parent

5. FC-CO,Combo-CO,FC-E58AN8,Combo-E58AN8,FC-MCU,Combo-MCU:
0001 Press Button(FC Set)

6. Notified by Parent:
--eg--
0001 Hide Control(FC A)
0002 Hide Control(FC B)
0003 Hide Control(FC Set)
0004 //
0005 If SI cLogicStyle is equal to "A"
0006    Press Button(FC A)
0007 Else
0008    If SI cLogicStyle is equal to "B"
0009       Press Button(FC B)
0010    End If
0011 End If
0012 //
0013 If SI cCO_Visible is equal to "N"
0014    Hide Control(FC Combo-CO)
0015    Hide Control(FC Find-CO)
0016    Hide Control(FC COMPANY)
0017    Hide Control(FC Company)
0018 End If
0019 If SI cE58AN8_Visible is equal to "N"
0020    Hide Control(FC Combo-E58AN8)
0021    Hide Control(FC Find-E58AN8)
0022    Hide Control(FC STORE ADDRESS NUMBER)
0023    Hide Control(FC Store Address Number)
0024 End If
0025 If SI cMCU_Visible is equal to "N"
0026    Hide Control(FC Combo-MCU)
0027    Hide Control(FC Find-MCU)
0028    Hide Control(FC BUSINESS UNIT)
0029    Hide Control(FC Business Unit)
0030 End If

7. B button(logic button):
--eg--
0001 // Referencing Ajisen
0002 VA frm_Security_Exists = "N"
0003 Retrive Store User Profile Information By User ID
        SL UserID -> BF szE58PortalUserID
        VA frm_Security_DefaultCO <- BF szCompany
        VA frm_Security_DefaultE58AN8 <- BF mnE58StoreAddressNumber
        VA frm_Security_Exists <> BF cRecordExistYN
        VA frm_Security_DefaultMCU <- BF szCostCenter
0004 If VA frm_Security_Exists is equal to "Y"
0005    Remove Item by Key(FC Combo-MCU, 1, )
0006    F58L101.Select
           VA frm_Security_DefaultCO =  TK Company
           VA frm_Security_DefaultE58AN8 =  TK Store Address Number
0007    F58L101.Fetch Next
           VA frm_Curr_MCU <- TK Business Unit
0008    VA frm_MCUNumber = 0
0009    While SV File_IO_Status is equal to CO SUCCESS
0010       VA frm_MCUNumber = VA frm_MCUNumber+1
0011       F0006 Get Business Unit Description A7
              VA frm_Curr_MCU -> BF szCostcenter
              VA frm_Curr_ALPH <- BF szDescription001
0012       Add Item(FC Combo-MCU, VA frm_Curr_MCU, VA frm_Curr_ALPH, )
0013       F58L101.Fetch Next
              VA frm_Curr_MCU <- TK Business Unit
0014    End While
0015    //
0016    // AN8:FC,Disable
0017    // MCU:Combo
0018    //
0019    Show Control(FC Find-CO)
0020    Disable Control(FC Find-CO)
0021    FC Find-CO = VA frm_Security_DefaultCO
0022    //
0023    Hide Control(FC Combo-CO)
0024    //
0025    Show Control(FC Find-E58AN8)
0026    Disable Control(FC Find-E58AN8)
0027    FC Find-E58AN8 = VA frm_Security_DefaultE58AN8
0028    //
0029    Hide Control(FC Combo-E58AN8)
0030    //
0031    Hide Control(FC Find-MCU)
0032    FC Find-MCU = VA frm_Security_DefaultMCU
0033    //
0034    Show Control(FC Combo-MCU)
0035    If VA frm_MCUNumber is greater than "1"
0036       Enable Control(FC Combo-MCU)
0037    Else
0038       Disable Control(FC Combo-MCU)
0039    End If
0040    Select Item(FC Combo-MCU, VA frm_Security_DefaultMCU)
0041 Else
0042    //
0043    // AN8:FC,Enable
0044&bsp;   // MCU:FC,Enable
0045    //
0046    Show Control(FC Find-CO)
0047    FC Find-CO = "*"
0048    //
0049    Hide Control(FC Combo-CO)
0050    //
0051    Show Control(FC Find-E58AN8)
0052    Disable Control(FC Find-E58AN8)
0053    FC Find-E58AN8 = "*"
0054    //
0055    Hide Control(FC Combo-E58AN8)
0056    FC Combo-E58AN8 = "*"
0057    //
0058    Show Control(FC Find-MCU)
0059    Enable Control(FC Find-MCU)
0060    FC Find-MCU = "*"
0061    //
0062    Hide Control(FC Combo-MCU)
0063    FC Combo-MCU = "*"
0064 End If

- 作者: p8499 2008年06月24日, 星期二 12:05  回复(0) |  引用(0) 加入博采

Security via Sub Form™

Power Browse Side:

1. Put SSF(Security Sub Form) on the screen panel, surrouded with a Group element.
2. Form variables:
       frm_BoolY,
       frm_BoolN,
       frm_SecurityStyle.
3. Post Dialog is Inisialized:
       0001 VA frm_BoolY="Y"
       0002 VA frm_BoolN="N"
       0003 VA frm_SecurityStyle="B"
       0004 Notify Child(FC Security)
4. Put these element invisibly on the panel:
       View.CO[criteria=equal,wildcard display]
       View.E58AN8[criteria=equal,wildcard display]
       View.MCU[criteria=equal,wildcard display]
5. Set mapping link:
       VA frm_SecurityStyle -> SI:cLogicStyle
       FC Find-MCU <- SI:szFindMCU
       FC Find-E58AN8 <- SI:mnFindE58AN8
       FC Find-CO <- SI:szFindCO
       VA frm_BoolY -> SI:cMCU_Visible
       VA frm_BoolY -> SI:cE58AN8_Visible
       VA frm_BoolY -> SI:cCO_Visible

- 作者: p8499 2008年06月24日, 星期二 11:48  回复(0) |  引用(0) 加入博采

Add Record to DB - Before

Header Detail:Add Record to DB - Before

此时,FC(除Criteria Items外)已赋给BC
未在Screen上有FC的字段,相应BC值现为空。需要在此事件中直接操作BC
事件后,程序自动通过BC更新数据库

- 作者: p8499 2008年06月20日, 星期五 16:23  回复(0) |  引用(0) 加入博采

查询条件即时变更

每个CheckBox设置一个CriteriaButton,该CriteriaButton仅Append查询条件而不Clear。当任意一个CheckBox按下时,先Clear全部查询条件,然后逐个按下所有CriteriaButton。

(原文章被误删)

- 作者: p8499 2008年06月17日, 星期二 09:55  回复(0) |  引用(0) 加入博采

Implementation-Addresses

Hierarchy

Form

View

Table

一个AN8

Find/Browse:P01012/W01012B;
Fix/Inspect:W01012A

V0101E

F0101<AN8>

+有多个Who

Detail:P0111/W0111A

V0111A

F0111<AN8,IDLN>

++有多个Phone

Detail:P0115/W0115A

V0115A

F0115<AN8,IDLN,CNLN,RCK7>

++有多个Internet地址

Detail:P01111/W01111I

V01151

F01151<AN8,IDLN,RCK7>

++有多个相关人

Detail:P01111/W01111F

V01112

F01112<AN8,IDLN,CNLN>

+++有多个Phone

Detail:P0115/W0115A

V0115A

F0115<AN8,IDLN,CNLN,RCK7>

++有多个AltAddress

Detail:P01111/W01111E

V01161

F01161<AN8,IDLN,EFTB,ATYPE>

 

 

 

 

 

- 作者: p8499 2008年06月3日, 星期二 16:12  回复(0) |  引用(0) 加入博采

摘录PeopleBook关于Set Selection的用法

Set Selection Group

Description

The Set Selection Group system function enables you to group together fetching criteria; this is the only characteristic of this system function that makes it different from the Set Selection system function. If you are not familiar with the Set Selection system function, please review the Grid Control System Functions section in the Form Design Aid guide.

The following three examples describe how Set Selection and Set Selection Group perform, and illustrate the differences in their functionality.

The result is that all employee records with the name ABC and all customer records are fetched.

Example

Example 1 – Set Selection

A form has a filter field called Alpha Name (ALPH), which is associated with the Alpha Name column in the F0101 table. In addition, there are two Set Selection system functions under the Find Button Clicked event. These two system functions are as follows:

  • Set Selection (FC Grid,F0101,AT1,<equal>,'E',<AND>)

  • Set Selection (FC Grid,F0101,AT1,<equal>,'C',<OR>)

AT1 is the Search Type column in table F0101. Value ‘E’ is for Employee and value ‘C’ is for Customer.

When a user enters ABC in the filter field and then clicks the Find button, the following conceptual WHERE clause is created:

WHERE ALPH=ABC AND AT1=E OR AT1=C

Example 2 – Set Selection Group

A form has a filter field called Alpha Name (ALPH), which is associated with the Alpha Name column in the F0101 table. In addition, there are two Set Selection Group system functions under the Find Button Clicked event. These two system functions are as follows:

  • Set Selection Group (FC Grid,F0101,AT1,<equal>,'E',<AND>)

  • Set Selection Group (FC Grid, F0101,AT1,<equal>,'C',<OR>)

AT1 is the Search Type column in the F0101 table. Value ‘E’ is for Employee and value ‘C’ is for Customer.

When a user enters ABC in the filter field and then clicks the Find button, the following conceptual WHERE clause is created:

WHERE ALPH=ABC AND (AT1=E OR AT1=C)

The result is that all employee and all customer records with the name ABC are fetched.

Example 3 – Set Selection and Set Selection Group

A form has a filter field called Alpha Name (ALPH), which is associated with the Alpha Name column in the F0101 table. In addition, there are two Set Selection system functions and two Set Selection Group system functions under the Find Button Clicked event. These four system functions are as follows:

  • Set Selection (FC Grid,F0101,AN8,<greater than>,'100',<AND>)

  • Set Selection Group (FC Grid,F0101,AT1,<equal>,'E',<AND>)

  • Set Selection (FC Grid,F0101,AN8,<less than>,'200',<AND>)

  • Set Selection Group (FC Grid,F0101,AT1,<equal>,'C',<OR>)

AN8 is the Address Number column in the F0101 table; AT1 is the Search Type column in the F0101 table. Value ‘E’ is for Employee and value ‘C’ is for Customer.

When a user enters ABC in the filter field and then clicks the Find button, the following conceptual WHERE clause is created:

WHERE ALPH=ABC AND AN8>100 AND AN8<200 AND (AT1=E OR AT1=C)

The result is that all employee and all customer records with the name ABC and address number in the range of 100 to 200 are fetched.

Although shown in this example, the usage of mixed Set Selection and Set Selection Group is not a good practice. The purpose of this example is to show the runtime behavior - Set Selection Group system functions are grouped and appended to the WHERE clause at the end.

- 作者: p8499 2008年05月26日, 星期一 09:58  回复(0) |  引用(0) 加入博采

Security代码

Listing of ER for Application : Potential Member Master (P58N223)


=======================================================================
     FORM: Potential Member Master Data Maintenance [FIND BROWSE] (W58N223A)
======================================================================
     CONTROL:  BUTTON Security [HIDDEN]
     EVENT:  Button Clicked
-----------------------------------------------------------------------
     evt_Curr_AN8
     evt_Curr_MCU
     evt_Curr_LNID
     evt_Curr_ALPH
     evt_AN8Number
     evt_Curr_INT01
     evt_SPHD
     evt_MCUNumber
     evt_1st_MCU
0001 // Retrieve Values
//通用:函数Out参数:当前用户有否Security限制
0002 FC Security-Exists [HIDDEN] = "N"
//通用:查询当前用户(By UserID)的默认CO,AN8,MCU
0003 Retrive Store User Profile Information By User ID
        SL UserID -> BF szE58PortalUserID
        FC Security-DefaultCo [HIDDEN] <- BF szCompany
        FC Security-DefaultAN8 [HIDDEN] <- BF mnE58StoreAddressNumber
        FC Security-Exists [HIDDEN] <> BF cRecordExistYN
        FC Security-DefaultMCU [HIDDEN] <- BF szCostCenter
0004 //
//如果当前用户有Security限制
0005 If FC Security-Exists is equal to "Y"
0006    //
0007    // Retrieve Values
//Security:查询当前用户共有多少AN8
0008    Initial SMS Security By user id
           SL UserID -> BF szE58PortalUserID
           FC Security-AN8Number [HIDDEN] <- BF nTotalNumberOfReturnValue
           FC Security-DefaultAN8 [HIDDEN] -> BF mnDefaultE58StoreAddressNumber
           FC Security-DefaultMCU [HIDDEN] -> BF szDefaultCostCenter
           FC Security-DefaultCo [HIDDEN] -> BF szDefaultCompany
           FC Security-AN8Multi [HIDDEN] <- BF cHavingMultiStoreAddressYN
0009    //
0010    // Initialize Controls
//SecurityFind&Combo控件设置(FC:CO;Combo:AN8,MCU
0011    FC Find-E58AN8 = FC Security-DefaultAN8 [HIDDEN]
0012    FC Find-CO = FC Security-DefaultCo [HIDDEN]
0013    FC Find-MCU = FC Security-DefaultMCU [HIDDEN]
0014    Hide Control(FC Find-E58AN8)
0015    Hide Control(FC Find-MCU)
0016    Show Control(FC Find-CO)
0017    Show Control(FC Combo-AN8)
0018    Show Control(FC Combo-MCU)
0019    Disable Control(FC Find-CO)
0020    //
0021    // Set Combo AN8
//Security:获得该用户首个AN8和总AN8数。
0022    Remove Item by Key(FC Combo-AN8, "1",  )
0023    Fetch First Store Address Number
           VA evt_Curr_AN8 <- BF mnE58StoreAddressNumber
           VA evt_Curr_MCU <- BF szCostCenter
           SL UserID -> BF szE58PortalUserID
           VA evt_Curr_LNID <> BF mnCurrentLineNumber
           VA evt_AN8Number <- BF nTotalStoreAddressNumber
           VA evt_Curr_ALPH <- BF szNameAlpha
//首个AN8处理
0024    Add Item(FC Combo-AN8, VA evt_Curr_AN8, VA evt_Curr_ALPH, )
//当一个AN8
0025    If FC Security-AN8Number is less than or equal to "1"
0027       Disable Control(FC Combo-AN8)
//当多个AN8
0028    Else
0030       VA evt_Curr_INT01 = 1
0031       While VA evt_Curr_INT01 is less than or equal to VA evt_AN8Number
0032          Fetch Next Store Address Number
                 VA evt_Curr_AN8 <- BF mnE58StoreAddressNumber
                 VA evt_Curr_MCU <- BF szCostCenter
                 SL UserID -> BF szE58PortalUserID
                 VA evt_Curr_LNID <> BF mnCurrentLineNumber
                 VA evt_Curr_ALPH <- BF szNameAlpha
0033          Add Item(FC Combo-AN8, VA evt_Curr_AN8, VA evt_Curr_ALPH, )
0034          VA evt_Curr_INT01 = VA evt_Curr_INT01+1
0035       End While
0036    End If
//SecurityComboAN8当前值设置
0037&nsp;   FC Combo-AN8 = FC Security-DefaultAN8 [HIDDEN]
0038    //
0039    // Set Combo MCU
0040    Press Button(FC Set Combo-MCU)
0041    //
0042 Else
0043    //
0044    // 2 Non-Existed
//SecurityFind控件设置(CO,AN8,MCUFC
0045    Show Control(FC Find-E58AN8)
0046    Show Control(FC Find-MCU)
0047    Show Control(FC Find-CO)
0048    Hide Control(FC Combo-AN8)
0049    Hide Control(FC Combo-MCU)
0050    Show Grid Column(FC Grid, GC Co)
0051    Show Grid Column(FC Grid, GC CompanyDescription)
0052    Show Grid Column(FC Grid, GC Store AddressNumber)
0053    Show Grid Column(FC Grid, GC Address NumberDescription)
0054    //
0055 End If

Monday May 12, 2008  15:51

=======================================================================
     FORM: Potential Member Master Data Maintenance [FIND BROWSE] (W58N223A)
=======================================================================
     CONTROL:  BUTTON Set Combo-MCU [HIDDEN]
     EVENT:  Button Clicked
-----------------------------------------------------------------------
     evt_MCUNumber
     evt_SPHD
     evt_Curr_MCU
     evt_Curr_LNID
     evt_Curr_ALPH
     evt_Curr_CO
     evt_Curr_INT01
     evt_1st_MCU
0001 // --------IN--------
0002 // FC Find-AN8
0003 // --------OUT--------
0004 // FC Combo-MCU
0005 //
0006 // Remove
0007 Remove Item by Key(FC Combo-MCU, 1, )
0008 //
0009 // Get the 1st
0010 Fetch First Store MCU
        FC Find-E58AN8 -> DSMEMBER
        VA evt_Curr_MCU <- DSMEMBER
        SL UserID -> DSMEMBER
        VA evt_Curr_LNID <> DSMEMBER
        VA evt_Curr_ALPH <- DSMEMBER
        VA evt_MCUNumber <- DSMEMBER
        VA evt_SPHD -> DSMEMBER
        VA evt_Curr_CO <- DSMEMBER
0014    Add Item(FC Combo-MCU, VA evt_Temp_MCU, VA evt_Curr_ALPH, )
0011 //
0012 If VA evt_MCUNumber is less than or equal to "1"
0013    // Set the 1st
0015    FC Combo-MCU = VA evt_Curr_MCU
0016    Disable Control(FC Combo-MCU)
0017 Else
0018    // Set All
0019    VA evt_Curr_INT01 = 1
0020    VA evt_1st_MCU = VA evt_Curr_MCU
0021    While VA evt_Curr_INT01 is less than or equal to VA evt_MCUNumber
0023       Fetch First Store MCU
              FC Find-E58AN8 -> DSMEMBER
              VA evt_Curr_MCU <- DSMEMBER
              SL UserID -> DSMEMBER
              VA evt_Curr_LNID <> DSMEMBER
              VA evt_Curr_ALPH <- DSMEMBER
              VA evt_SPHD -> DSMEMBER
              VA evt_Curr_CO <- DSMEMBER
0024       VA evt_Curr_INT01 = VA evt_Curr_INT01+1
0025    End While
0026    Enable Control(FC Combo-MCU)
0027    FC Combo-MCU = VA evt_1st_MCU
0028 End If 

Monday June 16, 2008  16:26

 

 

 

 

- 作者: p8499 2008年05月15日, 星期四 11:24  回复(0) |  引用(0) 加入博采

Fix/Inspect的FI大体

JDE的单体是Form.

Fix/Inspect的FI大体:

[cd_EV01]             ProcCode      (I)
[key_DD]   KeySet     Key_1...Key_n (I)
[col_DD]   NormalCols Col_1...Col_n (I&O)
[dir_EV01]            DirCode       (O)

- 作者: p8499 2008年05月15日, 星期四 11:12  回复(0) |  引用(0) 加入博采

JDE中时间人性化显示问题

NumericTime--实际值,隐藏
FormatedTime--面对用户的输入,显示值
函数B1700280

从数据库读出时显示NumericTime->FormatedTime
[Form.Write Grid Line-After]
0001 Format and Edit Time
        GC NumericTime [HIDDEN] <> BF mnNumericTime
        GC FormatedTime <> BF szFormattedTime
        <Zero> -> BF cMode

GC退出时对用户输入的FormatedTime->NumericTime
[Grid.Row Exit & Changed - Asynch]
0001 Format and Edit Time
        GC NumericTime [HIDDEN] <> BF mnNumericTime
        GC FormatedTime <> BF szFormattedTime
        "1" -> BF cMode

- 作者: p8499 2008年05月11日, 星期日 17:07  回复(0) |  引用(0) 加入博采

JDE Log

JDE Log设置文件:
C:\e812\system\OC4J\j2ee\home\applications\webclient.ear\webclient\WEB-INF\jdelog.properties

JDE Log文件(JAS Log):
C:\e812\system\OC4J\j2ee\home\log

- 作者: p8499 2008年04月27日, 星期日 12:09  回复(0) |  引用(0) 加入博采

J2ME for SonyEricsson K310

The following are the Java libraries which SonyEricsson K310 supports:

JSR 118(MIDP 2.0)
JSR 139(CLDC 1.1)
JSR 185(Java Technology for the Wireless Industry)
JSR 135(Mobile Media API)
JSR 75(PDA Optional Packages)
JSR 184(Mobile 3D Graphics)
JSR 172(J2ME Web Services)
JSR 120(Wireless Messaging API)
JSR 205(Wireless Messaging API 2.0)
Nokia UI API 1.1
Mascot Capture

- 作者: p8499 2008年02月25日, 星期一 17:02  回复(0) |  引用(0) 加入博采

对实例变量初始化get()的修改

哪些代码段需要获取对象锁
//对线程安全对象状态的修改
//操作过程中不希望对象被其他线程干扰

示例:
public class A
{ protected String name;
  protected String getName()
  { if(name==null)
    { name="ABC";
    }
    return name;
  }
  public A()
  { name=null;
  }
}

分析getName()方法中有代码是需要事务性[1]完成的,不需要暂停所有其他线程,只需暂停所有:A上的加锁操作。
改动方法1
界定事务边界----上至if(name==null),下至return name
原因是避免行代码执行前与后,实例状态不一致[2]
  protected String getName()
  { synchronized(this)
    { if(name==null)
      { name="ABC";
      }
      return name;
    }
  }

[1]该段代码希望一次性执行完;
  
该对象在被操作过程中,状态始终不被其他线程所干扰(非加锁方法仍可执行,所以对实例状态有变化的代码都应锁住实例)

[2]关于行代码执行前后,对象状态不统一:
||                 ||
if(name==null)     ||
||                 name="ABC";
name=”ABC”;        ||
||                 ||
(线程1)            (线程2)
线程1在作判断时,得到true,但它的下一行代码执行前,线程2已经对name赋值使其不为null
return name
前,怕有其他代码对name有影响。

改动方法2:(参见http://lonegunman.spaces.live.com/blog/cns!9C763BD9399B0328!1648.entry以及http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

- 作者: p8499 2007年06月23日, 星期六 12:41  回复(0) |  引用(0) 加入博采