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 DeleteRecord
PreCanInvokeMethod invoked ShowQueryAssistant
PreCanInvokeMethod invoked ToggleListRowCount
PreCanInvokeMethod invoked UndoQuery
PreCanInvokeMethod invoked ExecuteQuery
PreCanInvokeMethod invoked GotoNextSet
PreCanInvokeMethod invoked GotoPreviousSet
PreCanInvokeMethod invoked NewQuery
PreCanInvokeMethod invoked NewRecord
PreCanInvokeMethod invoked PositionOnRow
PreCanInvokeMethod invoked UndoQuery
PreCanInvokeMethod invoked UndoRecord
PreCanInvokeMethod invoked WriteRecord
PreCanInvokeMethod invoked ShowPopup
PreCanInvokeMethod invoked ToggleLayout
PreCanInvokeMethod invoked GetBookmarkURL
PreCanInvokeMethod invoked FileSendMail
PreCanInvokeMethod invoked FileSendFax
PreCanInvokeMethod invoked FileSendPage
PreCanInvokeMethod invoked FileSendWireless
PreCanInvokeMethod invoked Import
PreCanInvokeMethod invoked ExportQuery
PreCanInvokeMethod invoked CopyRecord
PreCanInvokeMethod invoked ChangeRecords
PreCanInvokeMethod invoked MergeRecords
PreCanInvokeMethod invoked SelectAll
PreCanInvokeMethod invoked InvertSelection
PreCanInvokeMethod invoked ColumnsDisplayed
PreCanInvokeMethod invoked GotoPrevious
PreCanInvokeMethod invoked GotoNext
PreCanInvokeMethod invoked GotoFirstSet
PreCanInvokeMethod invoked GotoLastSet
PreCanInvokeMethod invoked RefineQuery
PreCanInvokeMethod invoked AboutRecord
PreCanInvokeMethod invoked EditPopup
PreCanInvokeMethod invoked ExecuteReply
PreCanInvokeMethod invoked ExecuteReplyAll
PreCanInvokeMethod invoked ExecuteForward
PreCanInvokeMethod invoked EmailSend
PreCanInvokeMethod invoked EmailCancel
PreCanInvokeMethod invoked RecordCount
PreCanInvokeMethod invoked AddToSyncList
PreCanInvokeMethod invoked RemoveFromSyncList
PreCanInvokeMethod invoked SynchContact
PreCanInvokeMethod invoked NewOrder
PreCanInvokeMethod invoked NewQuote
PreCanInvokeMethod invoked SortOrder
PreCanInvokeMethod 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");
. . . . . .    }

 

posted @ 2014-09-17 17:31  Flamo  阅读(627)  评论(0编辑  收藏  举报