Skip to content
класс Any на языке X++ для работы со значениями любого типа (AnyType)
Java PowerShell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
ax2009
ax2012
ax4
.gitattributes
.gitignore
CHANGELOG.md
LICENSE
README.md
build.ps1

README.md

Any

Any – это класс Any на языке X++ для работы со значениями любого типа (AnyType) в Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 и Axapta 4.0.

Проблемы имеющихся Anytype и SysAnyType

Аксапта позволяет установить произвольное значение в переменную типа 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

Представленный в данном проекте класс 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 и ax2009, 2012

  • В ax4 нет типа utcDateTime
  • В ax4 тип DateTime соответствует типу Time в ax2009, ax2012

ChangeLog

Помощь проекту

Буду признателен за ваши замечания, предложения и советы по проекту как в разделе Issues, так и в виде письма на адрес mazzy@mazzy.ru

Мазуркин Сергей (mazzy)

You can’t perform that action at this time.