処理中ファイル書式 | 状態取得書式 | ユーザーデータ書式 | グローバルデータ書式 | ローカルデータ書式 | 日付書式 | 文字列書式 | 数学書式 | 制御書式 | ファイルシステム書式 | テキストファイル書式 | データベース書式 | プロセス書式 | Web書式 | DocuWorks書式 | DocuWorks書式 (アノテーション関連) | PDF書式 | Excel書式 | 画像処理書式 | その他の書式
条件を判定し、条件に合致する場合は真の値を返却し、合致しない場合は偽の値を返却します。条件の比較記号は、>,<,=,>=,<=,!=が使用可能です。条件の左辺、右辺が両方とも数字の場合、数値としての比較を行います。それ以外は文字比較になります。条件や、真の値、偽の値には、各種書式を入れ子で記述することが可能です。
カンマそのものを条件や値に記述したい場合は、「|,」と記述します。
比較式の左辺と右辺が両方とも数値の場合は、比較を数値として行います。
比較式の左辺、右辺は空白も文字列として比較対象とします。
{%SET_U(属性,処理日,{%DATE(yyyy/MM/dd)})}
{%IF({%FORMAT({%GET_U(属性,処理日)},dd)}>20,{%DATE_ADD({%GET_U(属性,処理日)},yyMM,+1M)},{%FORMAT({%GET_U(属性,処理日)},yyMM)})}
現在の日付が2004年2月20日の場合、0402となります。
現在の日付が2004年2月21日の場合、0403となります。
DATEマクロはマクロ毎にシステム日付を取得するので、0時付近に処理をすると日付が変わるので、上記のようにユーザーデータに一度セットしてから、ユーザーデータの日付で判定と取得を行います。
文字列を繰り返し回数分展開します。名前には任意の文字列を指定します。文字列には、改行が含まれても問題ありません。
文字列には、以下の特殊キーワードが使用できます。
[L_IDX(名前)]
L_IDXキーワードは、LOOPマクロの引数文字列中に使用すると、ループの展開時に、インデックスに置換します。名前には、LOOPマクロで指定した名前と同じ名前を指定します。
{%LOOP L1 3(
{%WRITE_LOG([L_IDX(L1)])}
)}
結果
1
2
3
ファイルの繰り返しパネルと同等のファイルループ処理をマクロで実行します。
識別子はファイルの繰り返し式の処理名としてログに出力されます。
オプションには、あらかじめSET_Uマクロで属性をセットしたユーザーデータのキー名を指定します。オプションを省略(空括弧)した場合は、すべての属性がデフォルト値で動作します。
文字列にはファイル毎に実行するマクロを記述します。文字列には改行が含まれても問題ありません。文字列中ではGETマクロの以下の値が使用できます。
{%GET(FullPathFileName)} ... 処理中のファイルのフルパス
{%GET(FileLoopCount)} ... 現在のループカウンタ(1始まり)
{%GET(FileCount)} ... ファイル総数
LOOPマクロのL_IDXキーワードもLOOP_FILEの文字列中で使用できます。
ファイルの繰り返しパネルと同等の以下の処理を自動的に行います。
オプションで指定したユーザーデータにセットできる属性は以下の通りです。
| 属性名 | 値 |
|---|---|
| LoopTarget | 繰り返し対象。省略時は「メイン画面のファイルリスト」。メイン画面のファイルリスト 処理名(ファイル検索処理等の処理名) |
| Group | グループ単位。省略時は「なし(ファイル)」。なし(ファイル) フォルダ フルパスの一部(正規表現) |
| GroupSortOrder | グループの並び順。省略時は「昇順」。昇順 昇順 (自然順) 降順 降順 (自然順) |
| GroupRegEx | グループ単位が「フルパスの一部(正規表現)」の場合の正規表現。 |
| FileSort | ファイルの並べ替えを行うかどうか。省略時は「しない」。する しない |
| SortTarget | 並べ替え対象。省略時は「ファイル」。ファイル フルパス フルパスの一部(正規表現) 更新日 作成日 |
| SortOrder | 並べ替え順。省略時は「昇順」。昇順 昇順 (自然順) 降順 降順 (自然順) |
| SortRegEx | 並べ替え対象が「フルパスの一部(正規表現)」の場合の正規表現。 |
| ClearUserData | ファイル毎にユーザーデータをクリアするかどうか。省略時は「しない」。する しない |
| UserDataNotCleared | ClearUserDataが「する」の場合にクリアしないユーザーデータのキーをカンマ区切りで指定。 |
| ErrCatch | エラー発生時にループを中断するかどうか。省略時は「しない」。する しない |
| ErrorProc |
エラー発生時に実行するマクロ文字列。マクロで指定する場合は{%ESCAPE()}でマクロ文をエスケープして指定してください。
(例) {%SET_U(Attr,ErrorProc,{%ESCAPE({%WRITE_LOG(エラー発生: {%GET(FileName)})})})}
|
| Until |
中断条件のマクロ文字列。各ループの先頭で評価され、結果が「true」の場合にループを中断します。マクロで指定する場合は{%ESCAPE()}でマクロ文をエスケープして指定してください。
(例) {%SET_U(Attr,Until,{%ESCAPE({%IF({%GET(FileLoopCount)}>=3,True,False)})})}
|
LOOP_FILE実行中にエラーが発生すると、デフォルト(ErrCatch省略時=「しない」)ではエラーを「エラー」レベルでログに出力し、次のファイルの処理を継続します。ErrCatch属性を「する」に設定するとエラー発生時にループを中断します。ループ本体の処理を TRY_CATCH マクロで囲むと、エラーの内容をGET_ERROR_MESSAGE()で取得してログに記録するなど、柔軟なエラーハンドリングが可能です。また、TRY_CATCHでキャッチされたエラーはエラー回数に加算されないため、エラーレベルのログ出力を抑制できます。
{%LOOP_FILE FL1()(
{%WRITE_LOG([L_IDX(FL1)] / {%GET(FileCount)} : {%GET(FullPathFileName)})}
)}
{%SET_U(Attr,FileSort,する)}
{%SET_U(Attr,SortTarget,ファイル)}
{%SET_U(Attr,SortOrder,昇順 (自然順))}
{%LOOP_FILE FL1(Attr)(
{%WRITE_LOG({%GET(FullPathFileName)})}
)}
{%SET_U(Attr,ClearUserData,する)}
{%SET_U(Attr,UserDataNotCleared,Attr)}
{%SET_U(Attr,ErrCatch,しない)}
{%LOOP_FILE FL1(Attr)(
{%WRITE_LOG({%GET(FullPathFileName)})}
)}
{%SET_U(Attr,FileSort,する)}
{%SET_U(Attr,SortTarget,ファイル)}
{%SET_U(Attr,SortOrder,昇順)}
{%SET_U(Attr,Until,{%ESCAPE({%IF({%GET(FileLoopCount)}>=4,True,False)})})}
{%LOOP_FILE FL1(Attr)(
{%WRITE_LOG({%GET(FullPathFileName)})}
)}
{%LOOP_FILE FL1(Attr)(
{%TRY_CATCH(
{%WRITE_LOG({%GET(FullPathFileName)} を処理中)}
{%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
{%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
)}
)}
引き数の左辺と右辺を比較するための比較演算式情報を作成します。
比較演算子には、「<,>,<=,>=,=,!=,正規表現,部分一致,前方一致,後方一致」の何れかが指定できます。
比較演算を行うためのデータ(JSON文字列)を作成します。
この比較演算用の文字列は条件式評価マクロ(EVALUATE)等で判定を行うことができます。
{%SET_U(属性,年齢,21)}
{%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)}
{%IF({%EVALUATE({%CREATE_COMPARE({%GET(FullPathFileName)},部分一致,総務課)})}=True,
#条件を満たす場合
{%WRITE_LOG(条件を満たしています。)}
,
#条件を満たさない場合
{%WRITE_LOG(条件を満たしていません。)}
)}
{%CREATE_COMPARE({%GET(FullPathFileName)},正規表現,(?:営業1課|総務課))}
{%CREATE_COMPARE({%GET(FileName)},前方一致,2024)}
論理演算を行うための論理演算式情報を作成します。
2番目以降の引き数に指定された論理演算式または比較演算式を、1番目の引き数で指定された論理積(AND)又は論理和(OR)又は排他的論理和(XOR)で論理演算を行うためのデータ(JSON文字列)を作成します。
この論理演算用の文字列は条件式評価マクロ(EVALUATE)等で判定を行うことができます。
{%SET_U(属性,年齢,21)}
{%CREATE_OPERATOR(AND,
{%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)},
{%CREATE_COMPARE({%GET_U(属性,年齢)},<=,50)}
)}
比較演算式情報、論理演算式情報から演算式を評価します。
比較演算式作成マクロや論理演算式作成マクロで作成された演算を行うためのデータ(JSON文字列)を引き数に指定します。
評価の結果、条件を満たす場合はTrueを満たさない場合はFalseを返却します。
{%SET_U(属性,年齢,21)}
{%SET_U(temp,条件式,
{%CREATE_OPERATOR(AND,
{%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)},
{%CREATE_COMPARE({%GET_U(属性,年齢)},<=,50)}
)}
)}
{%IF({%EVALUATE({%GET_U(temp,条件式)})}=True,
#条件を満たす場合
{%WRITE_LOG(条件を満たしています。)}
,
#条件を満たさない場合
{%WRITE_LOG(条件を満たしていません。)}
)}
第1引数のマクロを実行し、エラーが発生した場合に第2引数のマクロを実行します。
エラーが発生しなかった場合は、第1引数の実行結果を返却します。
エラーが発生した場合は、エラーメッセージを設定してから第2引数のマクロを実行し、その結果を返却します。第2引数が省略された場合は空文字を返却します(エラーを無視します)。
TRY_CATCHはエスケープ系マクロです。引数部分のマクロは自動的にエスケープされ、TRY_CATCH内部で個別に実行されます。そのため、引数をESCAPEマクロでエスケープする必要はありません。
TRY_CATCHでキャッチされたエラーは、処理階層内のエラー回数(CurrentErrorCount)には加算されません。エラーは「処理済み」として扱われます。
エラー時の処理中で{%GET_ERROR_MESSAGE()}を使用すると、発生したエラーのメッセージを取得できます。
{%TRY_CATCH(
{%WRITE_LOG(処理を開始します)}
{%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
{%WRITE_LOG(エラー発生: {%GET_ERROR_MESSAGE()})}
)}
{%TRY_CATCH({%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})})}
{%LOOP_FILE FL1(Attr)(
{%TRY_CATCH(
{%WRITE_LOG([{%GET(FileLoopCount)}/{%GET(FileCount)}] {%GET(FileName)})}
{%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
{%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
)}
)}
{%LOOP_FILE FL1(Attr)(
{%TRY_CATCH(
{%WRITE_LOG(ステップ1: マクロ実行)}
{%PARSE_MACRO({%GET_U(属性,マクロ)})}
,
{%WRITE_LOG(ステップ1でエラー: {%GET_ERROR_MESSAGE()})}
)}
{%TRY_CATCH(
{%WRITE_LOG(ステップ2: ファイル移動)}
{%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
{%WRITE_LOG(ステップ2でエラー: {%GET_ERROR_MESSAGE()})}
)}
)}
{%TRY_CATCH(
{%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
{%TRY_CATCH(
{%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
{%SET_U(通知先,1,admin@example.com)}
{%SEND_MAIL(メールサーバー1,通知先,noreply@example.com,,,エラー通知,{%GET_ERROR_MESSAGE()})}
,
{%WRITE_LOG(エラー通知の送信にも失敗しました)}
)}
)}