![]() |
#8 |
Участник
|
Небольшой штрих
Цитата:
При таком варианте решения задачи (с вызовом в методе init() ) у пользователей остается ряд возможностей получить доступ 'на редактирование' полей аналитики использованием возможностей штатного функционала из контекстного меню 'Настройка' и далее:
X++: public void loadSetup(...) { ... // --> allowDimensionEdit SysSetupFormRun sysSetupFormRun ; // <-- allowDimensionEdit ... if (designName) { ... xSysLastValue::getLast(this); ... // --> allowDimensionEdit sysSetupFormRun = sysSetupForm.getFormRun() ; sysSetupFormRun.setDimensionAccess( SysDimension::Purpose ) ; sysSetupFormRun.redraw(); // <-- allowDimensionEdit } ... } X++: public FormControl formControlTreeUserAdd(...) { ... if (typeof(dragItem.data()) == Types::Integer) { fieldId = dragItem.data(); newControl = parentControl.addDataField(formDataSource.id(), fieldId, insertAfterControl); // --> allowDimensionEdit SysSetupFormRun::setDimensionAccessByField( editFormRun, newControl, Dimensions::code2ArrayIdx( SysDimension::Purpose ) ) ; editFormRun.redraw() ; // <-- allowDimensionEdit } ... } P.S. В качестве 'экзотической' альтернативы модификаций SysSetupFormRun.init() + SysSetupForm можно рассмотреть вариант перекрытия метода SysSetupFormRun.activate( true ), т.е. обновлять уровень доступа к полям при получении формой фокуса ввода: X++: public void activate(boolean _active) { super(_active); // --> allowDimensionEdit if( _active ) { this.setDimensionAccess( SysDimension::Purpose ) ; this.redraw() ; // перерисовать форму } // <-- allowDimensionEdit } P.P.S. С учетом вышеизложенного, немного модифицировал вариант предложенный SRF и выкладываю в виде небольшого проекта (для примера 'заблокирована' аналитика 'Цель' - способ реализации зависит от значения макроопределения #allowEditVersion) - выгружено с DAX 4.0 SP2: |
|
|
За это сообщение автора поблагодарили: SRF (1). |