Получение ID записи, созданной действием "Чтение/запись данных"

Как можно получить ID записи, созданной действием "Чтение/запись данных"? Действие настроено следующим образом:

После выполнения действия запись в таблице создается, но значение параметра диаграммы "Приход на склад продаж поставщика" остается null.
Версия 3.4.0.117.

Нравится

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

Олег, попробуйте получить ID записи, созданной действием "Чтение/запись данных" таким образом:
1. Добавьте в функцию function ReadWriteData(Action) сервиса wa_ReadWriteDataScript строку кода, как отображено на скриншоте:

	WFSetParamValue(Action, ParameterName, DataField.Value);

http://www.community.terrasoft.ru/system/files/_1_0.png

2. Создайте для действия "Чтение/запись данных" БП обработчик события OnAfterExecute. В тело функции обработки события поместите код:

function Action1OnAfterExecute(ActionItem, IsComplete) {     
	if (IsComplete) {	
	var IDValue = WFGetParamValue(ActionItem, 'Field_ID');
	}
}

Переменная IDValue будет содержать идентификатор созданной записи.

Здравствуйте!
Наталья, подскажите пожалуйста как реализовать тоже самое но без необходимости настройки события OnAfterExecute().
Хочу сделать так:
1. Получить ID параметра диаграммы (не разобрался каким образом и где у вас сохраняются значение для поля "=");

2. В случае если успешно выполнен метод Post()

то выполняем следующий код.

var Parameters = ActionItem.ParentItems.ParentDiagram.Parameters;
Parameters.CoreItemsByUID(ParameterID).Value = Dataset.Values('ID');

где ParameterID - это полученный на шаге 1 параметр диаграммы.
Естественно вставляем этот кусок кода сразу же после Dataset.Post().

P.S. Я попробовал сделать все, то что описал создав свой параметр (в действии)... но столкнулся с некоторыми проблемами.
1. Почему-то не всегда удается получить значение из "последнего" (добавленного мною) параметра действия. (причину возникновения ошибки я пока не понял, но после добавления еще одного параметра ошибка получения значения переходит на него))) );
2. Несмотря на использование вот такой записи

Parameters.CoreItemsByUID(ParameterID).Value = Dataset.Values('ID');

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

Геннадий, реализовать описанную задачу у меня получилось таким образом:
1. Добавила в параметры элемента "Чтение/запись данных" (сервис wa_ReadWriteData) еще один параметр под названием FilterName:
http://www.community.terrasoft.ua/system/files/1_52.png
2. Реализовала сохранение значения в параметр FilterName, добавив в функцию function SaveParameters(DiagramItem) сервиса wnd_ReadWriteDataEditScript строку кода:

WFSetParamsMapItemValue(DiagramItem,  'FilterName', edtDiagramParameter.Value.ID);

http://www.community.terrasoft.ua/system/files/2_35.png

3. Получение ID параметра диаграммы.
Изначально объявила переменную FilterName в функции function ReadWriteData(Action) сервиса wa_ReadWriteDataScript:

var FilterName = WFGetParamValue(Action, 'FilterName');

http://www.community.terrasoft.ua/system/files/3_20.png

Затем записываю в параметр диаграммы ID:

if ((Source == rwsDataset) && (Direction == rwdParamsToDataset)) {  
			Dataset.Post();
 
var Param = Action.ParentItems.ParentDiagram.Parameters;			
Param.ItemsByName(FilterName).Value = Dataset.Values('ID'); 
		}

Спасибо, Наталия!
Но я сделал немного по другому.
Достаточно после выполнения метода Post() добавить следующие строки:

var Parameters = Action.ParentItems.ParentDiagram.Parameters;
var ParamNameRecord = WFGetParamsMapItem(Action, 'FilterValue').DiagramParameterName;
Parameters.ItemsByName(ParamNameRecord).Value = Dataset.Values('ID');

но...
Несмотря на то что создается видимость записи в параметр диаграммы... в следующем действии параметр диаграммы оказывается пуст.
Прикрепляю вам тестовый процесс и модифицированный скрипт действия:test.rar

Не могли бы вы объяснить причину возникновения проблемы и указать на возможные пути ее решения?

Кроме этого не могли бы вы подсказать каким образом можно "вытащить" xml диаграммы из параметра действия?

Геннадий, причина возникновения описанной ситуации заключается в том, что все параметры, которые «задизайнены» в WorkflowDiagram – не являются глобальными. Происходит копирование всех параметров из Action’а в диаграмму. И во время копирования параметр Action’а перезаписывает параметр диаграммы (схема возникновения событий отображена во вложенном изображении)

В Вашем случае необходимо изменить код в функции function ReadWriteData(Action) на:

var Parameters = Action.ParentItems.ParentDiagram.Parameters;
var ParamNameRecord = WFGetParamsMapItem(Action, 'FilterValue').DiagramParameterName;
WFConnectParams(Action, ParamNameRecord, ParamNameRecord, wptString, wpmitInOut);
Action.Parameters.ItemsByName(ParamNameRecord).Value = Dataset.Values('ID');
Parameters.ItemsByName(ParamNameRecord).Value = Dataset.Values('ID');

Что касается вопроса:

"Березкин Геннадий" написал:Кроме этого не могли бы вы подсказать каким образом можно "вытащить" xml диаграммы из параметра действия?

Какую задачу необходимо реализовать?

Спасибо теперь все работает.
Только немного поправлю вас, Наталия.

if ((Source == rwsDataset) && (Direction == rwdParamsToDataset)) {
	Dataset.Post();
	// Set value parameter diagram 		
	var ParamNameRecord = WFGetParamsMapItem(Action, 'FilterValue').DiagramParameterName;
	WFConnectParams(Action, ParamNameRecord, ParamNameRecord, wptString, wpmitInOut);
	Action.Parameters.ItemsByName(ParamNameRecord).Value = Dataset.Values('ID');	 			
}

Насколько я понял, то значение действительно записывалось в параметр, но после выполнения действия снова изменялось на 'null'. Получается, что такой код в рамках действия не имеет смысла:

var Parameters = Action.ParentItems.ParentDiagram.Parameters;
Parameters.ItemsByName(ParamNameRecord).Value = Dataset.Values('ID');

По поводу xml!
Иногда существует необходимость знать промежуточное состояние процесса, которое хранится в поле Parameters таблицы tbl_WorkflowItem. Как мне по данным в этом поле получить текст xml, чтобы просматривать значениям присвоенные параметрам диаграммы и действий?

Получить текст XML можно такой записью:

var XMLStorage = GetNewXMLStorage();
XMLStorage.LoadFromDataset(Dataset, XMLDFName);

При необходимости выгрузить XML в файл, используйте запись:

XMLStorage.SaveToFile(FileName, 'UTF-8');

Спасибо, Наталия!

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