Задача стояла следующая: Внутри TaskProcess при нажатии кнопки на навигационном апплете (Task Playbar Applet - Top) по определенной логике переходить на обычный экран (View), причем логика построена таким образом, что перейти можно с любого шага таска.
Т.к. в TaskProcess было несколько экранов, а переходить на обычный экран с таска не поставив его в паузу мы можем только после его завершения, пришлось реализовывать логику таким образом, что после ухода с экрана и ряда шагов таска, перед шагом End или Шагом с экраном необходимо было добавить Decision Point который проверял бы нужно нам идти дальше или уйти в end
Чтобы не плодить множество апплетов с обработкой метода NavigateNext Используется только один апплет с унифицированным скриптом.
Назначение перехода передается через Transient BC(в скрипте для примера используется название Custom TBC).
Для этого создается 4 поля
PBA GotoView Flag - признак необходимости перехода, если Y, то переходим
PBA DestViewName - название экрана, на который осуществляется переход
PBA ObjectName - название объекта(BusinessObject), на котором основан экран
PBA BusCompName - название компоненты для которой будет выбрана запись
PBA RecordId - идентификатор записи, которую необходимо показать
В TaskProcess на шагах Siebel Operation проставляются именно эти параметры.
Последние два параметра можно не заполнять, он и нужны если мы переходим на DetailView
Сам скрипт на Play выглядит следующим образом
Т.к. в TaskProcess было несколько экранов, а переходить на обычный экран с таска не поставив его в паузу мы можем только после его завершения, пришлось реализовывать логику таким образом, что после ухода с экрана и ряда шагов таска, перед шагом End или Шагом с экраном необходимо было добавить Decision Point который проверял бы нужно нам идти дальше или уйти в end
Чтобы не плодить множество апплетов с обработкой метода NavigateNext Используется только один апплет с унифицированным скриптом.
Назначение перехода передается через Transient BC(в скрипте для примера используется название Custom TBC).
Для этого создается 4 поля
PBA GotoView Flag - признак необходимости перехода, если Y, то переходим
PBA DestViewName - название экрана, на который осуществляется переход
PBA ObjectName - название объекта(BusinessObject), на котором основан экран
PBA BusCompName - название компоненты для которой будет выбрана запись
PBA RecordId - идентификатор записи, которую необходимо показать
В TaskProcess на шагах Siebel Operation проставляются именно эти параметры.
Последние два параметра можно не заполнять, он и нужны если мы переходим на DetailView
Сам скрипт на Play выглядит следующим образом
function WebApplet_InvokeMethod (MethodName)
{
var boDest:BusObject;
var bcDest:BusComp;
var cTBCName:chars="Custom TBC"; //Имя используемой TBC
//в TBC должны быть следующие поля:
// PBA GotoView Flag - признак необходимости перехода, если Y, то переходим
// PBA DestViewName - название экрана, на который осуществляется переход
// PBA ObjectName - название объекта(BusinessObject), на котором основан экран
// PBA BusCompName - название компоненты для которой будет выбрана запись, может быть пустым
// PBA RecordId - идентификатор записи, которую необходимо показать, может быть пустым
try
{
if (MethodName == "NavigateNext") //проверяем, что нажата кнопка далее
{
if (TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA GotoView Flag")=="Y")//проверяем, что нам нужно перейти на экран
{
boDest=TheApplication().GetBusObject(TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA ObjectName"));
if(TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA BusCompName")!="" && TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA RecordId")!="")
{ //выполняем поиск, если указаны компонета и идентификатор записи, результат будет виден на экране
bcDest=boDest.GetBusComp(TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA BusCompName"));
bcDest.ClearToQuery();
bcDest.SetViewMode(AllView);
bcDest.SetSearchSpec("Id",TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA RecordId"));
bcDest.ExecuteQuery(ForwardBackward);
bcDest.FirstRecord();
}
TheApplication().GotoView(TheApplication().ActiveBusObject().GetBusComp(cTBCName).GetFieldValue("PBA DestViewName"),boDest); //переходим на экран
}
}
}
finally
{ //очистка памяти
bcDest=null;
boDest=null;
}
}
Комментариев нет:
Отправить комментарий