При попытке следующий фрагмент кода, компилятор выдаст ошибку "Контейнерные и текстовые поля не могут быть использованы в выражении WHERE"
Код:
str name;
UserInfo userInfo;
// ...
select firstonly userInfo where userInfo.id == name;
Сообщение об этой же ошибке на английском языке является более информативным: "Container and unbounded string (text) fields are not allowed in a WHERE expression". Все дело в том, что Axapta не позволяет использовать в выражениях WHERE переменные динамического размера. Таковыми являются переменные типов container и str.
Однако, если тип container является чисто динамическим, строкам в X++ можно задать фиксированный размер при объявлении переменной.
В этом примере объявлена строковая переменная длины 100. Размер этой переменной фиксирован и она может использоваться в выражениях WHERE.
В соответствии с рекомендациями по программированию в Axapta (Best Practices Handbook) переменные строкового типа использовать вообще не стоит. Вместо них следует объявлять переменные с помощью расширенных типов данных (Extended Data Types). Большинство EDT имееют ограничение на размер строки (за исключением EDT типа Memo) и, соответственно, переменные таких типов могут быть использованы в WHERE. Так, более правильным был бы следующий способ объявления переменной:
Здесь объявлена переменная типа Name, длина которого по умолчанию равна 100.