|
|||||||
Управление операциями
Время создания: 13.04.2017 15:26
Раздел: Global - Programming - Скрипт
Запись: xintrea/mytetra_db_mcold/master/base/1492086388oe6bnj2zdf/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
3.3.4. Управление операциями Для управления свойствами операций используется скриптовый объект TbtkScriptOperationOptionsObject . Получить к нему доступ можно в паскаль-скрипте через свойство выборки TbtkScriptSelectionObject.OperationOptions TbtkScriptOperationOptionsObject содержит следующие методы:
Блокирование (запрет на выполнение) операций делает их не доступными для выполнения с помощью метода ExecOpScript, а так-же делает неактивными соответствующие им элементы интерфейса. 3.3.4.1. Блокирование стандартных операций Для запрета или разрешения выполнения стандартных операций используется метод TbtkScriptOperationOptionsObject.SetStandardDisabled (Selection.OperationOptions.SetStandardDisabled). При этом если запрещается операция “редактирование” (SetStandardDisabled(dsoEdit, True)), изменения свойства ReadOnlyу полей выборки не скажутся на возможности редактирования до снятия блокировки с операции (SetStandardDisabled(dsoEdit, False)). <pascal>
Selection.OperationOptions.SetStandardDisabled(dsoInsert, True); // запретить вставку
Selection.OperationOptions.SetStandardDisabled(dsoEdit, False); // разрешить редактирование
Selection.SetFieldsReadOnly(‘FooField1’, False);
SetVar(‘FooField1’, ‘some value’); // Не приведет к ошибке. Поле будет изменено
Selection.OperationOptions.SetStandardDisabled(dsoEdit, True);
SetVar(‘FooField1’, ‘some value’); // Приведет к ошибке так как запрещено редактирование
Selection.SetFieldsReadOnly(‘FooField1’, True);
Selection.OperationOptions.SetStandardDisabled(dsoEdit, False);
SetVar(‘FooField1’, ‘some value’); // Приведет к ошибке, так как поле ReadOnly
</pascal>
3.3.4.2. Блокирование нестандартных операций Для блокирования нестандартных операций используется метод TbtkScriptOperationOptionsObject.SetCustomDisabled (Selection.OperationOptions.SetCustomDisabled). <pascal> Selection.OperationOptions.SetCustomDisabled('fooOper1', True); // запрещает выполнение операции с именем "fooOper1" Selection.OperationOptions.SetCustomDisabled('fooOper2', False); // разрешает выполнение операции с именем "fooOper2" </pascal> 3.3.4.3. Отключение не стандартных операций Для отключения пользовательских операций со скрытием их на панели управления используется метод TbtkScriptOperationOptionsObject.SetCustomInactive (Selection.OperationOptions.SetCustomInactive). <pascal> Selection.OperationOptions.SetCustomInactive('fooOper1', True); // запрещает выполнение операции с именем "fooOper1" и убирает соответствующие ей кнопки из интерфейса. Selection.OperationOptions.SetCustomInactive('fooOper2', False); // разрешает выполнение операции с именем "fooOper2" и отображает соответствующие ей кнопки в интерфейсе. </pascal> Для управления доступом к операциям раньше использовались методы выборки:
Логика работы старых методов Selection.SetCustomDisable и Selection.SetCustomInactive полностью совпадает с работой новых методов Selection.OperationOptions.SetCustomDisabled и Selection.OperationOptions.SetCustomInactive, соответственно. В работе старого метода Selection.SetDisabled и соответствующего ему нового метода Selection.OperationOptions.SetStandardDisabled присутствуют существенные различия. Эти отличия связаны с изначально допущенной в методе SetDisabled ошибке, которая позволяет разрешать редактирование для отдельных полей выборки, при заблокированной операции "редактирование". 3.3.4.4.1. Известные проблемы метода Selection.SetDisabled и способы решения
<pascal> Selection.SetFieldsReadOnly('fooField1,fooField2', '0,0'); //присваивает значение False свойствам ReadOnly полей "fooField1" и "fooField2". Selection.SetDisabled(dsoEdit, True); //присваивает значение True свойствам ReadOnly всех полей выборки и блокирует операцию "редактирование" Selection.SetFieldsReadOnly('fooField1,fooField2', '0,1'); //присваивает значение False и True свойствам ReadOnly полей "fooField1" и "fooField2" соответственно. Selection.SetDisabled(dsoEdit, False); //снимает блокировку с операции "редактирование" и восстанавливает состояние которое было у свойств ReadOnly всех полей выборки перед блокированием операции "редактирование". т.е. в данном случае присваивает значение False свойствам ReadOnly полей "fooField1" и "fooField2". //решение:
Selection.SetFieldsReadOnly('fooField1,fooField2', '0,0'); //присваивает значение False свойствам ReadOnly полей "fooField1" и "fooField2". Selection.OperationOptions.SetStandardDisabled(dsoEdit, True); //блокирует операцию "редактирование" (свойства всех полей ReadOnly будут возвращать значение True, не зависимо от того какое им задаётся значение, редактироваться такие поля не будут!). Selection.SetFieldsReadOnly('fooField1,fooField2', '0,1'); //присваивает значение False и True свойствам ReadOnly полей "fooField1" и "fooField2" соответственно. Эти поля всё ещё НЕ могут редактироваться т.к. операция "редактирование" заблокирована. Selection.OperationOptions.SetStandardDisabled(dsoEdit, False); //снимает блокировку с операции "редактирование". Поле "fooField1" теперь может редактироваться, а поле "fooField2" нет, т.к. значения свойства ReadOnly у них False и True, соответственно. </pascal> <pascal> Selection.SetDisabled(dsoEdit, True); //присваивает значение True свойствам ReadOnly всех полей выборки и блокирует операцию "редактирование" Selection.SetFieldsReadOnly('fooField1,fooField2', False); //присвоили значение False свойствам ReadOnly полей "fooField1" и "fooField2", эти поля могут редактироваться Selection.SetDisabled(dsoEdit, True); //не отрабатывает!!! т.к. операция уже заблокирована. Поля "fooField1" и "fooField2" всё ещё могут редактироваться //1 вариант решения: Selection.SetFieldsReadOnly(Selection.GetFieldNames, True); //присваивает значение True свойствам ReadOnly всех полей выборки, но не блокирует операцию "редактирование" Selection.SetFieldsReadOnly('fooField1,fooField2', False); //присвоили значение False свойствам ReadOnly полей "fooField1" и "fooField2", эти поля могут редактироваться Selection.SetFieldsReadOnly(dsoEdit, True); //снова присваивает значение True свойствам ReadOnly всех полей. Поля "fooField1" и "fooField2" НЕ могут редактироваться //2 вариант решения: Selection.OperationOptions.SetStandardDisabled(dsoEdit, True); //блокирует операцию "редактирование" (свойства всех полей ReadOnly будут возвращать значение True, не зависимо от того какое им задаётся значение, редактироваться такие поля не будут!). Selection.SetFieldsReadOnly('fooField1,fooField2', False); //присвоили значение False свойствам ReadOnly полей "fooField1" и "fooField2", эти поля НЕ могут редактироваться т.к. операция "редактирование" заблокирована. Что-бы эти поля снова стали редактируемыми нужно вызвать Selection.OperationOptions.SetStandardDisabled(dsoEdit, False); </pascal> <pascal> Selection.SetDisabled(dsoEdit, True); //присваивает значение True свойствам ReadOnly всех полей выборки и блокирует операцию "редактирование" Selection.SetFieldsReadOnly('fooField1,fooField2', False); //присвоили значение False свойствам ReadOnly полей "fooField1" и "fooField2", эти поля могут редактироваться Selection.OperationOptions.SetStandardDisabled(dsoEdit, True); //блокирует операцию "редактирование" (свойства всех полей ReadOnly будут возвращать значение True, не зависимо от того какое им задаётся значение, редактироваться такие поля не будут!). Selection.SetDisabled(dsoEdit, False); //снимает блокировку с операции "редактирование" и восстанавливает состояние которое было у свойств ReadOnly всех полей выборки перед блокированием операции, т.е. в данном случае присваивает значение False свойствам ReadOnly всех полей. НО! операция "редактирование" всё ещё ЗАБЛОКИРОВАНА методом Selection.OperationOptions.SetStandardDisabled что должно запрещать редактирование полей в любом случае, но из-за особенностей метода Selection.SetDisabled все поля ДОСТУПНЫ для редактирования! При этом в отладочной сборке приложения будет выведено сообщение о некорретном совместном использовании этих методов, в релизной же версии подобных сообщений не будет. //вариант решения для случая когда не удаётся отказаться от совместного использования этих методов:
Selection.SetDisabled(dsoEdit, True); //присваивает значение True свойствам ReadOnly всех полей выборки и блокирует операцию "редактирование" Selection.SetDisabled(dsoEdit, False); //снимает блокировку с операции "редактирование" и восстанавливает состояние которое было у свойств ReadOnly всех полей перед блокированием операции. Selection.SetFieldsReadOnly('fooField1,fooField2', False); //присвоили значение False свойствам ReadOnly полей "fooField1" и "fooField2", эти поля могут редактироваться Selection.OperationOptions.SetStandardDisabled(dsoEdit, True); //блокирует операцию "редактирование" (свойства всех полей ReadOnly будут возвращать значение True, не зависимо от того какое им задаётся значение, редактироваться такие поля не будут!). Selection.SetDisabled(dsoEdit, False); //не вызывает никакого эффекта, т.к. операция "редактирование" не была блокирована методом Selection.SetDisabled; Selection.OperationOptions.SetStandardDisabled(dsoEdit, False); //корректно снимает блокировку с операции "редактирование" </pascal> |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|