Реализация передачи параметра из первого элемента процесса в последующие.

Постановка задачи: есть бизнес-процесс, первый элемент – проект. Необходимо, чтобы при появлении после него задачи по процессу, в поле «Проект» проставлялось значение предыдущего проекта.

Итак, для реализации подобного функционала нужно выполнить следующие действия:

Добавить новый параметр в диаграмму OpportunityID.

Добавить новый параметр действие задачи wa_TaskAction. Сохраните изменения.

Добавить новый параметр в действие проекта wa_OpportunityAction. Сохранить изменения.

Затем нужно вернуться в диаграмму и добавить еще один параметр для элемента проекта (с типом «Исходящий»).

Добавить параметр для элемента задачи (с модификатором Var):

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

Затем нужно проверить, есть ли OpportunityID в необходимых функциях в wa_TaskActionScript. Ниже привожу текст скрипта, красным выделен OpportunityID там, где он должен быть обязательно. Рекомендую сверить Ваш скрипт с этим. В случае, если где-то недостает – то добавить этот параметр:

//-----------------------------------------------------------------------------

// wa_TaskActionScript

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

// Event handlers

НЕ нашли? Не то? Что вы ищете?

//-----------------------------------------------------------------------------

function wa_TaskActionOnInitialize(WorkflowAction, ActionItem) {

WFConnectParams(ActionItem, 'AccountID');

WFConnectParams(ActionItem, 'ContactID');

WFConnectParams(ActionItem, 'OpportunityID');

}

function wa_TaskActionOnGetLinksInfo(WorkflowAction, ActionItem,

Codes, Captions) {

var TypeID = WFGetParamsMapItemValue(ActionItem, 'TypeID');

var TaskResultDataset = Services. GetNewItemByUSI('ds_TaskResult');

EnableDatasetFilters(TaskResultDataset, true, 'TypeStatus');

if (!IsEmptyGUID(TypeID)) {

ApplyDatasetFilter(TaskResultDataset, 'TaskTypeID', TypeID, true);

}

TaskResultDataset. Open();

try {

// TODO

// Show Warning

while(!TaskResultDataset. IsEOF) {

Codes. Add(TaskResultDataset. Values('ID'));

Captions. Add(TaskResultDataset. Values('Result'));

TaskResultDataset. GotoNext();

}

}

finally {

TaskResultDataset. Close();

}

}

function wa_TaskActionOnExecute(WorkflowAction, ActionItem, ItemDataset,

IsComplete, ResultLinkCodes) {

// TODO

// Select only required columns

var ItemID = ItemDataset. ValAsGUID('ID');

var TaskID = GUID_NULL;

var AccountID = null;

var ContactID = null;

var OpportunityID = null;

var IsFinish = false;

var ResultID = '';

var TaskDataset = WFGetLikedItemDataset('ds_Task', ItemID);

try {

if (!IsDatasetEmpty(TaskDataset)) {

TaskID = TaskDataset. ValAsGUID('ID');

AccountID = TaskDataset. ValAsGUID('AccountID');

ContactID = TaskDataset. ValAsGUID('ContactID');

OpportunityID = TaskDataset. ValAsGUID('OpportunityID');

IsFinish = TaskDataset. ValAsBool('StatusIsFinish');

ResultID = TaskDataset. ValAsStr('ResultID');

}

}

finally {

TaskDataset. Close();

}

if (IsFinish) {

WFSetParamValue(ActionItem, 'AccountID', AccountID);

WFSetParamValue(ActionItem, 'ContactID', ContactID);

WFSetParamValue(ActionItem, 'OpportunityID', OpportunityID);

IsComplete. Value = true;

ResultLinkCodes. Value = ResultID;

return;

}

var AllowedResultIDs = WFGetOutgoingLinkCodes(ActionItem);

var Attributes = GetNewDictionary();

Attributes. Add('RecordID', TaskID);

WFParamsToDictionary(WorkflowAction, Attributes, 'OwnerGroupID');

Attributes. Add('AllowedResultIDs', AllowedResultIDs);

var DefaultValues = GetNewDictionary();

DefaultValues. Add('Title', ActionItem. Caption);

DefaultValues. Add('WorkflowItemID', ItemID);

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

var ExecuteAfterTimeTypeID =

WFGetParamsMapItemValue(ActionItem, 'ExecuteAfterTimeTypeID');

var ExecuteAfterTimeValue =

parseInt(WFGetParamsMapItemValue(ActionItem, 'ExecuteAfterTimeValue'));

ExecuteDate = WFCalcExecuteTime(ExecuteDate, ExecuteAfterTimeTypeID,

ExecuteAfterTimeValue);

ExecuteDate = ExecuteDate. getVarDate();

DefaultValues. Add('StartDate', ExecuteDate);

var ExecuteTimeTypeID =

WFGetParamsMapItemValue(ActionItem, 'ExecuteTimeTypeID');

var ExecuteTimeValue =

parseInt(WFGetParamsMapItemValue(ActionItem, 'ExecuteTimeValue'));

var DueDate = WFCalcExecuteTime(ExecuteDate, ExecuteTimeTypeID,

ExecuteTimeValue);

DefaultValues. Add('DueDate', DueDate. getVarDate());

WFParamsToDictionary(WorkflowAction, DefaultValues,

'TypeID', 'OwnerID', 'AccountID', 'ContactID', 'OpportunityID');

ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues);

