Any – это класс Any на языке X++ для работы со значениями любого типа (AnyType) в Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 и Axapta 4.0.
Аксапта позволяет установить произвольное значение в переменную типа Anytype
только один раз.
Во время первой инициализации тип переменной фиксируется. В дальнейшем можно установить новое значение такого же типа, но тип изменить уже нельзя.
Anytype var = 1;
var = 2; // ok
var = ''; // результат не определен.
Чтобы обойти эту проблему в Аксапту ввели класс SysAnyType
, который действительно позволяет в любой момент установить любое значение. Но ради этого класс сделали очень тяжелым — в куче хранится map
, key
и сам anytype
-объект в качестве value
.
Кроме того, каждое обращение к value
— это lookup
внутри map
.
SysAnyType var = new SysAnyType(1); // хранит число 1
var.value(''); // меняет тип и хранит пустую строку
Представленный в данном проекте класс Any
предлагает более легкую реализацию, чем SysAnyType
,
при этом программист может работать со значениями разного типа.
Сам класс не позволяет изменять значение хранимого внутри объекта. Поэтому данный класс может просто хранить простой ref на объект произвольного типа.
Но! можно просто пересоздать объект Any
:
Any var = new Any(1); // ok
var = new Any(''); // ok
У Any есть несколько специализированных конструкторов и обычный construct:
Any var = Any::constuct(1); // ok
var = Any::constuct(''); // ok
Класс проявляется в цикле (обратите внимание на специализированный конструктор conpeek):
container con = [1, '', 31\01\2019];
Any var;
for(i=1; i<=conlen(con); ++i)
{
var = Any::conpeek(con, i);
}
- В
ax4
нет типаutcDateTime
- В
ax4
типDateTime
соответствует типуTime
вax2009
,ax2012
Буду признателен за ваши замечания, предложения и советы по проекту как в разделе Issues, так и в виде письма на адрес mazzy@mazzy.ru
Мазуркин Сергей (mazzy)