Логический параметр в бизнес-процессе

При работе с дизайнером бизнес-процессов столкнулись с интересным моментом:
1. В элементе "чтение/запись данных" создаем логический параметр со значением "истина" и закрываем элемент;
2. Снова открываем элемент и меняем значение любого другого праметра, закрываем элемент.
3. Снова же открываем элемент чтения/записи, значение логического параметра равняется 0.

Нравится

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

Фича на исправление:)
А в какой версии?

3.3.2.61

Данная проблема возникает из-за различия в форматах булевого поля: в датасете его значения хранятся как 0 или 1 - соответственно typeof(Value) вернёт "number", а в скрипте происходит проверка на тип "boolean" - следовательно, значение должно быть true либо false.

Возможное обходное решение - обрабатывать не числовые значения 0 и 1, а строки "True" и "False". Маловероятно, что в системе найдутся какие-либо сущности с такими названиями. Для реализации необходимо следующее:

1) Изменить блок, соответствующий булевому значению, в функции SaveData скрипта wnd_WorkflowParameterMapEditScript следующим образом:

case wptBool:
	Dataset('BoolValue') = edtBoolValue.IsChecked;
	Dataset('Value') = edtBoolValue.IsChecked ? 'True' : 'False';
	break;

2) Изменить блок, соответствующий строковому значению, в функции ReadDatasetFields скрипта wnd_ReadWriteDataEditScript:

if (typeof(Value) == 'string') {
	if ((Value != 'True') && (Value != 'False')) {
		Record.ParamType = wptString;
		Record.Value = Record.StringValue = Value;
	} else {
		Record.ParamType = wptBool;
		Record.Value = Record.BoolValue = Value == 'True' ? true : false;
	}
}

3) Наконец, внести изменения в блок для булевого значения функции SaveDatasetFields того же скрипта wnd_ReadWriteDataEditScript:

case wptBool:
	ParameterMap.Value = Record.Value;
Показать все комментарии