式の記述の基本

式で使用できる単位

評価結果のデータ型

値が無いプロパティの演算

式編集ダイアログ

内部関数


プロパティの型が式型の場合、そのプロパティには式を記述する必要があります。


基本

式は、

  • プロパティ
  • 演算子
  • 関数

を組み合わせて記述します。

例えば以下の式は、デフォルトの資源ガントチャートの使用指図バー文字式です。

UseInst_Operation.Work_Order+'¥n'+UseInst_Operation.Work_OperationOutMainItem+'¥n'+UseInst_Operation.Work_OperationOutMainItemQty

UseInst_Operation.Work_OperationOutMainItemQtyは、プロパティで、作業の製造数量です。
+は、加算(文字列の場合は文字列結合)の演算子です。
'¥n'は、改行を意味する文字列(値)です。

時間や日時の計算や、能力値(前段取り、製造、後段取り)には単位を使用することができます。

また、時間と数値を組み合わせるような複数のデータ型を用いた式も設定できます。

値が設定されていないプロパティの評価についてはこちらをご覧ください。


プロパティ

ロングネームとショートネーム

プロパティ名にはロングネームとショートネームがあります。例えばオーダの数量であれば、

Qty

はショートネームで、

Order_Qty

はロングネームです。基本はショートネームの前にクラス名とアンダーバーが付きます(正確なロングネームを調べる際は、ヘルプの「クラス・プロパティ」を参照するか、プロパティ定義の「コード」の文字列で確認して下さい)。

MEなどを使用してプロパティ名を記述する場合など、対象のオブジェクトが明確になっている場合は、ショートネームを使用します。普通はこちらで、インテリセンスに出ているのもショートネームです。

親オブジェクト(Parent)や子オブジェクト(Child)または、ソートキーを式で記述する場合など対象のオブジェクトのクラスが不明確になっている場合や、同じクラスでショートネームが複数ある場合などは、ロングネームを使用する必要があります。

同じクラスでショートネームが複数ある場合、式編集ダイアログで「別名・表示名で表示する」のチェックをつける・外すをすると、プロパティが正しく戻らないケースがあります。詳細はこちらをご覧下さい。


ME

式中にプロパティを使う場合は、まず

ME

と入力します。
MEとは、式を入力している式型プロパティが対象とするオブジェクトを指します。例えば製造BOMの使用指図の指図有効条件ならMEは作業、資源ガントチャートの使用指図バー文字式ならMEは作業使用指図です。

MEの後にピリオド(.)を入力すると、プロパティの一覧が表示されますので、そこから選択できます。当然、ピリオド(.)の後に直接プロパティ名を入力しても良いです。

例えば、オーダガントチャートのオーダバー右文字式で納期(最遅終了日時)を入力する場合は、

ME.LET

と入力します。

MEを省略することもでき、その場合は記入したプロパティ名はMEのプロパティとして処理されます。
そのため、上の例はME.LETと記述しても、LETと記述しても同じ意味になります。

選択したプロパティがオブジェクト型なら、さらにピリオド(.)を入力してそのプロパティを選択(直接入力も可)できます。
例えば、資源ガントチャートの使用指図バー文字式でオーダの品目名を入力する場合、

ME.Order.Item.Name

のようになります。


OTHER

品目の紐付け条件式プロパティのような、2つのプロパティの値を比較を設定するプロパティでは、MEのほかにOTHERを使用します。OTHERもあるオブジェクトを指しています。使い方はMEと同じです。

例えば、品目の紐付け条件式プロパティで、オーダ仕様1が等しいと記述する場合は、

ME.Order.Spec1.Code==OTHER.Order.Spec1.Code

のようになります。

OTHERが使用可能かどうか、OTHERが指しているオブジェクトは、式編集ダイアログで確認できます。

2つのプロパティの値を比較するプロパティに、炉資源追加条件式プロパティがありますが、このプロパティについてはOTHERを使用せずに、MEのみを使って比較したいプロパティを設定します。

例えば、炉資源でオーダの顧客が同じなら同時割付け可能の追加条件式は、

ME.Order.Customer.Code

のようになります。


HOLDER

