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"); . . . . . . }