Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Ensemble ユーティリティ関数

この付録では、ビジネス・ルールと DTL データ変換で使用可能な Ensemble ユーティリティ関数について説明します。このような関数には、他のプログラミング言語で使い慣れている数学的な処理関数または文字列処理関数などがあります。この付録には以下のトピックが含まれています。

独自の関数を定義するには、"Ensemble プロダクションの開発" の “カスタム・ユーティリティ関数の定義” を参照してください。

組み込み関数

以下のリストに、Ensemble に組み込まれているユーティリティ関数を示します。

Note:

ブーリアン値の場合、1 は真、0 は偽を示します。

Contains(val,str)

val に文字列 str が含まれる場合は 1 (真) を返します。それ以外は 0 (偽) を返します。

ConvertDateTime (val,in,out,file)

in 形式のタイム・スタンプとして入力文字列 val を読み取り、その値を out 形式のタイム・スタンプに変換して返します。"Ensemble プロダクションの構成" の “ファイル名に関するタイム・スタンプ仕様” を参照してください。

in および out のデフォルトは %Q です。out 引数の中の任意の %f 要素は、file 文字列に置き換えられます。valin 形式に適合しない場合、out は無視され、val は変換されずに返されます。

CurrentDateTime(format)

指定されたフォーマットで日付/時間値を表す文字列を返します。デフォルト・フォーマットは、サーバのローカル・タイムゾーンでの ODBC フォーマット (%Q) です。

DoesNotContain(val,str)

val に文字列 str が含まれない場合は 1 (真) を返します。

DoesNotIntersectList(val,items,srcsep,targetsep)

指定されたソース・リスト (val) のアイテムがターゲット・リスト (items) に表示されない場合、1 (真) を返します。引数の詳細は、IntersectsList を参照してください。

DoesNotMatch(val,pat)

val のパターンが、pat で指定されるパターンと一致しない場合は 1  (真) を返します。pat は、ObjectScript のパターン・マッチング演算子 ? に適した構文を使用した文字列とする必要があります。詳細は、"Caché ObjectScript の使用法" の “演算子と式” の章で “パターン・マッチング” を参照してください。

DoesNotStartWith(val,str)

val が文字列 str で始まらない場合は 1 (真) を返します。

Exists(tab,val)

Exists 関数は、Lookup 関数の結果を予測する手段を提供します。Exists は、valtab で指定されたテーブルの中で定義されたキーであれば 1 (真) を返します。それ以外は、0 (偽) を返します。

If(val,true,false)

引数 val が 1 (真) に評価されると、If 関数は true 引数の文字列値を返します。それ以外は、false 引数の文字列値を返します。

In(val,items)

カンマ区切り文字列 items の中に val がある場合は 1 (真) を返します。

InFile(val,file)

特定された file の中に val がある場合は 1 (真) を返します。

InFileColumn(...)

関数 InFileColumn can は、最大 8 個の引数を指定できます。完全な関数のシグニチャは、以下のとおりです。

InFileColumn(val, file, columnId, rowSeparator, columnSeparator, columnWidth, lineComment, stripPadChars)

InFileColumn は、テーブル形式のテキスト・ファイル file の中の指定された列に val がある場合、1 (真) を返します。引数の詳細は、以下のとおりです。

  • val (必須) は値です。

  • file (必須) はテキスト・ファイルです。

  • デフォルトの columnId は 1 です。

  • デフォルトの rowSeparator は ASCII 10 です。rowSeparator に負の値を指定すると、列の長さを示します。

  • デフォルトの columnSeparator は ASCII 9 です。 columnSeparator が 0 の場合、ファイルのフォーマットを “位置基準” といいます。この場合、columnId は文字の位置、columnWidth は文字カウントを示します。

  • デフォルトの columnWidth は 0 です。

  • デフォルトの lineComment は空文字列です。

  • デフォルトの stripPadChars は、1 つの空白文字とその後の ASCII 9 で構成されます。

IntersectsList(val,items,srcsep,targetsep)

指定されたソース・リスト (val) のアイテムがターゲット・リスト (items) に表示される場合、1 (真) を返します。引数 srcsep および targetsep は、ソース・リストとターゲット・リストにそれぞれリスト・セパレータを指定します。各リスト・セパレータのデフォルトは "><" であり、リストのフォームが "<item1><item2><item3>" であると想定されます。