HOLDERは、その式型プロパティを所持するオブジェクトを指します。例えば、製造BOMの使用指図の有効条件式のMEは作業で、HOLDERはマスタ使用指図になりますので、製造BOMの使用指図の有効条件でその使用指図の資源コードを参照するには、

HOLDER.Resource.Code

となります。
多くの場合、MEとHOLDERは同じオブジェクトを指しています。


PROJECT

PROJECTは、現在開いているプロジェクトのことです。計画設定で表示されるプロパティを参照できます。
PROJECTはどの式からも使用することができます。

例えば、計画基準日時は、

PROJECT.BasisTime

となります。


WORKSPACE

WORKSPACEは、現在開いているプロジェクトのワークスペースです。ワークスペース設定で表示されるプロパティを参照できます。

WORKSPACEはどの式からも使用することができます。
例えば、プロジェクトファイル名の取得は、

WORKSPACE.ProjectFileName

で、取得できます。


TARGET

TARGETは、一部の内部関数の引数の中でのみ使用できます。
内部関数の第一引数にオブジェクトを指定し、第二引数以降でTARGETを指定します。TARGETは第一引数のオブジェクトを指すことになります。

例えば内分関数のSum関数を例とすると、

Sum('Order',TARGET.Qty)

のように使用します。この場合、TARGETはOrderを意味することになります。


TARGET 変数が使える内部関数Aの中で、さらにTARGET 変数が使える内部関数Bを記述した場合、内部関数Bの中で使用されたTARGETは、内部関数Bの引数で指定されたオブジェクトになります。

例:※ME = オーダ
 MaxIF(ME.RightmostOrder,TARGET.LET==Min(ME.RightmostOrder,TARGET.LET)),TARGETQty)

例えばこの例では、MEのオーダの末端親オーダのうち、納期が最も早いものの中で、最大のオーダ数量を取得していますが、1つ目のTARGETは、MaxIF関数の第一引数のME.RightmostOrderで評価され、2つ目のTARGETは、Min関数の第一引数のME.RightmostOrderで評価されます。

内部関数の中で内部関数を呼ぶことをネストすると言いますが、この規則は内部関数を何階層ネストして記述しても有効です。


INPUT

INPUTは、仮想プロパティ逆変換式、表示式・表示逆変換式、金額フォーマット式などで使用します。
基本的には、対象のセルに入力された文字列をあらわしますが、詳細はそれぞれのプロパティの説明をご覧下さい。


DELETE

DELETEは、プロパティの値を削除したい場合に使用します。DELETEを使用する場合は、

ME.Name=DELETE

のように、代入式にすることで、左辺のプロパティの値を削除します。

※ Ver.15.0から、以下の式と上記の式は同じ結果になるようにしました。

ME.Name=''

Ver.15.0未満では、空文字がセットされていました。


配列値のプロパティ

プロパティが複数の値を持つ場合は、プロパティ名の後に[n]をつけます。nは、数値で複数の値の番号です。
例えば、オーダのコメントの2番目は、

Order.Comments[2]

のようになります。

nに0を入れると、最後の要素を返します。例えばコメントに'a;b;c'と設定されている場合なら、Comments[0]はcを返します。

[n]をつけない場合、プロパティの型が文字型なら全体を、そうでないなら最後の要素を返します。例えばコメントに'a;b;c'と設定されている場合、Comments文字型なのでa;b;cを返します。


配列値プロパティにおける値の取得、変更、削除はAsprovaのバージョンおよびプロジェクトの設定によって以下のような違いがあります。
Propは配列値のプロパティとします。すでにN個のプロパティが設定されていて、1≦n≦N とします。

Ver.15.2以上で、プロジェクトの設定(計画設定)の「配列値プロパティの代入式」プロパティが「型に依存しない」の場合

 No 文字列型文字列以外の型
取得1ME.Prop[n] n番目n番目
2ME.Prop[0]最後最後
3ME.Propすべて(セミコロンでつないだ文字列)最後
削除4ME.Prop[n] = DELETEn番目n番目
5ME.Prop[0] = DELETE最後最後
6ME.Prop = DELETE全て全て
変更7ME.Prop[n] = xn番目n番目
8ME.Prop[0] = x最後最後
削除して追加9ME.Prop = xすべて削除後に1つ追加すべて削除後に1つ追加
追加10ME.Prop[] = x追加追加
No.10 は Ver.15.2で追加された書式であり、「配列値プロパティの代入式」の設定によらず、動作します。

