Плагин Outlook и автозапуск бизнеспроцессов

При работе с системой через плагин Outlook не работает механизм автозапуска процессов. Т.е., например, при создании инцидента должен запускаться процесс. Если инцидент создать через стандартный интерфейс, процесс запустится. Если же инцидент создать через плагин в процессе привязки нового письма (открыв справочник инцидентов и добавив туда запись в окне связей сообщения), то процесс не запустится.

Разобравшись с механизмом автозапуска обнаружил, что в методе OnPrepare scr_Main инициализируется объект DatasetTriggers и на объект Services вешается обработчик события Deserialize, который в свою очередь проверяет, что десериализуемый объект является датасетом и входит в список автозапуска и вешает на события BeforePost и AfterPost датасета собственные обработчки.

Попробовал повторить тот же трюк при инициализации плагина Outlook. Не работает. Обработчик десериализации не срабатывает. Максимума удалось добиться с подобным кодом

при инициализации плагина
var Wnd = Services.GetSingleItemByUSI('wnd_Main');
Wnd.Prepare();
Connector.Atributes('MainWindow') = wnd;

потом в нужном месте вручную установить на нужный датасет обработчик
DatasetTriggers.Install(MyDataset);

Тогда срабатывает автозапуск процессов на этом датасете. Причём, если вместо wnd_Main использовать другое окно и инициализацию DatasetTriggers делать вручную, то вообще не работает.

Как заставить работать автозапуск процессов в плагине Outlook?
ServiceDesk 3.4

PS В реестрах справочников открываемых через плагин не работают горячие клавиши вроде быстрого поиска и пр. Возможно, связано.

Нравится

3 комментария

Федор, автоматический запуск процессов реализовывался только для окна TSClient, он не будет работать из MSOutlook.
Для реализации данной функциональности нужно при инициализации плагина в его скрипте воссоздать всю необходимую логику, взять ее из scr_Main.
Приблизительный алгоритм (не окончательное решение):
1. Подключить в используемые скрипты scr_DatasetTriggers.
2. В момент инициализации прописать вызов:

DatasetTriggers.Load();
SetServicesEvents();

3. Добавить функции function SetServicesEvents() и function DoAfterDeserializeItem(Service):

function SetServicesEvents() { 	
	Services.EventSubscribedServiceTypeCodes.Add('DBDataset');
	SetObjectEventDispatcher(Self, Services, Services.UID,
		'OnAfterDeserializeItem', 'DoAfterDeserializeItem');
}
 
function DoAfterDeserializeItem(Service) {	
	var ServiceTypeCode = Service.ServiceTypeCode;
	if (ServiceTypeCode == 'DBDataset') {
		DatasetTriggers.Install(Service);
	}
}

Хочу заметить, что окно [Связи сообщения] в MSOutlook создано с минимальной функциональностью, чтобы не нагружать оперативную память и увеличить быстродействие.

А ещё при работе из Аутлука объект Connector имеет значительно меньше атрибутов, чем тот же Connector при обычном запуске TC. И если в карточке (например, задачи) открытой по лукапу в окне связей добавлена логика, работающая с этими атрибутами и не проверяющая их наличие, можно получить ошибку.

Есть реализация запуска БП по ссылке. (Также как мы переходим в раздел или открываем карточку).

Формат ссылки: terrasoft://WFStart/Workflow/%7b8C91E8A4-942C-4F39-BCB3-0C7D5D9C5779%7d/AccountID|%7b04B25C6A-9336-42DD-838F-E686D83B882C%7d
где «%7b8C91E8A4-942C-4F39-BCB3-0C7D5D9C5779%7d» – идентификатор диаграммы,
«AccountID|%7b04B25C6A-9336-42DD-838F-E686D83B882C%7d» – параметер/значение передаваемое в БП. Все параметры в ссылке разделяются «/».

1) Изменена функция RunHyperlink(…) (scr_HyperlinkUtils)

function RunHyperlink(Action, Params) {
         Action = Action.toLowerCase();
         switch (Action) {
                   case 'goto':
                            HyperlinkGotoWorkspace(Params);
                            break;
                   case 'open':
                            return HyperlinkOpenCard(Params);
                            break;
                            //Add this
                   case 'wfstart':
                            return HyperlinkStartWorkflow(Params);
                            break;
         }
}

2) И добавлена функция запуска БП HyperlinkStartWorkflow(…) (scr_HyperlinkUtils)

function HyperlinkStartWorkflow(Params) {
         if (Params.length < 2) {
                   return;
         }
         var Module = Params[0];
         var IDValue = Params[1].replace(/%7b/g, '{').replace(/%7d/, '}'); //Diagram ID
         var ParameterHash = Params.slice(2, Params.length);
         var ParamNames = new Array();
         var ParamValues = new Array();
         for (var i = 0, iLength = ParameterHash.length; i < iLength; i++) {
                   var tmp = new String(ParameterHash[i]).split('|');
                   if (('length' in tmp) && (tmp.length > 1)) {
                            ParamNames.push(tmp[0]);
                            ParamValues.push(tmp[1]);
                   }
         }
         WFStartByID(IDValue, ParamNames, ParamValues);
}
Показать все комментарии