В рамках Лоцман WF и используемой им TMS Scripter 7.18.

При попытке использования следующей конструкции (при нажатии отмена на блоке выбора пользователей из списка (function GetUserList) пытаюсь вернуть задание этому же исполнителю) выдает ошибку (list index out of bounds (-1) when evaluating instruction CallProc ($FFFFFFFFF...…..)), хотя используется как автооперация, в справке написано, что должен возвращать значение -1 при этом. При установке >= 0 все отрабатывет, но это для обработчиков, а моя автооперация будет использоваться как обычная автооперация на схеме, укажите пожалуйста на ошибку.

 

if not result then 

   begin

   showmessage('Для завершения операции необходимо назначить исполнителя следующей стадии')     

begin    

  if Route.inAssignedStageindex-1 then

  begin                        

    CurStage:=Route.Stage(Route.inAssignedStageIndex);

  end   

                if Stage.stState = 'psExamined' then

                begin

                 Stage.SetState('psNone')

                         Route.Save;     

                         Stage.SetState('psConsider')                             

                         Route.Save;     

                  Stage.SetState('psExamined')

                  Route.Save;    

                  end;

                                     

end;

Нравится

1 комментарий

Обратите внимание, что Вы используете другой программный продукт, никак не связанный с тем, которому посвящён этот форум. Лучше будет обратиться к специалистам по упомянутой Вами программе, например, к автору следующего сайта.

Показать все комментарии

Можно ли в элементе БП "Perform Task" установить автора задачи?

Например, БП ответвлялся на курьера, который должен был доставить документы, а потом создается задача для менеджера, чтобы связаться с клиентом. И тогда автором задачи является курьер, что совсем нелогично.

Нравится

5 комментариев

Здравствуйте!

В элементе [Perform Task] указать автора записи не получится.
Вариант 1. Создавать активность с помощью элемента [Добавить данные], заполнять Автор целевым контактом.
Вариант 2. С помощью элемента [Изменить данные] – изменять автора в существующей активности.

"Зарицкий Олег" написал:В элементе [Perform Task] указать автора записи не получится.

Может, как-то несложно модифицировать этот элемент?

Алгоритм есть тут: http://www.community.terrasoft.ua/forum/topic/25021
В коробочной верси возможность появится начиная с 7.10 (возможно в 7.9.2)

"Зарицкий Олег" написал:В коробочной верси возможность появится начиная с 7.10 (возможно в 7.9.2)

А эта функциональность уже появилась?

Показать все комментарии

Добрый день!

нужно добавить в tbl_Workflow поле WorkflowNumber по аналогии с документами, т.е. при создании записи давать ей номер

где мне отловить событие добавления записи в эту таблицу, потому как в датасете в BeforePost он не заходит при запуске бизнес-процесса

или может быть в стартовом элементе БП апдейтить workflow, только где его Action я не знаю, а в каждом бизнес-процессе не вариант прописывать апдейт при старте

подскажите какие-нибудь варианты решения, пожалуйста

Нравится

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

как вариант - триггер в БД INSTEAD OF INSERT

а вот в конфигурации тоже не нашел, где сохраняется экземпляр БП :confused:
уперся в function WFStartByID(WorkflowID, ParamNames, ParamValues), а точнее в

	if (Assigned(Params)) {
		ID = WorkflowEngine.StartWorkflow(WorkflowUSI, Now, Params);
	} else {
		ID = WorkflowEngine.StartWorkflow(WorkflowUSI, Now);
	}
 
// WorkflowEngine 
function GetWorkflowEngine() {
	var WorkflowEngine = GetAttribute(Connector, WorkflowEngineAttrName);
	if (!WorkflowEngine) {
		WorkflowEngine = System.CreateObject('TSWorkflowLibrary.WorkflowEngine');
		Connector.Attributes(WorkflowEngineAttrName) = WorkflowEngine;
		WorkflowEngine.Connector = Connector;
	}
    return WorkflowEngine;
}

