Показать сообщение отдельно
Старый 22.02.2015, 22:14   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Сложно)

На базовом классе DimensionControllerObject есть несколько делегатов, вызовы которых используются при создании контролов аналитик

делегат DimensionLinkShowField отвечает за пропуск создания контрола (parmCancel() класса-события DimensionLinkCancelEventArgs должен вернуть True)
делегат DimensionLinkAllowFieldEdit - за возможность блокирования изменения контрола (DimensionLinkCancelEventArgs.parmCancel() == true)
делегат DimensionLinkMarkFieldOptional - за обязательность (DimensionLinkCancelEventArgs.parmCancel() == true)

Для подписки на событие, необходимо реализовать паблик-метод, соответствующий подписываемому делегату, в классе-обработчике формы (на самой форме нельзя - подписка не будет выполнена)

Определение аналитики выполняется по идентификатору аналитики (DimensionAttributeRecId)

X++:
// Метод в классе-обработчике
public void showDimensionControl(DimensionLinkCancelEventArgs _e)
{
    ;

    if (_e)
        _e.parmCancel(_e.parmDimensionAttributeId() != ViewDimensionAttributeRecId);
}

//Подпись на событие DimensionLinkShowField
...
    dimensionDefaultingController = DimensionDefaultingController::constructInGroupWithValues(
...
//подписка на событие
//myHadlerClass.showDimensionControl - это Instance-метод класса
    dimensionDefaultingController.DimensionLinkShowField += eventhandler(myHadlerClass.showDimensionControl);
//если потребуется использовать статический метод
    dimensionDefaultingController.DimensionLinkShowField += eventhandler(MyHadlerClass::staticShowDimensionControl);
...
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Oz (2), Logger (3).