Любой человек который когда либо пробовал писать скрипт в Siebel CRM eScript сталкивался с необходимостью массовой активации полей в определенном бизнес компоненте (Bussines Component) как правило это выглядит следующим образом:
Объявляем необходимый бизнес компонент и активируем необходимые нам поля (Siebel CRM eScript examples):
var bo = TheApplication().ActiveBusObject(); var bc = bo.GetBusComp("List Of Values"); bc.ActivateField("Language"); bc.ActivateField("Value"); bc.ActivateField("Type");
Так выглядит Siebel CRM eScript ActivateField.
Но этот вариант является не всегда удобным поскольку в больших скриптах бывает необходимость в активации 20 и более полей. В результате код очень быстро вырастает в размере.
Я предлагаю использовать следующий вариант.
function ActivField() { for (var ssk = 1; ssk < arguments.length; ssk++) {arguments[0].ActivateField(arguments[ssk]);} return; } var bo = TheApplication().ActiveBusObject(); var bc = bo.GetBusComp("List Of Values"); ActivField(bc, "Type","Value","Language");
Итак теперь немного подробней. О функции Массовой активации полей в Siebel CRM (Massive ActivateField in Siebel CRM)
Как говорится в BoockShelf property arguments[] это массив аргументов вставленных в функцию. Первая переменная начинается с arguments[0], все последующие с arguments[1] и выше. Именно это мы и используем.
Начинаем цикл по аргументам (поля в бизнес компоненте) которые начинаются с arguments.[1]-го значения и до arguments.[n] аргумента. Напомню в arguments.[0]-м аргументе содержится бизнес компонент
var ContactBO = TheApplication().GetBusObject(«Contact»); var ContactBC = ContactBO.GetBusComp(«Contact»); with (ContactBC) { SetViewMode(AllView); var fieldsPS = TheApplication().NewPropertySet(); var valuesPS = TheApplication().NewPropertySet(); fieldsPS.SetProperty("Last Name", ""); fieldsPS.SetProperty("First Name", ""); ActivateMultipleFields(fieldsPS); ClearToQuery(); ExecuteQuery(ForwardBackward); if (FirstRecord()) { GetMultipleFieldValues(fieldsPS, valuesPS); var slName = valuesPS.GetProperty("Last Name"); var sfName = valuesPS.GetProperty("First Name"); } }
Вариант №2 Детали тут