Спасибо за информацию, но кое с чем не могу согласиться.
Цитата:
Сообщение от
erudit
Так называемые AxBC-классы (с префиксом Ax) появились в AX 4.0 вместе с Axd-классами, как основа нового модуля AIF (Application Integration Framework).
По-моему, это AIF появился в 4.0, а AxBC-классы были и ранее, только использовались не в AIF, а в Commerce Gateway, т.е. как минимум они были уже в 3.0 (более ранние версии я не застал).
Цитата:
Сообщение от
erudit
Ранее упомянутая технология touched - используется для определения, было ли данное поле изменено ранее, и если да, то defaulting его не тронет. Это принциальное отличие от использования к примеру метода modified() на таблице, где легко перезаписать уже имеющиеся данные.
Принципиальное отличие от обработчиков modifiedField(), по-моему, в том, что они срабатывают на изменение каждого поля, т.е. предполагается, что за раз может быть изменено лишь одно поле, поэтому и допускается перезапись всех прочих полей, кроме одного измененного. А на момент вызова AxBC.modified() "тронутыми" может оказаться более одного поля, поэтому и приходится проверять все поля на предмет того, можно ли перезаписывать их значения. При обработке изменения одного поля работа AxBC.modified() принципиально не будет отличаться от вызова modifiedField() на таблице.
Цитата:
Сообщение от
erudit
заметьте - AxBC-классы предназначены только для использования в AIF или InterCompany, больше нигде.
Опять же не могу согласиться. Если кто пробовал добавлять свои или модифицировать штатные обработчики modifiedField(), скажем, для шапки или строк заказов и ожидал увидеть в одноименном стандартном методе привычный switch(_fieldId), то его - опять же со времен 3.0 - ждал "сюрприз":
X++:
public void modifiedField(fieldId _fieldId)
{
AxSalesTable AxSalesTable;
Object formDataSource;
super(_fieldId);
if (this.isFormDataSource())
{
if (formDataSourceHasMethod(this.dataSource(),classstr(AxSalesTable)))
{
formDataSource = this.dataSource();
AxSalesTable = formDataSource.AxSalesTable();
}
}
else
{
AxSalesTable = this.AxSalesTable();
}
if (AxSalesTable)
{
AxSalesTable.setFieldAsTouched(_fieldId);
AxSalesTable.modify();
}
}
Этот код остался неизменным и поныне (AX 2009 SP1).
Цитата:
Сообщение от
mazzy
Что за подмена "прямо на лету" и почему этого нельзя сделать с таблицами?
Я так понимаю, речь о подмене кодов: скажем, код номенклатуры в одной компании может через те же внешние коды сопоставляться с кодом в другой компании и подменяться на лету.