Добрый день!Есть БП который состоит из двух задач. Как можно сделать так что при запуске процесса не отображалась окно задачи а сразу она сохранялась. Если поставить чтобы карточка задачи не отображалась в Action то задачи не создается и надо переходить в окно процесса и нажимать выполнить шаг что не очень удобно. Возможно кто нибудь сталкивался с такой проблемой???

Нравится

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

Попробую описать краткий алгоритм.

1) Добавляем в окно редактирования элемента "Задача" (wnd_TaskActionEdit) объект CheckBox для "тихого" режима создания задачи (например, chkCreateTaskInSilentMode).

2) Создаём булевый параметр с названием CreateTaskInSilentMode в элементе "Задача" (wa_TaskAction).

3) В функцию LoadData скрипта wnd_TaskActionEditScript добавляем строчку для чтения значения параметра из элемента процесса:

chkCreateTaskInSilentMode.IsChecked = WFGetParamsMapItemValue(DiagramItem, 'CreateTaskInSilentMode');

4) В функцию SaveData этого же скрипта добавляем строчку для сохранения значения CheckBox'a в параметр элемента БП:

WFSetParamsMapItemValue(DiagramItem, 'CreateTaskInSilentMode', chkCreateTaskInSilentMode.IsChecked);

5) В скрипте wa_TaskActionScript создаём функцию создания задачи по элементу БП:

function CreateTask(DefaultValues){
	var ExistsTaskID = GetDatasetIDByFieldValue('ds_Task', 'WorkflowItemID', 
		DefaultValues('WorkflowItemID'))
	if (!IsEmptyGUID(ExistsTaskID)){
		return;
	}
	var TaskObject = {};	
	TaskObject.DefaultValues = DefaultValues;
	TaskObject.Dataset = GetSingleItemByCode('ds_Task', 'WFCreateTask');
	TaskObject.Dataset.Append();
	TaskObject.Dataset.DisableEvents();
	SetDefaultValues(TaskObject);
	var TaskID = Connector.GenGUID();
	TaskObject.Dataset.Values('ID') = TaskID;
	if (IsEmptyValue(TaskObject.Dataset.Values('PriorityID'))){
		TaskObject.Dataset.Values('PriorityID') = tpiNormal;
	}
	if (IsEmptyValue(TaskObject.Dataset.Values('StatusID'))){
		TaskObject.Dataset.Values('StatusID') = tsNotBegun;
	}
	TaskObject.Dataset.EnableEvents();
	TaskObject.Dataset.Post();
	TaskObject.Dataset.Close();
}

Здесь tpiNormal и tsNotBegun - константы, соответствующие ID приоритета "Нормальный" и состояния "Не начата".

6) При обработке события OnExecute этого же скрипта вместо вызова ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues) проверяем значение параметра и в зависимости от него открываем или не открываем окно редактирования:

................
var CreateTaskInSilentMode = ActionItem.Parameters.ItemsByName('CreateTaskInSilentMode').Value;
if (!CreateTaskInSilentMode) {
	ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues);
} else {
	CreateTask(DefaultValues);
}
................

Примерно так.

Спасибо Олег за помощь. Единственное ошибка возникает в скрипте в строке

SetDefaultValues(TaskObject);

Попробуйте подключить к скрипту wa_TaskActionScript скрипт scr_BaseDBEditUtils.

Спасибо Олег все заработало! Единственное условие немного поправил чтобы окно можно было открыть уже у созданной задачи.

	if ((CreateTaskInSilentMode)&&(TaskID == GUID_NULL)) {
           	CreateTask(DefaultValues,ActionItem,ItemID);
		} else {
        	ShowEditWindowEx('wnd_TaskEdit', Attributes, DefaultValues);
}
Показать все комментарии