Действительно, лучше и проще всего написать триггер.

Спасибо за ответ, Дмитрий!
триггер решил проблему

Показать все комментарии

Подскажите, пожалуйста, как мне получить при запуске бизнес-процесса в элементе "Start" все параметры этого окна:

т.е. мне нужно получить:

  • Название
  • Автоматически запускать процесс
  • При
  • В источнике данных
  • Описание
  • Оба фильтра

Как это сделать?

Нравится

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

сделал, вопрос снимается

Виталий,опишите пожалуйста для других))

напишу один из вариантов, дальше по аналогии, можно что угодно вытянуть

идем в scr_DatasetTriggers

в DatasetTriggers.GetWorkflowParams

дописываем:

for (DatasetTriggerID in this.Triggers) {
		AddParam('DatasetTriggerName', wptString, this.Triggers[DatasetTriggerID].Name);
	}

в данном примере я передаю название, но можно поступить проще, например передать сразу DatasetTriggerID - это запись в таблице: tbl_DatasetTrigger

далее в БП

получаем этот параметр обычным способом:

var ParentDiagram = GetDiagramByItem(ScriptItem);
var DatasetTriggerName = WFGetParamValue(ParentDiagram, 'DatasetTriggerName');

Виталий, большое спасибо за один из примеров))

Показать все комментарии

Иногда нужно установить дату начала задачи в соответствии со значением, которое берется, например, из договора или продажи (эти сущности тоже создаются в ходе бизнес-процесса). На комьюнити есть похожая тема. На ее основе был написан следующий код.

У меня была не одна задача, поэтому использована конструкция switch. Некоторые задачи "зависели" от ключевой даты не "прямо", а, например, нужно было их поставить за 1 или 2 дня до нужной даты. Это тоже описано в примере.

Примечания. Имя ActionItem.Name-- элемент задачи в диаграмме, для которой дату “отсчета” начала задачи (ExecuteDate) нужно поменять. Дата берется из параметров диаграммы (TaskStartDate). По умолчанию дата вычисляется "стандартно”.

Что интересно -- все механизмы вычисления окончания задачи остаются такими же, то есть из карточки задачи (в бп) можно настроить продолжительность задачи.

switch (ActionItem.Name) {
   case  ('Task1'):   //задача, для которой началом есть дата1 --  дата из параметра  
        var Diagram = GetDiagramByItem(ActionItem);
        var ExecuteDate = WFGetParamValue(Diagram, 'TaskStartDate');
   break;
   case ('Task2'):   //дата2 -- за 2 дня до предыдущей даты
        var Diagram = GetDiagramByItem(ActionItem);
        var ExecuteDate = WFGetParamValue(Diagram, 'TaskStartDate');
        ExecuteDate = AddDateDays(new Date(ExecuteDate), -2, true).getVarDate();
   break;
   default:
        var ExecuteDate = ItemDataset.ValAsDateTime('ExecuteDate');
   break;
}

этот "кусок" кода нужно вставить вместо строчки

var ExecuteDate = ItemDataset.ValAsDateTime('ExecuteDate');

в скрипте wa_TaskAction.

еще один момент -- может, кому-то и это пригодится. В бп есть элемент "настраиваемое окно редактирования", в котором можно выбрать определенные поля для изменения. В моем примере это была дата начала задачи, которая в самой карточке имела тип "дата/время", но при отображении в "урезаном" виде (через вышеупомянутое настраиваемое окно редактирования) время нельзя было изменить. Покопавшись в скрипте построения этого окна, приходим к такой модификации скрипта wnd_CustomEditWindowScript:

в функции BuildDataControl(Window, ParentComponent, DatasetLink, DataField)
добавить (где-то в конце, после создания компонента)

//----для даты -- тип контрола дата/время
        if (ComponentType == 'DateTimeDataControl') {
                Component.Kind = dtkDateTime;  
        }
//----

Нравится

Поделиться

0 комментариев
Показать все комментарии