ターゲット・リストのアイテムが 1 つだけの場合、この関数は基本的に Contains 関数と同じです。ソース・リストのアイテムが 1 つだけの場合、この関数は基本的に In 関数と同じです。

Length(string,delimiter)

指定された文字列の長さを返します。delimiter を指定した場合、この関数はそのデリミタに基づいて文字列数を返します。

Like(string,pattern)

指定された値 (string) が指定されたパターン文字列 (pattern) によって SQL Like 比較を満たす場合、1 (真) を返します。SQL Like パターンでは、% は 0 または複数文字に一致し、_ は単一文字に一致します。パターンに "%%" を追加することによってエスケープ文字を指定して (例:. "#%SYSVAR_#_%%%#")、"%SYSVAR" で始まり、後ろに単一文字、アンダースコア、その他が続く任意の値文字列に一致させることができます。

Lookup(table,keyvalue,default, defaultOnEmptyInput)

Lookup() 関数は、table で指定されたテーブル内の keyvalue で指定されたキー値を検索して、関連する値を返します。この戻り値は以下のグローバルと等価です。

^Ens.LookupTable(table,keyvalue)

キーがテーブル内で見つからなかった場合は、default パラメータで指定されたデフォルト値が返されます。default パラメータは省略可能なため、それが指定されず、Lookup で一致するキーが見つからなかった場合は、空の文字列が返されます。例外として、ルックアップ・テーブルまたはキー値が空の場合に、Lookup() 関数によって、以下のテーブルに示された defaultOnEmptyInput パラメータの値に従ってデフォルト値または空の文字列のいずれかが返されます。defaultOnEmptyInput パラメータのデフォルト値は、以前のバージョンの Ensemble との互換性を維持するために 0 にされています。

defaultOnEmptyInput の値 キー値とルックアップ・テーブル Lookup() の戻り値
0 キー値またはルックアップ・テーブルが空 空の文字列
1 キー値が空 空の文字列
ルックアップ・テーブルは空だが、キー値は空ではない デフォルト値
2 ルックアップ・テーブルが空 空の文字列
キー値は空だが、ルックアップ・テーブルは空ではない デフォルト値
3 キー値またはルックアップ・テーブルが空 デフォルト値

Exists() 関数は、同じパラメータを使用する Lookup() 関数がルックアップ・テーブルでキー値が検出する場合に、真を返します。

Matches(val,pat)

val のパターンが、pat で指定されたパターンと一致する場合は 1  (真) を返します。pat は、ObjectScript のパターン・マッチング演算子 ? に適した構文を使用した文字列とする必要があります。詳細は、"Caché ObjectScript の使用法" の “演算子と式” の章で “パターン・マッチング” を参照してください。

Max(...)

最高 8 つの値を含むリスト内の最大値を返します。リストのエントリはカンマで区切られています。

Min(...)

最高 8 つの値を含むリスト内の最小値を返します。リストのエントリはカンマで区切られています。

Not(val)

val が 1 (真) の場合、0 (偽) を返します。val が 0 (偽) の場合、1 (真) を返します。

NotIn(val,items)

カンマ区切り文字列 items の中に val がない場合、1 (真) を返します。

NotInFile(val,file)

特定された file の中に val がない場合、1 (真) を返します。

NotLike(string,pattern)

指定された値 (string) が指定されたパターン文字列 (pattern) によって SQL Like 比較を満たさない場合、1 (真) を返します。"Like" を参照してください。

Pad(val,width,char)

入力文字列 val を読み取り、この文字列が width の文字列長になるまで char の文字を追加します。width に正の値を指定すると、val 文字列の右側に文字が追加されます。width に負の値を指定すると、val 文字列の左側に文字が追加されます。

Piece(val,char,from,to)

区切り文字 char が文字列 val の中にあると、ここで文字列が分断されます。文字列が複数に分断される場合、返される分断文字列の範囲を fromto で指定します。最初の分断文字列が 1 になります。複数の分断文字列が返される場合、返される文字列には入力文字列と同じ区切り文字が使用されます。以下に例を示します。

Piece("A,B,C,D,E,F") は "A" を返します。

Piece("A!B!C!D!E!F","!",2,4) は "B!C!D" を返します。

デフォルトの char はカンマ、デフォルトの from は 1、デフォルトの tofrom です (1 ピースのみを返します)。詳細は、"Caché ObjectScript リファレンス" の "$PIECE" 関数を参照してください。

