Добрый день. Возможно ли каким-то образом из диагаммы процесса, а именно, на выходе из нее, завершить проект? То есть, в диаграмме есть схема последовательности задач, и когда достигаеться конечная стадия, состояние проекта меняеться на "Выполнен". И сразу второй вопрос. Возможно ли запустить процесс при создании задачи?

Заранее благодарю.

Нравится

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

Здравствуйте, Сергей!

Что касается возможности закрытия задачи по завершению процесса, то можем Вам порекомендовать следующее.
Закрытие проекта Вы можете реализовать либо на событии AfterExecute последней задачи по процессу, либо на событии OnFinish элемента Finish процесса. Это будет зависеть от того, какую структуру имеет диаграмма: если в элемент процесса Finish входит только одна ветка, то лучше использовать событие OnFinish этого элемента; если же в этот элемент входит несколько веток (от задач), то реализацию закрытия проекта необходимо прописывать в обработчике события AfterExecute каждой из задач.
В необходимом обработчике события требуется прописать условие типа IsComplete.Value(). А также обработать атрибут проекта (наверняка в диаграмме процесса хранится параметр проекта, с которым связан процесс, и в который передаются значения). Пример обработки параметра представлен ниже:

function Item3OnExecute(ScriptItem, IsComplete) {

var DiagramParameters = ScriptItem.ParentItems.ParentDiagram.Parameters;

var OpportunityID = DiagramParameters.ItemsByName(‘OpportunityID’).Value;

//…здесь в записи проекта по с ID=OpportunityID поставить StateID/StatusID в Завершенное значение

Что касается возможности запуска процесса по действию создания задачи, то Вы можете реализовать подобную функциональность путем использования фукнции StartWorkflowByID ('id процесса'). Эту функцию Вы можете прописать в событии открытия карточки задачи.

Terrasoft Support Team

Здравствуйте. Попробовал добавить выполнение функции
StartWorkflowByID('{06DAE93C-22A5-4B04-BBC7-FE553244DFF7}');

На события src_TaskGridArea -> btnAddOnClick и на src_TaskEdit -> wnd_TaskEditOnPrepare
В обоих случаях вываливаеться ошибка:

Ошибка выполнения метода 'btnAddOnClick'. Предполагается наличие объекта
или
Ошибка выполнения метода 'TaskEditOnPrepare'. Предполагается наличие объекта

Перед выполнением кода, я запустил процесс из вкладки процессы, тогда запись процесса появилась в tbl_Workflow.
Означает ли это, что для того чтобы запустить процесс программно, нужно запустить его из преложения как минимум раз?

В чем может быть проблема? Большое спасибо.

Может быть нужно поключить какие-то дополнительные скрипты?

Здравствуйте, Сергей!

Благодарим Вас за детальное описание поставленной задачи. Для реализации необходимой Вам функциональности требуется выполнить следующее:
1. Необходимо, во-первых, подключить дополнительно скрипт scr_WindowUtils в меню "Использовать скрипты" (если такого не имеется в наличии).
2. В требуемом обработчике события необходимо для вызова конкретного бизнес-процесса прописать следующую строку:
WFStartByID('{DD6891DD-FD4C-4753-8E42-25888CD5A0C3}', null, null);
Вместо указанного кода ID Вам необходимо вставить свой ID, предварительно скопированный в буфер обмена из таблицы tbl_Service Вашей СУБД.
3. Сохраните внесенные изменения, перезапустите рабочее приложение Terrasoft CRM и протестируйте работоспособность системы.

Здравствуйте. Большое спасибо за помощь.

Подскажите, пожалуйста, как правильно получить идентификатор проекта с которым связана задача? Проект указываеться при создании первой задачи и больше не меняется. Значит, нужно получить этот идентификатор на момент перехода с первой задачи на диаграмме. Наверное на событие
function Action1OnAfterExecute(ActionItem, IsComplete) {}? Откуда можно получить код проекта?
Заранее благодарю.

и еще, скажите пожалуйста, можно ли в диаграмме передавать параметры (такие как контрагент, контакт, проект) из завершенной задачи в новую? Спасибо.

Здравствуйте, Сергей!
Для того, чтобы обеспечить передачу параметра проекта в диаграмму, Вам необходимо выполнить следующее:
1. Создать в диаграмме процесса необходимый параметр, например OpportunityID. Тип этого параметра - строка.
2. Затем необходимо передать этот параметр wa_TaskAction.
3. В диаграмме процесса для элементов-задач нужно настроить передачу параметров. Вам необходимо указать этот параметр и тип модификатора Var (это означает, что в значение параметра элемента будет считано значение соответствующего параметра диаграммы при старте выполнения элемента, и произойдет обратное присвоение при выходе из элемента).
4. Затем для того, чтобы получить параметр OpportunityID по завершении процесса, Вам необходимо выбрать конечный элемент процесса и на событии OnFinish этого элемента прописать следующее:
var OpportunityID = WFGetParamValue.FinishItem.ParentItems.ParentDiagram, ('OpportunityID');
Детальное описание работы функции WFGetParamValue Вы можете найти в скрипте scr_WorkflowUtils.
Также Вы можете использовать и другой способ, а именно:
FinishItem.ParentItems.ParentDiagram.Parameters.ItemsByName('OpportunityID').Value;
В том случае если проект указывается только в первой задаче, то он передается в каждый элемент задачи в ходе отработки бизнес-процесса и попадает в конечный элемент.

Аналогичным образом Вы можете передавать параметры контакта, контаргента, проекта и т.д.

Terrasoft Support Team

Добрый день.

1. Добавил в диаграмму параметры, как на рисунке:

2. Добавил параметры в wa_TaskAction:

3. Для каждого блока задач настроил параметры следующим образом:

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

Также необходимо сохранить проект (идентификатор которого передается в диаграмме), после изменения его состояния. Каким образом можно сохранить изменения?

Спасибо.

Здравствуйте, Сергей!

Благодарим Вас за детальное описание возникшей проблемы.
Вся суть проблемы заключается в том, что в первую задачу по процессу не попадают данные о проекте и контрагенте (в настройках параметров Вы все выполнили корректно). И в результате этого они и не могут передаваться далее по элементам процесса.
Для того, чтобы передать параметры в первую задачу по процессу, Вам необходимо использовать также функцию WFStartByID(о которой мы уже упоминали ранее). Описание реализации этой функции Вы можете просмотреть в scr_WorkflowUtils:
function WFStartByID(WorkflowID, ParamNames, ParamValues);
В качестве аргументов Вам необходимо передать (в конкретном Вашем случае) ID необходимого процесса;
ParamNames - названия параметров, а именно OpportunityID, AccountID и т.д.
ParamValues - значения передаваемых параметров, а именно их ID.
В результате эти параметры передадутся в первую задачу по процессу.

Terrasoft Support Team

Спасибо за помощь.

function Item3OnExecute(ScriptItem, IsComplete) {

var DiagramParameters = ScriptItem.ParentItems.ParentDiagram.Parameters;

var OpportunityID = DiagramParameters.ItemsByName(‘OpportunityID’).Value;

//…здесь в записи проекта по с ID=OpportunityID поставить StateID/StatusID в Завершенное значение

Скажите, пожалуйста, как делаеться обновление записи проекта (обновление состояния) из диаграммы? Спасибо.

Здравcтвуйте, Сергей!

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

function UpdateOpportunityState(OpportunityID, StateID) {
var Prefix = Connector.CurrentUser.IsAdmin ? 'tbl_' : 'vw_';
var SQL = "UPDATE %1Opportunity SET StatusID = '%2' WHERE ID = '%3'";
SQL = FormatStr(SQL, Prefix, StateID, OpportunityID);
Connector.DBEngine.ExecuteCustomSQL(SQL, System.EmptyValue);
}

Terrasoft Support Team

Добрый день. Спасибо за помощь.

Вместо передачи ID проекта (как параметр) в диаграмму, теперь нужно автоматически создавать новый проект перед "входом" в диаграмму (перед запуском первой задачи из нее). Для создания проекта выполняю следующий код на форме:

//СОЗДАНИЕ ПРОЕКТА
var DatasetOpportunity = Services.GetNewItemByUSI('ds_Opportunity');
DatasetOpportunity.Append();
DatasetOpportunity.Values('ID') = Connector.GenGUID();
DatasetOpportunity.Values('Title') = 'новый проект';
DatasetOpportunity.Values('RatingID') = '{541b04fc-d81b-404b-a965-827cdf2976c4}';
DatasetOpportunity.Values('TypeID') = '{274fa07c-72ad-44b3-bab6-57e2e82ce918}';
DatasetOpportunity.Values('CustomerID') = Dataset.Values('AccountID');
DatasetOpportunity.Post();
DatasetOpportunity.Close();

Каким образом я могу узнать ID только что созданного проекта? Спасибо.

Разобрался

Добрый день.
Подскажите, пожалуйста, как в диаграмме, подставить в заголовок новой задачи, значение "Результат подробно" предыдущей задачи?
Попробовал так:

function Action2OnBeforeExecute(ActionItem) {
ActionItem.Caption.Value = Tit.Value; //переменную определил после выполнения предыдущей задачи
}
не получилось.

Заранее благодарен.

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

http://community.terrasoft.ua/forum/topic/1529 (Гамора Дмитрий в пт, 28/03/2008 - 20:56)

Там все подробно описанно. И все работает:)))

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