Цитата:
Сообщение от
Bishop
В стандарте они создаются как "Fld1_1" и "Fld2_1". Соответственно, методы должны называться fld1_1_modified() и fld2_1_modified().
Вспомнил свою цитату:
Цитата:
Сообщение от
Gustav
Можно перейти от fld5_1 к "нормальному" названию поля типа "Kontragent", создав переменную контрола соответствующего типа, и тогда метод приобретет более осмысленное название типа Kontragent_modified(). Соответственно, никаких проблем с последующим добавлением полей в серединку не возникнет. Делал такое в Ax 3.0 sp4.
Там обещал выложить, а здесь-таки выложу:
X++:
static void Job220(Args _args)
{
Dialog dialog = new Dialog('Наш диалог');
FormStringControl fscOKOFCode;
FormIntControl ficLifeTime;
DialogField fieldOKOFCode;
DialogField fieldLifeTime;
;
fieldOKOFCode = dialog.addField(Types::String,'ОКОФ');
fieldLifeTime = dialog.addField(Types::Integer, 'Срок амортизации');
fscOKOFCode = fieldOKOFCode.fieldControl();
ficLifeTime = fieldLifeTime.fieldControl();
fscOKOFCode.name('OKOFCode');
ficLifeTime.name('LifeTime');
dialog.doInit();
dialog.formRun().controlMethodOverload( true );
dialog.formRun().controlMethodOverloadObject( new KKu_TestForPoleax( dialog ));
// KKu_TestForPoleax - класс, содержащий метод OKOFCode_modified
dialog.run();
// опытным путём было установлено, что здесь еще раз необходима инициализация переменных,
// чтобы дальше ими свободно оперировать
fscOKOFCode = dialog.formRun().design().controlName('OKOFCode');
ficLifeTime = dialog.formRun().design().controlName('LifeTime');
if(dialog.closedOk())
{
box::info(strFmt('ОКОФ: %1, Срок: %2', fscOKOFCode.text(), ficLifeTime.value()));
}
}
Создайте у себя класс KKu_TestForPoleax:
X++:
class KKu_TestForPoleax
{
Dialog dialog;
}
void new(Dialog _dialog)
{
;
dialog = _dialog;
}
public boolean OKOFCode_modified()
{
boolean ret;
FormStringControl me = dialog.formRun().controlCallingMethod();
;
ret = me.modified(); // как super()
box::info('Привет, Poleax! Вон оно, оказывается, как надо было!');
return ret;
}
и потом запустите вышеуказанный Job220