首页 > 代码库 > Siebel Performance for Script <1>

Siebel Performance for Script <1>

1.Code in PreGetFieldValue, PreSetFieldValue, SetFieldValue, PreCanInvokeMethod, PreInvokeMethod and InvokeMethod event handlers has been placed outside the switch on FieldName/MethodName.

Wrong Example:By DW

function BusComp_SetFieldValue (FieldName){. . . . .var boQuote = TheApplication().ActiveBusObject();var bcQuote = boQuote.GetBusComp("Quote");var nExchangeRate = bcQuote.GetFieldValue("Display Exchange Rate");var sCRMCurrencyCode = bcQuote.GetFieldValue("Currency Code");var nCommission = 0,nCRMCommission = 0,nCommmissionRate = 0;var nBudgetConRate =this.GetFieldValue("Conversion Rate");var nQuoteTotal = this.GetFieldValue("Quote Total");var sCurrencyCode = this.GetFieldValue("Currency Code");if(FieldName == "Commission"){. . . . . .    }

Consequence

These event handlers have meaning if related to a particular FieldName or MethodName passed as input by the infrastructure.

Code places outside the switches on such variables will be executed for every field or method. This means that it will be unnecessarily executed a lot of times

For example this is the list of methods invoked to display the Contact List Applet:

PreCanInvokeMethod invoked DeleteRecordPreCanInvokeMethod invoked ShowQueryAssistantPreCanInvokeMethod invoked ToggleListRowCountPreCanInvokeMethod invoked UndoQueryPreCanInvokeMethod invoked ExecuteQueryPreCanInvokeMethod invoked GotoNextSetPreCanInvokeMethod invoked GotoPreviousSetPreCanInvokeMethod invoked NewQueryPreCanInvokeMethod invoked NewRecordPreCanInvokeMethod invoked PositionOnRowPreCanInvokeMethod invoked UndoQueryPreCanInvokeMethod invoked UndoRecordPreCanInvokeMethod invoked WriteRecordPreCanInvokeMethod invoked ShowPopupPreCanInvokeMethod invoked ToggleLayoutPreCanInvokeMethod invoked GetBookmarkURLPreCanInvokeMethod invoked FileSendMailPreCanInvokeMethod invoked FileSendFaxPreCanInvokeMethod invoked FileSendPagePreCanInvokeMethod invoked FileSendWirelessPreCanInvokeMethod invoked ImportPreCanInvokeMethod invoked ExportQueryPreCanInvokeMethod invoked CopyRecordPreCanInvokeMethod invoked ChangeRecordsPreCanInvokeMethod invoked MergeRecordsPreCanInvokeMethod invoked SelectAllPreCanInvokeMethod invoked InvertSelectionPreCanInvokeMethod invoked ColumnsDisplayedPreCanInvokeMethod invoked GotoPreviousPreCanInvokeMethod invoked GotoNextPreCanInvokeMethod invoked GotoFirstSetPreCanInvokeMethod invoked GotoLastSetPreCanInvokeMethod invoked RefineQueryPreCanInvokeMethod invoked AboutRecordPreCanInvokeMethod invoked EditPopupPreCanInvokeMethod invoked ExecuteReplyPreCanInvokeMethod invoked ExecuteReplyAllPreCanInvokeMethod invoked ExecuteForwardPreCanInvokeMethod invoked EmailSendPreCanInvokeMethod invoked EmailCancelPreCanInvokeMethod invoked RecordCountPreCanInvokeMethod invoked AddToSyncListPreCanInvokeMethod invoked RemoveFromSyncListPreCanInvokeMethod invoked SynchContactPreCanInvokeMethod invoked NewOrderPreCanInvokeMethod invoked NewQuotePreCanInvokeMethod invoked SortOrderPreCanInvokeMethod invoked GotoApplet

If an object allocation, a BC query, a call to CountRecords is placed outside the switch, it will be executed unnecessarily more than 40 times only at applet load. This may result in a sub-optimal performance.

Solution

Place all the code in these event handlers inside the switch on method or field name.

Only variable declaration (not allocation) should be places outside.

function BusComp_SetFieldValue (FieldName){. . . . .if(FieldName == "Commission"){var boQuote = TheApplication().ActiveBusObject();var bcQuote = boQuote.GetBusComp("Quote");var nExchangeRate = bcQuote.GetFieldValue("Display Exchange Rate");var sCRMCurrencyCode = bcQuote.GetFieldValue("Currency Code");var nCommission = 0,nCRMCommission = 0,nCommmissionRate = 0;var nBudgetConRate =this.GetFieldValue("Conversion Rate");var nQuoteTotal = this.GetFieldValue("Quote Total");var sCurrencyCode = this.GetFieldValue("Currency Code");. . . . . .    }

 

Siebel Performance for Script <1>