![]() |
#7 |
Участник
|
Можно попробывать следующее решение :
В классе SysSetuFormRun пишем метод setAccessDimension(), код которого приведен ниже и вызываем его в методе init() того же класса, аналогично тому как описал petergunn X++: void setAccessDimension(SysDimension _sysDimension, AccessType _accessType = AccessType::View) { FormBuildDataSource formDataSource; FormControl formControl; SysDictTable sysDictTable; SysDictField sysDictField; int dimArrayIdx = Dimensions::code2ArrayIdx(_sysDimension); FormBuildDesign design = this.form().design(); Counter curControl; void setSecurityLevelOnDimensions(FormBuildControl _control) { int currentControl; FormBuildStringControl stringControl; SysDictField dictField; if (_control.isContainer()) { for(currentControl = 1; currentControl <= _control.controlCount(); currentControl++) { setSecurityLevelOnDimensions(_control.controlNum(currentControl)); } } else if (_control.handle() == classNum(FormBuildStringControl)) { stringControl = _control; if (stringControl.dataField()) { formDataSource = this.form().dataSource(stringControl.dataSource()); dictField = new SysDictField(formDataSource.table(), stringControl.dataField()); if (dictField.typeId() == extendedTypeNum(Dimension) && dictField.arrayIndex() == dimArrayIdx) { formControl = this.control(stringControl.id()); formControl.userSecurityLevel(_accessType + 1); } } } } ; if (design) { for(curControl = 1; curControl <= design.controlCount(); curControl++) { setSecurityLevelOnDimensions(design.controlNum(curControl)); } } } |
|
|
За это сообщение автора поблагодарили: ZVV (1), Sada (3). |