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