今週のテクニカルTips: 拡張PLM言語、AMLについて

今週もAras PLMに関するテクニカルTipsをお届けします! 今週は、PLMの達人がAras Innovatorの隠し玉であるAML (Adaptive Markup Language)についてご説明します。ArasはAras Innovator 内の至る所でAMLというXML形式を活用しています。

例えば、購買リクエストのメッセージにコスト情報と現在の状況が記載された部品表が追加されてきたり、設計変更レビューの依頼メッセージに不具合報告書が追加されてきたら便利です。Innovatorなら、これが実現できます。

AMLはとてもシンプルで分かりやすい拡張可能な言語です。これを使いこなすことができれば、AMLを組み合わせてエンタープライズPLM基盤を思い通りに動かせるようになります。

AMLの学習を開始するならまず、Arasが提供するトレーニングの受講をお勧めします。以下では、既に基本知識があり次のレベルに進みたい!という方のために、Arasの製品開発のトップであるRobからいくつかのTipsをご紹介いたします。

まず最初に知っておくべきタグです:

  • <AML> タグ: AMLの最上位タグであり、いくつかの<Item>タグを含む事ができます。
  • <Item> タグ: いくつかのプロパティタグと1つの<Relationships>タグを含む事ができ、それらタグ内にはさらに複数の<Item> タグが含まれている場合があります。
 

分かりましたか?さっそく例を見て行きましょう。ちなみにAras Innovatorに存在する全ての項目はItemであり、各Itemにはtype (ItemType名)があります。リクエスト毎に権限の確認も行われ、そのユーザーが命令した操作に対する権限を持っていない場合にはエラーが返ります。

以下のAMLでは、Typeが”Part”の Itemを既知のidで読み出しています。

<AML> <Item type="Part" action="get" id="F48DB69482994831BC26314A1586B39E"/> </AML>

これをブレークダウンしてみましょう。 <Item>タグはtype、 action、 idという3つの属性を持っています。この例におけるtypeは"Part"ですが、"Document"だったり"Process Plan"、"ItemType"を指定することもできます。つまり、このAML形式によってAras Innovatorに存在するあらゆるItemを読み出すことができるのです。ここでのAction属性は”get”に設定されていますね。

その他action属性には、"add"、"update" 、"delete"といった値を設定できます。idを指定することにより、指定された固有のidを持つ単一アイテムを読み出す事ができます。このAMLが送信されると、Aras Innovatorサーバは以下のような、より詳細なAMLを返します。

<Item type="Part" typeId="4F1AC04A2B484F3ABA4E20DB63808A88" id="F48DB69482994831BC26314A1586B39E" page="1" pagemax="1" itemmax="1"> <state>Preliminary</state> <name>Widget Assembly</name> <item_number>1000</item_number> …( その他プロパティ) </Item>

 

idが不明な場合は、リクエスト内のプロパティ値を以下のように検索条件として使用することもできます:

<AML> <Item type="Part" action="get"> <item_number>1000</item_number> </Item> </AML>

もしitem_number ”1000”のパーツが1つだけ存在する場合、このAMLの結果は前述のAMLと同様になります。 さて、ではパーツとBOM両方の結果が欲しいとしましょう。これは<Relationships>タグで関連性を定義することで実現可能です。

<AML> <Item type="Part" action="get"> <item_number>1000</item_number> <Relationships> <Item type="Part BOM" action="get"/> </Relationships> </Item> </AML>

サーバからは以下のような結果が返ってきます。 (簡略化のため、プロパティは省略しています)

<Item type="Part" id="F48DB69482994831BC26314A1586B39E"> <item_number>1000</item_number> <Relationships> <Item type="Part BOM" id="0A2746E857BA4BFCB606FF447919A9E0"> <quantity>10</quantity> <related_id> <tem type="Part" id="DF3822B9D0CD4C6991F5800161D9B48D"> <item_number>1001</item_number> </Item> </related_id> </Item> <Item type="Part BOM" id="6F5E747AC2F84108B41E0576F73E9466"> <quantity>2</quantity> <related_id> <Item type="Part" id="E2B9A29631074C8F94F25FC93C74AAB6"/> <item_number>1002</item_number> </Item> </related_id> </Item> </Relationships> </Item>

最初のPartアイテム内に <Relationships>タグが含まれており、そこに2つのPart BOMアイテムが含まれていますね。それぞれのPart BOMアイテムにはrelated_idプロパティが含まれており、そこで子部品として紐づくPartアイテムが記述されています。

つまりこの結果から、パーツ"1000"には、パーツ"1001"(数量10)とパーツ"1002"(数量2)を含むBOMが存在することが分かります。これはシングルレベルBOMの結果ですが、マルチレベルBOMの場合はパーツ"1001やパーツ"1002"の下にさらにRelationshipsが挿入される形となります。

このようにItem / Relationships / Item / related_id が繰り返されるパターンがAMLの特徴です。

“add”のようなアクションも以下のように簡単に使用できます:

<AML> <Item type="Part" action="add"> <item_number>1003</item_number> </Item> </AML>

TypeがPart、item_numberが"1003"の新規AMLです。"add"リクエストは"get"リクエストと似ていますが、サーバによってidやstateといったデータが自動付与された形で、以下のような結果が返ってきます。

<Item type="Part" typeId="4F1AC04A2B484F3ABA4E20DB63808A88" id="57D2BD8E6BC34A8C85E54242C88FD205" page="1" pagemax="1" itemmax="1"> <state>Preliminary </state> <item_number>1003 </item_number> …( その他プロパティ) </Item>

ぜひAMLを使いこなして、独自のAras Innovatorクライアントを設定したり、Aras Innovatorと他のWebサービスを接続したり、XSLTを使ってAMLを他の言語に変換してみるなど、色々な事に挑戦してみてください。

もっとAMLについて知りたくなりましたか?[email protected]までリクエスト頂ければ、RobからまたTipsを伝授させていただきます。

Arasについての詳細・ダウンロードはこちらから Aras_Logo_2013