четверг, 23 мая 2013 г.

Использование GotoView в TaskUI.

Задача стояла следующая: Внутри 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 выглядит следующим образом
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;
    }
}




Комментариев нет:

Отправить комментарий