コマンド表の設定
テンプレートは常に、設定コマンドを指定する表で始まります。
設定コマンドは、テンプレート・タイプや出力文字セット、順序付けや連結などのプログラム要素などのグローバル属性を定義します。
設定コマンドは次のとおりです:
-
OUTPUT CHARACTER SET
-
NEW RECORD CHARACTER
-
INVALID CHARACTERS
-
REPLACE CHARACTERS
-
NUMBER THOUSANDS SEPARATOR
-
NUMBER DECIMAL SEPARATOR
-
DEFINE LEVEL
-
DEFINE SEQUENCE
-
DEFINE CONCATENATION
-
CASE CONVERSION
次の図に、設定表の例を示します:
TEMPLATE TYPEコマンド
このコマンドは、テンプレートのタイプを指定します。
2つのタイプがあります: FIXED_POSITION_BASEDおよびDELIMITER_BASED。
EFTなどの固定長レコード形式には、FIXED_POSITION_BASEDテンプレートを使用します。 これらの形式では、レコード内のすべてのフィールドは固定長です。 指定した長さより短いデータはパディングされます。 長い場合は切り捨てられます。 データのパディングおよび切り捨てのデフォルトの動作が指定されます。 固定ポジション・ベースのフォーマットの例は、ヨーロッパではEFT、米国ではNACHA ACHファイルです。
DELIMITER_BASEDテンプレートでは、データがパディングされることはなく、最大フィールド長に達した場合にのみ切り捨てられます。 空のフィールドは許可されます(データがnullの場合)。 指定されたデリミタは、データ・フィールドを区切るために使用されます。 フィールドが空の場合、2つのデリミタが隣に表示されます。 区切りベースのテンプレートの例は、ASC X12 820や「UN EDIFACT」形式などのEDI形式です - PAYMUL、DIRDEBおよびCREMUL。
「EDIの場合」形式では、レコードはセグメントと呼ばれることがあります。 EDIセグメントは、レコードと同じように扱われます。 新しいレコード・コマンドで各セグメントを開始し、レコード名を指定します。 新しいレコード・コマンドの直後に、出力データの一部としてセグメント名を指定するデータ・フィールドが必要です。
DELIMITER_BASEDテンプレートの場合、データ・フィールド間の個別の行に適切なデータ・フィールド・デリミタを挿入します。 すべてのデータ・フィールド行の後に、デリミタ行を挿入します。 2つの連続するデリミタ行を定義することで、空のフィールドのプレースホルダーを挿入できます。
空のフィールドは多くの場合、構文上の理由で使用されます: 後続のフィールドを正しく識別できるように、空のフィールドにプレースホルダーを挿入する必要があります。
データ・フィールド、複合データ・フィールドおよびレコードの終わりを示す区切り文字が異なります。 一部の書式では、デリミタ文字を選択できます。 いずれの場合も、構文エラーを回避するために、同じ目的で同じデリミタを一貫して使用する必要があります。
DELIMITER_BASEDテンプレートでは、<POSITION>列および<PAD>列は適用されません。 データ表から除外されます。
一部のDELIMITER_BASEDテンプレートには、最小長と最大長の指定があります。 その場合、Oracle Paymentsは長さを検証します。
DEFINE LEVELコマンド
一部の形式では、データ抽出にない特定の追加データ・レベルが必要です。 たとえば、支払を支払日でグループ化する必要があるフォーマットがあります。 レベルの定義コマンドを使用すると、支払日グループは、入力抽出ファイルにない場合でも、テンプレート内のレベルとして定義して参照できます。
レベルの定義コマンドを使用すると、抽出に存在するベース・レベルを宣言できます。 レベルの定義コマンドは、抽出の基本レベルより1レベル高い新しいレベルを挿入します。 新しいレベルは、ベース・レベルのインスタンスのグループとして機能します。
レベルの定義コマンドは設定コマンドであるため、設定表で定義する必要があります。 これには3つのサブコマンドがあります:
-
BASE LEVELコマンド - 新しいレベルが基づく抽出のレベル(XML要素)を定義します。 レベルの定義コマンドには、常にベース・レベル・サブコマンドが1つのみ必要です。
-
GROUPING CRITERIA - 新しいレベルのインスタンスを形成するためにベース・レベルのインスタンスをグループ化するために使用されるXML抽出要素を定義します。 グループ化基準コマンドのパラメータは、グループ化条件を指定する要素のカンマ区切りリストです。
要素の順序によって、グループ化の階層が決まります。 ベース・レベルのインスタンスは、最初に最初の基準の値に従ってグループに分割され、次に、これらの各グループは2番目の基準に従ってグループに分割されます。 最後のサブグループはそれぞれ、新しいレベルのインスタンスとみなされます。
-
GROUP SORT ASCENDINGまたはGROUP SORT DESCENDING - グループのソート順を定義します。
<DEFINE LEVEL>
コマンドと<END DEFINE LEVEL>
コマンドの間の任意の場所に<GROUP SORT ASCENDING>
または<GROUP SORT DESCENDING>
コマンド行を挿入します。 sortコマンドのパラメータは、グループをソートする要素のカンマ区切りリストです。 -
GROUP SORT ASCENDING NUMBERまたはGROUP SORT DESCENDING NUMBER - 数値グループのソート順を定義します。
<DEFINE LEVEL>
コマンドと<END DEFINE LEVEL>
コマンドの間の任意の場所に<GROUP SORT ASCENDING NUMBER>
または<GROUP SORT DESCENDING NUMBER>
コマンド行を挿入します。 sortコマンドのパラメータは、ソートする要素のカンマ区切りリストです。
たとえば、次の表はバッチに基づく5つの支払を示しています。
支払インスタンス | PaymentDate (グループ化基準1) | PayeeName (グループ化基準2) |
---|---|---|
Payment1 |
PaymentDate1 |
PayeeName1 |
Payment2 |
PaymentDate2 |
PayeeName1 |
Payment3 |
PaymentDate1 |
PayeeName2 |
Payment4 |
PaymentDate1 |
PayeeName1 |
Payment5 |
PaymentDate1 |
PayeeName3 |
テンプレートで、次のように設定表を作成して、支払日と受取人名に従ってグループ化されたベース・レベル"Payment"からPaymentsByPayDatePayeeというレベルを作成します。 Group Sort Ascendingコマンドを追加して、各グループをPaymentDateおよびPayeeNameでソートします:
支払グループ | レベル |
---|---|
|
PaymentsByPayDatePayee |
|
支払 |
|
PaymentDate, PayeeName |
|
PaymentDate, PayeeName |
|
PaymentsByPayDatePayee |
5つの支払によって、次の表に示す新しいレベルの4つのグループ(インスタンス)が生成されます:
支払グループ・インスタンス | グループ基準 | グループ内の支払 |
---|---|---|
Group1 |
PaymentDate1, PayeeName1 |
Payment1, Payment4 |
Group2 |
PaymentDate1, PayeeName2 |
Payment3 |
Group3 |
PaymentDate1, PayeeName3 |
Payment5 |
Group4 |
PaymentDate2, PayeeName1 |
Payment2 |
新しいインスタンスの順序は、レコードが出力される順序です。 複数のグループ化基準を評価して新しいレベルのインスタンスを形成する場合、基準は階層の形成と考えることができます。 最初の基準は階層の最上部、最後の基準は階層の最下部です。
通常、EFTフォーマットには2種類のフォーマット固有のデータ・グループ化シナリオがあります。 グループ・レコードのみを印刷するフォーマットと、グループ内にネストされた個々のエレメント・レコードを持つグループを出力するフォーマットがあります。 次の表は、前述の5つの支給とグループ化の条件に基づいたこれらのシナリオの2つの例で、作成した出力を示しています:
シナリオ1: レコードのみをグループ化
EFTファイルの構造:
-
BatchRec
-
PaymentGroupHeaderRec
-
PaymentGroupFooterRec
-
レコード順序 | レコード・タイプ | 説明 |
---|---|---|
1 |
BatchRec |
NA |
2 |
PaymentGroupHeaderRec |
グループ1 (PaymentDate1、PayeeName1)の場合 |
3 |
PaymentGroupFooterRec |
グループ1 (PaymentDate1、PayeeName1)の場合 |
4 |
PaymentGroupHeaderRec |
グループ2 (PaymentDate1、PayeeName2)の場合 |
5 |
PaymentGroupFooterRec |
グループ2 (PaymentDate1、PayeeName2)の場合 |
6 |
PaymentGroupHeaderRec |
グループ3 (PaymentDate1、PayeeName3)の場合 |
7 |
PaymentGroupFooterRec |
グループ3 (PaymentDate1、PayeeName3)の場合 |
8 |
PaymentGroupHeaderRec |
グループ4 (PaymentDate2、PayeeName1)の場合 |
9 |
PaymentGroupFooterRec |
グループ4 (PaymentDate2、PayeeName1)の場合 |
シナリオ2: レコードと個別のレコードをグループ化
EFTファイルの構造:
BatchRec
-
PaymentGroupHeaderRec
-
PaymentRec
-
-
PaymentGroupFooterRec
レコード順序 | レコード・タイプ | 説明 |
---|---|---|
1 |
BatchRec |
NA |
2 |
PaymentGroupHeaderRec |
グループ1 (PaymentDate1、PayeeName1)の場合 |
3 |
PaymentRec |
Payment1の場合 |
4 |
PaymentRec |
Payment4の場合 |
5 |
PaymentGroupFooterRec |
グループ1 (PaymentDate1、PayeeName1)の場合 |
6 |
PaymentGroupHeaderRec |
グループ2 (PaymentDate1、PayeeName2)の場合 |
7 |
PaymentRec |
Payment3の場合 |
8 |
PaymentGroupFooterRec |
グループ2 (PaymentDate1、PayeeName2)の場合 |
9 |
PaymentGroupHeaderRec |
グループ3 (PaymentDate1、PayeeName3)の場合 |
10 |
PaymentRec |
Payment5の場合 |
11 |
PaymentGroupFooterRec |
グループ3 (PaymentDate1、PayeeName3)の場合 |
12 |
PaymentGroupHeaderRec |
グループ4 (PaymentDate2、PayeeName1)の場合 |
13 |
PaymentRec |
Payment2の場合 |
14 |
PaymentGroupFooterRec |
グループ4 (PaymentDate2、PayeeName1)の場合 |
レベルの定義コマンドで定義すると、抽出で発生するレベルと同じ方法で、新しいレベルをテンプレートで使用できます。 ただし、新しいレベルのレコードは、グループ条件で定義された基本レベルのフィールドのみを参照できます。 サマリー関数以外の他のベース・レベル・フィールドを参照することはできません。
たとえば、PaymentGroupHeaderRecは、フィールドのPaymentDateおよびPayeeNameを参照できます。 また、SUM関数のPaymentAmount (支払レベル・フィールド)を参照することもできます。 ただし、PaymentDocNameやPaymentDocNumなどの他の支払レベル・フィールドは参照できません。
DEFINE LEVELコマンドには、グループ化基準サブコマンドが必ず1つのみ必要です。 DEFINE LEVELコマンドには付属のEND DEFINE LEVELコマンドがあります。 サブコマンドは、DEFINE LEVELコマンドとEND DEFINE LEVELコマンドの間に指定する必要があります。 これらは任意の順序で宣言できます。
DEFINE SEQUENCEコマンド
DEFINE SEQUENCEコマンドは、生成されたEFTレコードまたは抽出インスタンス(データベース・レコード)を索引付けするためにSEQUENCE_NUMBER関数とともに使用できる順序を定義します。 EFTレコードは、テンプレートに定義されている物理レコードです。 データベース・レコードは、抽出からのレコードです。 混乱を避けるため、「レコード」という用語は、常にEFTレコードを指します。 データベース・レコードは、抽出エレメント・インスタンスまたはレベルと呼ばれます。
DEFINE SEQUENCEコマンドには4つのサブコマンドがあります : レベル、増分ベース、開始、最小および最大でリセット:
RESET AT LEVEL
RESET AT LEVELサブコマンドは、シーケンスが開始番号をリセットする場所を定義します。
RESET AT LEVEは必須サブコマンドです。 たとえば、支払をバッチで採番するには、RESET AT LEVELをバッチとして定義します。 バッチ間で番号付けを続行するには、RESET AT LEVELをRequestHeaderとして定義します。
場合によっては、順序がテンプレート外でリセットされます。 たとえば、日付ごとにリセットするように定期的な順序を定義できます。 このような場合、RESET AT LEVELにはPERIODIC_SEQUENCEキーワードが使用されます。 支払ファイルに使用された最後の連番がデータベースに保存されます。 外部イベントは、データベース内の順序のリセットを制御します。 次の支払ファイル実行では、開始時刻番号(start atサブコマンドを参照)のシーケンス番号がデータベースから抽出されます。
INCREMENT BASIS
INCREMENT BASISサブコマンドは、レコードまたは抽出インスタンスに基づいて順序を増分するかどうかを指定します。 このサブコマンドで使用できるパラメータは、RECORDおよびLEVELです。
RECORDと入力すると、レコードごとに連番が増分されます。
レベルの新しいインスタンスごとに順序を増分するには、LEVELと入力します。
複数のレコードがあるレベルの場合、レベルベースの増分を使用すると、レベル内のすべてのレコードの順序番号が同じになります。 レコード・ベースの増分によって、レベル内の各レコードに新しい連番が割り当てられます。
レベルベースの増分の場合、順序番号は1レベルのフィールドでのみ使用できます。 たとえば、抽出に「バッチ」>「支払」>「請求書」の階層があり、レベル順序でINCREMENT BASISを定義し、バッチ・レベルでリセットするとします。 連番は、支払レベルまたは請求書レベルのいずれか一方のフィールドで使用できます。 階層レベル全体で連番を使用することはできません。
ただし、このルールは、レコード連番による増分基準には適用されません。 レコードは複数のレベルで順序付けできます。
レベル別およびレコード順序別の増分基準の両方で、順序のレベルは、順序が定義されている場所に基づいて暗黙的に設定されます。
連結コマンドの定義
連結の定義コマンドを使用して、親レベルのフィールドで使用する子レベルの抽出要素を連結します。
たとえば、このコマンドを使用して、支払レベル・フィールドで使用する支払に属するすべての請求書の請求書番号と支払期日を連結します。
連結定義コマンドには3つのサブコマンドがあります: ベース・レベル、要素およびデリミタ。
SUBSTR関数の使用
SUBSTR関数を使用して、連結文字列を、異なるフィールドに配置できる小さい文字列に分割します。
たとえば、次の表に、支払の5つの請求書を示します。
請求書 | InvoiceNum |
---|---|
1 |
car_parts_inv0001 |
2 |
car_parts_inv0002 |
3 |
car_parts_inv0003 |
4 |
car_parts_inv0004 |
5 |
car_parts_inv0005 |
次の表に示す連結定義を使用します:
レベル | 定義 |
---|---|
<DEFINE CONCATENATION> |
ConcatenatedInvoiceInfo |
<BASE LEVEL> |
請求書 |
<ELEMENT> |
InvoiceNum |
<DELIMITER> |
',' |
<END DEFINE CONCATENATION> |
ConcatenatedInvoiceInfo |
支払レベル・フィールドでConcatenatedInvoiceInfoを参照できます。 文字列は次のとおりです:
car_parts_inv0001,car_parts_inv0002,car_parts_inv0003,car_parts_inv0004,car_parts_inv0005
連結請求書情報の最初の40文字のみを使用する場合は、次のようにTRUNCATE関数またはSUBSTR関数のいずれかを使用します:
TRUNCATE(ConcatenatedInvoiceInfo, 40)
SUBSTR(ConctenatedInvoiceInfo, 1, 40)
これらの文のいずれかを実行すると、次のようになります:
car_parts_inv0001,car_parts_inv0002,car_
次の40文字を分離するには、SUBSTR関数を使用します:
SUBSTR(ConcatenatedInvoiceInfo, 41, 40)
次の文字列を取得します:
parts_inv0003,car_parts_inv0004,car_par
無効な文字および置換文字コマンド
一部の形式では、Oracle Applicationsにデータを入力するために使用したものとは異なる文字セットが必要です。 たとえば、一部のドイツのフォーマットではASCIIで出力ファイルを必要としますが、データはドイツ語で入力されています。 元のキャラクタ・セットとターゲット・キャラクタ・セットが一致しない場合は、元のキャラクタ・セットと同等のASCIIを定義できます。 たとえば、ドイツのウムラウト「a」を「ao」に置き換えます。
一部の書式では特定の文字が許可されません。 既知の無効な文字が出力ファイルで送信されないようにするには、無効な文字コマンドを使用して、特定の文字の出現にフラグを付けます。
置換文字コマンドを使用するには、左側の列にソース文字を指定し、右側の列に置換文字を指定します。 元の文字セットにソース文字を入力する必要があります。 これは、出力対象ではない文字セットを使用するフォーマット・テンプレートで唯一のケースです。 必要な出力文字セットに置換文字を入力します。
「DELIMITER_BASEDの場合」形式。データにデリミタがある場合は、エスケープ文字"?"を使用してその意味を保持できます。 たとえば、
名?+Last名は最初のname+Last名と同じです
どのソースと同等か
データで使用されている場合、エスケープ文字自体はエスケープする必要があります。
置換文字コマンドを使用すると、エスケープ文字の要件をサポートできます。 ソースとしてデリミタを指定し、エスケープ文字とデリミタをターゲットとして指定します。 たとえば、前述の例のコマンド・エントリは次のようになります:
<REPLACEMENT CHARACTERS>
+ ?+
? ??
<END REPLACEMENT CHARACTERS>
無効な文字コマンドには、システム・エラーの原因となる無効な文字の文字列である単一のパラメータがあります。
置換文字プロセスは、文字セット変換の前または間に実行されます。 文字セット変換は、書式設定の前にXML抽出で直接実行されます。 文字セット変換後、出力文字セットに関して無効な文字がチェックされます。 無効な文字が見つからない場合は、書式設定が続行されます。
出力文字セットおよび新しいレコード文字コマンド
新しいレコード文字コマンドを使用して、実行時に明示的および暗黙的なレコード・ブレークを区切るcharacter(s)を指定します。
新しい各レコード・コマンドは、明示的なレコード・ブレークを表します。 表の各末尾は暗黙的なレコード・ブレークを表します。 このパラメータは、コンマで区切られた定数文字名のリストです。
一部の書式にはレコード区切りがありません。 生成される出力は単一のデータ行です。 この場合、新しいレコード文字コマンド・パラメータ・フィールドは空のままにします。
テンプレートに"新しいレコード文字"フィールドを定義しない場合は、新しいレコード文字として" "が設定されます。
出力長モード
出力長モードは「文字」または「バイト」に設定できます。
OUTPUT LENGTH MODEがcharacterに設定されている場合、各フィールドの出力レコード長は文字長に基づきます。 OUTPUT LENGTH MODEを"byte"に設定すると、各フィールドの出力レコード長はバイト長に基づきます。
OUTPUT LENGTH MODEが設定されていない場合は、"character"が使用されます。
数字の3桁ごとのセパレータおよび数字の10進数のセパレータ
デフォルトの3桁(またはグループ)セパレータはカンマ("、")で、デフォルトの小数点セパレータはピリオド(".")です。 デフォルト以外のセパレータを指定するには、Number Thousands SeparatorコマンドおよびNumber Decimal Separatorコマンドを使用します。
たとえば、グループ・セパレータとして"."を定義し、小数セパレータとして"、"を定義するには、次のようにコマンドを入力します:
<NUMBER THOUSANDS SEPARATOR> .
<NUMBER DECIMAL SEPARATOR> ,
「NUMBER DECIMAL SEPARATOR」を設定する場合は、「NUMBER THOUSANDS SEPARATOR」も設定する必要があります。 表示されるフィールドに適切な書式マスクを設定してください。 数値の書式設定の詳細は、「フォーマット列」を参照してください。