Ver.15.2未満または、プロジェクトの設定(計画設定)の「配列値プロパティの代入式」プロパティが「型に依存する(旧仕様)」の場合

 No 文字列型オブジェクト型
(xがオブジェクトのとき)
オブジェクト型
(x が文字列のとき)
それ以外の型
取得1ME.Prop[n] n番目n番目n番目n番目
2ME.Prop[0]最後最後最後最後
3ME.Propすべて(セミコロンでつないだ文字列)最後最後最後
削除4ME.Prop[n] = DELETEn番目n番目n番目n番目
5ME.Prop[0] = DELETE最後最後最後最後
6ME.Prop = DELETE全て全て全て全て
変更7ME.Prop[n] = xn番目n番目n番目n番目
変更と追加が混在8ME.Prop[0] = x追加追加最後を変更追加
9ME.Prop = xN個がすべてxに変更 ※1N個がすべてxに変更 ※1すべて削除後に1つ追加N個がすべてxに変更 ※1
追加10ME.Prop[] = x追加追加追加追加
※1 N==0のときは追加。つまり非配列値のときと同じ。
No.10は Ver.15.2で追加された書式であり、Ver.15.2 未満ではサポートされていません。

 

オブジェクト型の配列値のプロパティ

プロパティがオブジェクト型で且つ配列値(複数の値を持つ)場合は、プロパティ名の後のインデックスを文字列で設定できます。
設定した文字列をコード->表示名->別名の順にチェックして一致したオブジェクトを返します。

例えば、MEが作業で、そこから指図コードがS1の作業使用指図を取得する場合は、

ME.ProductionTask.UseInstructions['S1']

となります。

また、“MyClass”というコードで追加したクラスに“MyProperty1”というプロパティを追加してあるとします。“MyClass”の“ABC”というコードのオブジェクトの“MyProperty1”を取得する場合は、

PROJECT.Child['MyClass'].Child['ABC'].MyProperty1

となります。(新規クラスの追加はこちらを参照して下さい。新規プロパティの追加はこちらを参照して下さい。)


ただし、Ver.15.2で追加されたオブジェクト型ユーザプロパティの追加機能を使用して、MyClassテーブルを指すオブジェクト型のプロパティ MyObject を追加すれば、

Project.Child['MyClass'].Child['ABC']

とせずともオブジェクト同士のリンクを構築できるので、

ME.MyObject.MyProperty1

という書式でProperty1を取得できます。しかもデータ量に依存せず実行スピードは高速になります。Project.Child['MyClass'].Child['ABC'] という書式では、プロジェクトの子オブジェクトと、MyClassテーブル内の子オブジェクトの数に依存します。


式では、数値や文字列などの値も多く使用します。
式中に値を使う場合は、以下の点に気をつけて下さい。

