Dynamics 365独自の言語! X++入門講座《変数の宣言と分岐、繰り返し処理》

みなさまこんにちは、黒木です。
 
私は業務で、Dynamics 365 を利用した開発を行っていました。Dynamics 365(通称D365)は導入すればそのまま使える製品ですが、元々の機能をカスタマイズしたり、アドオンで機能を追加したりして開発を行うことができます。
 
今回はD365で使用するプログラミング言語、X++についてご紹介します。なお、入門講座と銘打っていますが、このブログは「ある程度プログラム経験があるけれど、X++は初めて」という方に向けて書いています。

X++とは

X++とは、D365機能のカスタマイズおよびアドオン機能を作成するときに使用するD365独自のオブジェクト指向言語です。
 
D365の前身、Dynamics AXはIBMで作られたものですが、マイクロソフトがDynamics AXを買い取って現在の形になりました。Dynamics AXが会計システムソフトだったこともあり、X++はデータアクセス機能を強化した言語になっています。ORMを利用することなくDBアクセスが可能であり、コード上でSQLを書けば簡単にデータが取得できるのが特徴です。
 
C#の派生言語ということもあり、C#を知っていると簡単に会得できるそうです。また、オブジェクト指向言語のため、javaの開発経験がある方なら比較的すぐに馴染めるかもしれません。

X++の変数の型

まずは変数からご紹介します。

public class Sample
{
    public static void Main()
    {
        int field1;          // 32ビットの整数型
        int64 field2;        // 64ビットの整数型
        real field3;         // 実数型
        str field4;          // 文字列型
        date field5;         // 日付型
        timeofday field6;    // 時間データ型
        utcdatetime field7;  // 日付型 + 時間データ型
        boolean field8;      // ブーリアン型(true / false)
        NoYes field9;        // 列挙型
        var field10 = 'AMG'; // 変数の種類を明示的に宣言せずに使用できる型
        container array;     // コンテナ―変数 
        field1 = 1;          // int型
        field4 = 'aaa';      // str型
        field9 = NoYes::Yes; // 列挙型
        array += 'AAA';
        array += 'BBB';
        array += 'CCC';

        infolog('int:' + field1 + ', str:' + field2 + ', NoYes:' + field9);
        infolog(conPeek(array, 2));  
    }
}

実行結果: 

int:1, str:aaa, NoYes:Yes
BBB

X++で宣言できる型は他の言語に比べるとシンプルです。javaだと整数型でもint、long、shortなどがありますが、X++ではintかint64のどちらかのみが整数型の宣言として使用できます。上記のほかにもguidという型もあるのですが、開発中は使用する機会がなかったので名前だけの紹介に留めておきます。
 
値を出力する時は、infolog()またはprintf()、エラーログを表示したい際にはerror()を使用します。
 
13行は列挙型、またはEnumと呼ばれる型で、1つの変数に複数の値を持たせることができるものです。サンプルプログラムでは、標準である「NoYes」Enumを例に取り上げています。このEnumには’No’と’Yes’の2つの文字列が格納されています。’Yes’の文字列を取り出すときは[変数名]::Yesで値を取り出すことができます。
 
14行目のvarは入る値によって自動的に型を判断してくれる型です。int型でもstr型でも代入することができます。ただし、宣言する時は必ず初期化が必要です
 
15行目のcontainerはコンテナ変数と呼ばれるものです。複数の型の値を持たせるときに使用し、+=で変数に値を追加していきます。このコンテナ変数がとても便利で、配列を使うときはこれを使っていました。上記のサンプルプログラムで使用しているconPeek関数は、使用するコンテナ変数と取り出す要素を指定することで、その要素を取ってきてくれる関数です。

分岐処理、繰り返し処理

続いてはX++における分岐処理と繰り返し処理の書き方をご紹介します。

public class Sample
{
    public static void Main()
    {
        if (a > 4)
        {
            // 処理
        }

        for (int i = 0; i < 10; i++)
        {
            // 処理
        }
    }
}

プログラム経験のある方であれば、上記の2つは特に説明不要かと思います。
 
5~8行目が分岐処理、10~13行目が繰り返し処理になっています。この辺りは他の言語でも使われる書き方ですね。他にも条件分岐であればswitch、繰り返し処理ならwhileやdo-whileも使用できます。

まとめ

いかがでしたでしょうか?
 
今回は入門編ということで、X++の概要や、X++の基礎をご紹介しました。
 
X++はマイナーな言語ですが、基本は他の言語と同じです。開発経験のある方なら、意外とすぐに使えこなせるかもしれません。次回以降は、X++独自のお作法もご紹介していきたいと思います。
 
余談なんですが、日本ではD365の普及が発展途上ということもあり、日本語で書かれた記事がとても少ないです。D365の日本語の記事、もっと増えてほしいなぁ……。
 
 
 
 
《関連記事》

記事をシェア
MOST VIEWED ARTICLES