При работе с дизайнером бизнес-процессов столкнулись с интересным моментом:
1. В элементе "чтение/запись данных" создаем логический параметр со значением "истина" и закрываем элемент;
2. Снова открываем элемент и меняем значение любого другого праметра, закрываем элемент.
3. Снова же открываем элемент чтения/записи, значение логического параметра равняется 0.
Нравится
Данная проблема возникает из-за различия в форматах булевого поля: в датасете его значения хранятся как 0 или 1 - соответственно typeof(Value) вернёт "number", а в скрипте происходит проверка на тип "boolean" - следовательно, значение должно быть true либо false.
Возможное обходное решение - обрабатывать не числовые значения 0 и 1, а строки "True" и "False". Маловероятно, что в системе найдутся какие-либо сущности с такими названиями. Для реализации необходимо следующее:
1) Изменить блок, соответствующий булевому значению, в функции SaveData скрипта wnd_WorkflowParameterMapEditScript следующим образом:
[javascript]
case wptBool:
Dataset('BoolValue') = edtBoolValue.IsChecked;
Dataset('Value') = edtBoolValue.IsChecked ? 'True' : 'False';
break;
[/javascript]
2) Изменить блок, соответствующий строковому значению, в функции ReadDatasetFields скрипта wnd_ReadWriteDataEditScript:
[javascript]
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;
}
}
[/javascript]
3) Наконец, внести изменения в блок для булевого значения функции SaveDatasetFields того же скрипта wnd_ReadWriteDataEditScript:
[javascript]
case wptBool:
ParameterMap.Value = Record.Value;
[/javascript]