数値普通に入力します 123
文字列文字列の前後にシングルクォーテーション(')をつけます '123'
日付日付の前後にシャープ(#)をつけます#2005/01/01 12:00:00#
真、偽右の決まった文字をそのまま入力しますTRUE、FALSE

文字列中の制御文字列

文字列中の¥は次の1文字と組合せて制御文字を表します。

結果説明
'¥¥'¥バックスラッシュの文字として扱われます。
'¥n'改行資源ガントチャートの使用指図バー文字式に以下の式を入力すると改行されて表示されます。
ME.Code+'¥n'+ME.Qty
'¥r'無視式編集ダイアログで表示する際の改行コードです。式を評価するときには無視されます。この改行コードが含まれていると、プロジェクトファイルやXMLファイル、エクスポートされたテキストファイルやデータベースのデータは、Asprova Ver.15.1 では読み取れなくなってしまいます。この問題に対応するためには、計画設定の「ファイル保存時のバージョン互換」(Project_SavingFileVersionCompatibility)を15.1に設定してください。
'¥'''シングルクォテーションの文字として扱われます。例えば以下の式でシングルクォテーションを含んだ式をプロパティに代入できます。
ME.Item.PeggingConditionExpr='IF(ME.Order.Type==¥'J¥',TRUE,FALSE)'
Ver.15.0から対応しています。

 

文字列型プロパティに設定した式を式型プロパティに代入するときの注意点

ある文字列型プロパティMyStringに以下のような式を設定しておき、

ME.Order.Spec1==OTHER.Order.Spec1&&ME.Order.Spec2==OTHER.Order.Spec2

プロパティ編集コマンドの品目プロパティ設定式などで以下のような代入式を記述すると式をセットすることができます。

ME.Item.Item_PeggingConditionExpr=ME.MyString


このとき、式中に制御文字があるときはすべての制御文字を2つ重ねてください。

ME.Order.Spec1==OTHER.Order.Spec1&&\\rME.Order.Spec2==OTHER.Order.Spec2

文字列型のプロパティを使わずに直接文字列を指定する場合も同様です。

ME.Item.Item_PeggingConditionExpr=’ME.Order.Spec1==OTHER.Order.Spec1&&\\rME.Order.Spec2==OTHER.Order.Spec2'

そうしないと式の代入に失敗します。


演算子

Asprovaで使用できる演算子には以下のものがあります。

 + 足し算、文字列結合
 - 引き算
 * 掛け算
 / 割り算
 ^ べき乗
 % 余り
 && 論理積
 || 論理和
 ! 否定
 == 等しい(比較)
 != 等しくない(比較)
 > より小さい(比較)
 >= 以下(比較)
 < より大きい(比較)
 <= 以上(比較)
 (、) 括弧
 = 代入

演算子の優先度は以下の通りです。

  1. ^
  2. *, /, %
  3. +, -
  4. !, ==, !=, >, <, >=, <=
  5. &&, ||
  6. =

括弧で括った場合は、括弧の中身が先に評価されます。


短絡評価

Asprovaでは式の短絡評価をサポートしています。短絡評価されることを意識して式を書くことで、処理速度を速くすることが出来ます。
詳しくはこちらをご覧ください。


条件文 IF

条件によって異なる処理を行ったり、異なる演算を行いたい場合は以下のように記述します。

IF(条件式, 条件式がTRUEの場合の実行式, 条件式がFALSEの場合の実行式)

開始日時が2020年6月1日以前だったら、1つめのコメントに'ABC'を代入し、そうでなければ'XYZ'を代入する。

ME.コメント[1]=IF(ME.開始日時<=#2020/06/01#, 'ABC','XYZ')

または

IF(ME.開始日時<=#2020/06/01#, ME.コメント[1]='ABC',ME.コメント[1]='XYZ')

Ver.13.1から、複数の条件を記述できるようになりました。

IF(条件式1, 条件式1がTRUEの場合の実行式, 条件式2, 条件式2がTRUEの場合の実行式,・・・, 条件式n, 条件式nがTRUEの場合の実行式, 条件式nがFALSEの場合の実行式)

優先度90以上は赤、50~90は青、50未満は緑。

IF(ME.オーダ.優先度>=90,RGB(255,0,0),ME.オーダ.優先度<50,RGB(0,255,0),RGB(0,0,255))


関数

式中にAsprovaの内部関数やユーザが作成して組み込んだ関数を使用できます。
関数を使用する場合は、関数名と引数を正しく記入して下さい。

例えば、作業に適用されている仕様1を取得する関数は、

GetApplicableSpec(1,ME.Operation)

となります。

Asprovaの内部関数はこちらをご参照ください。


コメント

Ver.15.2から式内で/*と*/で囲った文字列にコメントを記述できます。この部分は実行時に無視されます。コメントの有無は式の評価スピードに影響しません。ただし、コメントのみの式をセットすることはできません。

式中にコメント、式編集ダイアログ上での改行を意味する\rを記述してプロジェクトファイルやXMLファイルを保存したり、エクスポートすると、Ver.15.2未満のAsprovaで、式が読めなくなってしまいます。この問題に対応するためには、計画設定の「ファイル保存時のバージョン互換」(Project_SavingFileVersionCompatibility)を15.1に設定してください。



HelpNo.:741000
© Since 2019 Asprova Corporation, All rights reserved.