品目ルールの論理関数と演算子
品目ルールの論理関数および演算子を使用して、式の妥当性をテストします。
論理演算子
品目ルールで使用可能な論理演算子を次に示します。
-
and
(論理AND) -
or
(論理OR) -
not
(論理NOT)
および
構文:
expression1 and expression2
and
演算子のかわりに&&
という表記を使用することもできます。
論理and
演算子は、expression1
およびexpression2
に対して次のtrue表を実装します。
expression1 |
expression2 |
expression1およびexpression2 |
---|---|---|
F |
F |
F |
F |
T |
F |
T |
F |
F |
T |
T |
T |
F |
null |
F |
null |
*[see note] |
null |
*最初のFALSEが見つかると、プロセッサは停止します。 したがって、F and null
とnull and F
の間には非対称性があります。
または
構文:
expression1 or expression2
or
演算子のかわりに||
という表記を使用することもできます。
論理or
演算子は、expression1
およびexpression2
に対して次のtrue表を実装します。
expression1 |
expression2 |
expression1またはexpression2 |
---|---|---|
F |
F |
F |
F |
T |
T |
T |
F |
T |
T |
T |
T |
T |
Null |
T |
null |
*[see note] |
null |
*プロセッサは、最初のTRUEを検出すると停止します。 したがって、T and null
とnull and T
の間には非対称性があります。
not
構文:
not expression1
論理not
演算子は、expression1
およびnot expression1
に対して次のtrue表を実装します。
expression1 |
expression1ではありません |
---|---|
F |
T |
T |
F |
null |
null |
論理関数
品目ルールで使用可能な論理関数を次に示します。
assignedToOrg
構文:
assignedtoOrg("org_code")
検証式で、指定した組織に品目が割り当てられている場合はTRUEを返します。
例:
次の例では、品目の品目区分が追加データ・サーバーの場合、組織をS2にすることはできません。
Severity: Reject
If Expression: [Item].[Item Basic].[Item Class] == "Extra Data Servers"
Validation Expression: !assignedtoOrg("S2")
assignedtoCatalog
構文:
assignedToCatalog(Catalog[CatalogCode].Category[CategoryCode])
検証式で、指定したカタログおよびカテゴリに品目が割り当てられている場合はTRUEを返します。
例:
次の例では、品目がカタログLadies WearおよびカテゴリSummerに割り当てられている場合、KidsおよびカテゴリSummerをカタログに割り当てることはできません。
Severity: Reject
If Expression:
assignedtoCatalog(Catalog[LadiesWear].Category[Summer])
Validation Expression:
!assignedtoCatalog(Catalog[Kids].Category[Summer])
component_type
構文:
component_type("typename1", "typename2", ...)
構成のコンポーネント・タイプをチェックする検証式で、その構成に関連付けられたコンポーネントが有効である場合はTRUEを返します。 引数は、コンポーネントの有効なユーザー品目タイプのリストです。
構成のコンポーネント・タイプをチェックするルールを作成する場合は、「ルール」の作成ダイアログ・ボックスで「有効なコンポーネント・ルール」チェック・ボックスを選択する必要があります。
他の検証ルールとは異なり、コンポーネントを検証するルールには重大度がありません。
例:
次の例では、構造がプライマリの場合、構造の構成要素として使用できるのはtype1
およびtype2
のみです。
If Expression: [Structure].[Structure Attributes].[Structure Name] == "Primary"
Validation Condition: component_type("type1","type2")
exists
構文:
exists(Boolean_expression)
Boolean_expression
で使用されているエンティティの行をループして、いずれかの行で式が満たされた場合はTRUEを返します。
次のエンティティでexists()
を使用できます:
-
関係(関連品目関係および相互参照)
-
構造
-
複数行属性グループ
式の例:
次の式は、品目のすべての構造をループし、構造の名前が"ManufacturingBOM"の場合はTRUEを返します。
exists([Structure].[Structure Attributes].[Structure Name] == "ManufacturingBOM")
次の式は、品目に特定の関係が存在するかどうかを検証します:
exists([Relateditem.[RelateditemMain[.[Type] == "Up-sell")
次の式は、行が複数行属性グループに存在するかどうかを検証します:
exists(isNull([Item].[Ingredients].[Ingredient Name]) == false)
ルールの例:
次のルールは、品目属性Pack Type
が指定されている場合、GTIN属性GTIN
をnullにできないことを検証
If Expression:
isNull([Item].[Main].[PACK TYPE]) == false
Validation Condition:
exists(isNull([GTIN].[GTIN Main].[GTIN])) == false
次のルールは、属性TM
の値がUS
の場合、GTIN関係がUSFDAという名前のCustomerと関係する必要があることを検証します。
If Expression:
[Item].[Group1].[TM] == "US"
Validation Condition:
[GTIN].[GTIN Main].[Party Type] == "Customer" AND
[GTIN].[GTIN Main].[Party Name] == "USFDA"
from_item_class
構文
from_item_class ("item class name")
品目の品目区分が変更されるときに起動されます。 検証式で、元の品目クラスの名前が"item class name"
と一致する場合はTRUEを返し、これを引用符で囲む必要があります。
例:
次の例では、元の品目クラスがTCParent
の場合にTRUEを返します:
FROM_ITEM_CLASS("TCParent")
組合せの例:
次の例では、品目の品目クラスをPneumatic_PumpsからHydraulic_Pumpsに変更できないようにします。
Severity: Reject
If Expression:
FROM_ITEM_CLASS("Pneumatic_Pumps") && TO_ITEM_CLASS("Hydraulic_Pumps")
to_item_class
構文
to_item_class("item class name")
品目の品目区分が変更されるときに起動されます。 検証式で、新しい品目クラスの名前が"item class name"
と一致する場合はTRUEを返し、これを引用符で囲む必要があります。
例:
次の例では、新しい品目クラスがTCCHLDVR
の場合にTRUEを返します
TO_ITEM_CLASS("TCCHLDVR")
付加フレックスフィールド
付加フレックスフィールドはどの属性グループにも属せず、FlexField
セグメント・コードを使用してアクセスされます。
[<Entity Name>].Flexfield[<Flexfield segment code>]
例:
[ChangeHeader].Flexfield[Product__Line]
比較演算子
品目ルールで使用可能な比較演算子を次に示します。
-
==
(equals) -
!=
(等しくない) -
<
(より小さい) -
<=
(以下) -
>
(次より大きい) -
>=
(次より大きい)
比較演算子は、2つのブール式を比較し、比較の結果に応じてTRUEまたはFALSEを返します。 1つまたは両方の式がnullの場合、比較ではnull値のnull.Toチェックが返されます。比較関数isnull
を使用します。
文字列比較では大文字と小文字は区別されません。 大/小文字を区別する比較には、文字列関数compare
を使用します。
構文:
expression1 == expression2 (equals
expression1 != expression2
expression1 < expression2
expression1 <= expression2
expression1 > expression2comp
expression1 >= expression2
ヌル
構文:
isnull(expression)
引数がnullの場合はTRUEを返し、それ以外の場合はFALSEを返します。 この関数を使用すると、値がnullであるかどうかを明示的にテストできます。 他の関数とは異なり、引数の値がnullの場合は無視されます。
論理関数isnull()
は、expression
の次の真実表を実装します。
表情 |
isnull(expression) |
---|---|
null |
T |
nullでない |
F |
テレビ
構文:
nvl(expression,replacement-expression)
expression
がnullまたは空の文字列の場合、replacement-expression
を返します。
例:
次の例では、属性Attr1
がnullの場合に空の文字列を返します。
nvl([Item].[AttrGrp1].[Attr1], "")
多数の拡張可能フレックスフィールド属性に基づいて品目摘要を生成するなどのシナリオでは、使用された属性の1つ以上がnullの場合でもルールの実行を維持する場合に、isnull()
関数を使用するのは不便です。これは、isnull()
がブール値を返すためで、各属性に対して個別に処理する必要があります。 次の例では、一連の属性値を長い説明に連結し、nvl()
を使用して、参照される属性のいずれかがnullである説明に空の文字列を挿入します:
"Pipe Non-Metallic" +
":OUTSIDE DIAMETER:" + nvl([Item].[Pipe:Non-Metallic].[Outside Diameter],"") +
":NOMINAL SIZE:" + nvl([Item].[Pipe:Non-Metallic].[Nominal Size],"") +
":COLOR:" + nvl([Item].[Pipe:Non-Metallic].[Color],"")