IsComplete. Value = false;

}

Затем нужно внести изменения в wa_OpportunityActionScript. Нужные изменения выделены красным:

//-----------------------------------------------------------------------------

// wa_OpportunityActionScript

//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------

// Event handlers

//-----------------------------------------------------------------------------

function wa_OpportunityActionOnInitialize(WorkflowAction, ActionItem) {

WFConnectParams(ActionItem, 'AccountID');

WFConnectParams(ActionItem, 'OpportunityID');

}

function wa_OpportunityActionOnGetLinksInfo(WorkflowAction, ActionItem, Codes, Captions) {

var Dataset = Services. GetNewItemByUSI('ds_OpportunityStatus');

Dataset. Open();

try {

if (IsDatasetEmpty(Dataset)) {

ShowErrorDialog('Opportunity status dataset is empty.');

return

}

while(!Dataset. IsEOF) {

Codes. Add(Dataset. Values('ID'));

Captions. Add(Dataset. Values('StatusName'));

Dataset. GotoNext();

}

}

finally {

Dataset. Close();

}

}

function wa_OpportunityActionOnExecute(WorkflowAction, ActionItem, ItemDataset, IsComplete, ResultLinkCodes) {

var ItemID = ItemDataset. ValAsGUID('ID');

var OpportunityID = GUID_NULL;

var AccountID = WFGetParamValue(ActionItem, 'AccountID');

var StatusID = '';

var OpportunityDataset = WFGetLikedItemDataset('ds_Opportunity', ItemID);

try {

if (!IsDatasetEmpty(OpportunityDataset)) {

OpportunityID = OpportunityDataset. ValAsGUID('ID');

AccountID = OpportunityDataset. ValAsGUID('CustomerID');

StatusID = OpportunityDataset. ValAsStr('StatusID');

WFSetParamValue(ActionItem, 'AccountID', AccountID);

WFSetParamValue(ActionItem, 'OpportunityID', OpportunityID);

IsComplete. Value = true;

ResultLinkCodes. Value = StatusID;

return;

}

}

finally {

OpportunityDataset. Close();

}

var AllowedResultIDs = WFGetOutgoingLinkCodes(ActionItem);

var Attributes = GetNewDictionary();

Attributes. Add('RecordID', OpportunityID);

Attributes. Add('AllowedResultIDs', AllowedResultIDs);

var DefaultValues = GetNewDictionary();

DefaultValues. Add('Title', ActionItem. Caption);

DefaultValues. Add('WorkflowItemID', ItemID);

DefaultValues. Add('CustomerID', AccountID);

ShowEditWindowEx('wnd_OpportunityEdit', Attributes, DefaultValues);

IsComplete. Value = false;

}

8. Сохраните все внесенные изменения. Перезапустите рабочее приложение Terrasoft CRM и протестируйте работоспособность бизнес-процесса.