ReplaceStr(val,find,repl)

入力文字列 val を読み取り、文字列 find があったらすべて repl に置き換えて、その文字列を返します。

Note:

Replace 関数は廃止されたため、代わりに ReplaceStr を使用してください。

Round(val,n)

val の値を小数点以下 n 桁に丸めて返します。n が指定されていない場合 (Round(val)) は、小数点以下の桁を切り捨て、1 の位に丸めることで、整数が生成されます。

Rule(rulename,context,activity)

ルール・ログに対して指定された context オブジェクトと指定された activity ラベルを使用して、rulename に指定されたルールを評価します。

Schedule(ScheduleSpec, ODBCDateTime)

指定された ScheduleSpec 文字列の状態、ODBCDateTime により指定された時点で指定された Schedule または Ruleの状態を評価します。ScheduleSpec が '@' で始まる場合は、スケジュール名またはルール名を示します。そうでない場合は、生の Schedule 文字列を示します。ODBCDateTime が空白の場合は、現在の時刻に対して評価が行われます。

StartsWith(val,str)

val が文字列 str で始まる場合、1 (真) を返します。

Strip(val,act,rem,keep)

入力文字列 val を読み取り、act テンプレートおよび rem 文字列で指定したカテゴリに適合する文字をすべて削除し、keep 文字列にある文字はすべて残します。その結果の文字列を返します。 詳細は、"Caché ObjectScript リファレンス" の "$ZSTRIP" 関数を参照してください。

SubString(str,n,m)

文字列 str の部分文字列を返します。開始位置 n と終了位置 m を数字で指定します。数字の 1 は文字列の最初の文字を示します。m が指定されていない場合 (SubString(str,n)) は、位置 n から文字列の最後までの部分文字列を返します。

ToLower(str)

文字列 str を小文字に変換して返します。

ToUpper(str)

文字列 str を大文字に変換して返します。

Translate(val,in,out)

入力文字列 val を読み取り、文字列 in にある 1 文字を、文字列 out の同じ位置にある文字にすべて変換して返します。

Note:

これらの関数は、Ens.Util.FunctionSetOpens in a new tab クラス内のメソッドで定義されます。

関数の呼び出し構文

ビジネス・ルールまたは DTL データ変換で Ensemble 関数を参照する場合、構文には必ずかっこが含まれます。また、数値関数 Min、Max、Round の数値などの入力パラメータも含める必要があります。関数に入力値がない場合は、中身が空の左右のかっこを含める必要があります。

次に、有効な関数の構文の例を示します。

算出値
Min(Age,80,Limit) Age が値 30 を持つプロパティであり、同じくプロパティである Limit の値が 65 であるとき、この式の値は 30 になります。
Round(1/3,2) 0.33
Min(10,Max(X,Y)) X が数値 9.125 を持つプロパティであり、同じくプロパティである Y の数値が 6.875 であるとき、この式の値は 9.125 になります。

関数への値の入力が、数値で始まる文字列である場合、文字列内の数値以外の文字は破棄され、数値部分のみが使用されます。文字列 "3a" は、3 の数値として取り扱われるため、関数 Min("3a","2OfThem") からは 2 の値が返されます。"a123" のような数字以外の文字で始まる文字列の場合は、数値 0 となります。

ビジネス・ルールのユーティリティ関数の構文は、以下のように大幅に DTL 構文と異なります。

  • ビジネス・ルールは、ユーティリティ関数を単純に名前で参照します。

    ToUpper(value)

  • DTL では関数名の直前に 2 つのドットを使用して、関数をメソッドのように扱います。

    ..ToUpper(value)

以下の DTL データ変換では、ユーティリティ関数 ToUpper() を使用して文字列をすべて大文字に変換します。この <assign> 文は、クラスのメソッドのように、ダブルドット構文を使用して ToUpper() を参照します。

Class User.NewDTL1 Extends Ens.DataTransformDTL
{

XData DTL
{
<?xml version="1.0" ?>
<transform targetClass='Demo.Loan.Msg.Approval'
           sourceClass='Demo.Loan.Msg.Approval'
           create='new' language='objectscript'>
<assign property='target.BankName'
        value='..ToUpper(source.BankName)' action='set'/>
<trace value='Changed all lowercase letters to uppercase!' />
</transform>
}

}
FeedbackOpens in a new tab