Цитата:
Сообщение от
SRF
Можно попробывать следующее решение :
В классе SysSetuFormRun пишем метод setAccessDimension(), код которого приведен ниже и вызываем его в методе init() того же класса, аналогично тому как описал petergunn
Вызывать
"его в методе init() того же класса, аналогично тому как описал petergunn" все же будет не совсем достаточно.
При таком варианте решения задачи (с вызовом в методе init() ) у пользователей остается ряд возможностей получить доступ
'на редактирование' полей аналитики использованием возможностей штатного функционала из контекстного меню 'Настройка' и далее:
- кнопка 'Загрузка' ранее сохраненных конфигураций
- кнопка 'Добавление полей'
В первом случае дополнительно потребуется модифицировать функционал в Forms\SysSetupForm\Methods\loadSetup():
X++:
public void loadSetup(...)
{
...
// --> allowDimensionEdit
SysSetupFormRun sysSetupFormRun ;
// <-- allowDimensionEdit
...
if (designName)
{
...
xSysLastValue::getLast(this);
...
// --> allowDimensionEdit
sysSetupFormRun = sysSetupForm.getFormRun() ;
sysSetupFormRun.setDimensionAccess( SysDimension::Purpose ) ;
sysSetupFormRun.redraw();
// <-- allowDimensionEdit
}
...
}
Во втором случае нужно смотреть в сторону класса SysSetupForm\Methods\formControlTreeUserAdd(), например:
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: