Добрый день!
Воспользовался советом из http://community.terrasoft.ua/forum/topic/1989
Решаю сходную проблему, только вместо задачи запускаю бизнес процесс
debugger;
var DateObject = new Date(); //получаем объект типа Date с текущей датой
var DayOfMonth = DateObject.getDate();
if (DayOfMonth == 21)
{
WFStartByID('{38ABACB8-F3F5-409B-993D-6553D6393AB4}',null,null);
}
}
В WFStartByID первой строкой идет присвоение переменной
Но присваивается ей пустая строка и соответственно дальше ничего не работает.
Как я понял, у моего окна не созданы атрибуты.
А как их создать?
И не могли бы Вы прислать пример этого простого окна?
Нравится
Добрый день, Кирилл!
В скрипте scr_Main в функции Initialize() нашел следующий пример:
var WorkflowEngine = System.CreateObject('TSWorkflowLibrary.WorkflowEngine'); WorkflowEngine.Connector = Connector; Connector.Attributes(WorkflowEngineAttrName) = WorkflowEngine;
WorkflowEngineAttrName - константа, описанная в scr_Consts:
var WorkflowEngineAttrName = 'WorkflowEngine';
Другими словами, Вам в скрипте необходимо выполнить аналогичный код.
Желаю успехов!
Спасибо. Процесс запустился, но как я понимаю нужно еще принудительно выполнить шаг?
Насколько помню, запуска WFStartByID вполне достаточно.
После выполнения WFStartByID, процесс стартует и встает в состояния ожидания, и задача не генерится.
Чтобы запустить шаг нужно выполнить что-то типа такого...
WorkflowEngine.ProcessWorkflowItem(ItemID);
А где взять этот ItemID не понятно....
Попробовал воспроизвести.
Реализовал следующий код:
function wnd_TestOnPrepare(Window) { var WorkflowEngine = System.CreateObject('TSWorkflowLibrary.WorkflowEngine'); WorkflowEngine.Connector = Connector; Connector.Attributes('WorkflowEngine') = WorkflowEngine; WFStartByID('{F3D2290C-3EFA-437B-A0E9-25D477CD0385}'); }
Этот код выполняется во время подготовки окна, которое запускал так:
tscrm.exe /wnd=wnd_Test
Процесс ("Тендер") замечательно запустился, никаких дополнительных действий не нужно. Видимо, в Вашем случае проблема с самим процессом, а не механизмом его запуска. Придется отлаживаться построчно, проверять как работает процесс.
Желаю успехов!
Хм... а у меня процесс тендер тоже не запустился ;-(
Вероятно всего дело в том, что у меня версия Террасофта 3.1.0.16, а Вы, наверное, пробуете на 3.2
Спасибо Вам за помощь.
Наиболее вероятная причина того, что Вы не видели, как процесс запустился - принудительное закрытие Вашего окна на OnShow, которое влечет за собой принудительное закрытие всех окон приложения без возможности отмены. Дело в том, что созданная по процессу задача не сохраняется в БД, пока пользователь не нажмет ОК в карточке задачи.
На самом деле процесс запускается (первый элемент выполняется, но не до конца), просто пользователь может об этом узнать, если зайдет в раздел Процессы и выполнит шаг.
Т.е. нужно программно нажать на кнопку Ok (поскольку человека там никакого не будет), а как это сделать?
Нужно же сначало как-то получить указатель на окно задачи, а потом еще нажать кнопку?
Мы решили подобную задачу таким образом (нужно было запускать определенный процесс без показа первой задачи):
1. Доработали элемент процесса "Задача" (wa_TaskActionScript):
- добавили параметр 'HideTaskEditForm', который берем из соответствующего параметра процесса:
function wa_TaskActionOnInitialize(WorkflowAction, ActionItem) { //... //Привязка параметра WFConnectParams(ActionItem, 'HideTaskEditForm'); }
2. Добавили метод для создания задачи без показа формы редактирования:
function SilentAddTaskWorkflowItem(DiagramItem, WorkflowItemID, ExecuteDate, DueDate){ TaskID = Connector.GenGUID(); var TaskDataset = GetSingleItemByCode('ds_Task', 'TaskAction'); TaskDataset.Append(); try { TaskDataset.Values('ID') = TaskID; TaskDataset.Values('Title') = DiagramItem.Caption; //Здесь нужно разместить свою логику по заполнению параметров задачи /* var OpportunityID = WFGetParamValue(DiagramItem, 'OpportunityID'); TaskDataset.Values('OpportunityID') = OpportunityID; var AccountID = WFGetParamValue(DiagramItem, 'AccountID'); TaskDataset.Values('AccountID') = AccountID; var ContactID = WFGetParamValue(DiagramItem, 'ContactID'); TaskDataset.Values('ContactID') = ContactID; TaskDataset.Values('TypeID') = WFGetParamValue(DiagramItem, 'TypeID'); TaskDataset.Values('OwnerID') = WFGetParamValue(DiagramItem, 'OwnerID'); */ TaskDataset.Values('WorkflowItemID') = WorkflowItemID; TaskDataset.Values('StartDate') = ExecuteDate; TaskDataset.Values('DueDate') = DueDate.getVarDate(); TaskDataset.Post(); } finally { TaskDataset.Close(); } }
3. Доработали логику в OnExecute элемента:
function wa_TaskActionOnExecute(WorkflowAction, ActionItem, ItemDataset, IsComplete, ResultLinkCodes) { //... if (WFGetParamValue(ActionItem, 'HideTaskEditForm')){ SilentAddTaskWorkflowItem(ActionItem, ItemID, ExecuteDate, DueDate); WFSetParamValue(ActionItem, 'HideTaskEditForm', false); } else { ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues); } IsComplete.Value = false; }
4. При запуске процесса задаем значение параметра HideEditForm:
var ParamNames = new Array('HideTaskEditForm'); var ParamValues = new Array(true); WFStartByID('{F3D2290C-3EFA-437B-A0E9-25D477CD0385}', ParamNames, ParamValues);