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




Рекомендую сохранить изменения в диаграмме, закрыть ее, а потом открыть и убедиться, что параметры сохранились (сервис сохраниться корректно, если в самой диаграмме переместить связь или какой-либо элемент).
Затем нужно проверить, есть ли 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 и протестируйте работоспособность бизнес-процесса.


