設定コマンド表
テンプレートは必ず、設定コマンドを指定する表で始まります。
設定コマンドは、テンプレート・タイプや出力文字セットなどのグローバル属性、および順序付けや連結などのプログラム要素を定義します。
設定コマンドは次のとおりです。
-
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コマンド
このコマンドは、テンプレートのタイプを指定します。
FIXED_POSITION_BASEDとDELIMITER_BASEDの2つのタイプがあります。
FIXED_POSITION_BASEDテンプレートは、EFTなどの固定長レコード形式に使用します。この形式では、レコード内のすべてのフィールドが固定長になります。指定された長さよりもデータが短い場合は埋込みが行われます。長い場合は切り捨てられます。システムには、データの埋込みと切捨てのデフォルトの動作が指定されています。定位置ベースの形式の例には、欧州で使用されているEFTや、米国で使用されているNACHA ACHファイルがあります。
DELIMITER_BASEDテンプレートでは、データの埋込みは行われず、最大フィールド長に達したときに切捨てが行われるのみです。空のフィールドは許可されます(データがnullの場合)。データ・フィールドを区切るには、指定されているデリミタが使用されます。フィールドが空の場合は、2つのデリミタが並んで表示されます。デリミタベース・テンプレートの例には、ASC X12 820などのEDI形式、およびPAYMUL、DIRDEB、CREMULなどのUN EDIFACT形式があります。
EDI形式では、レコードはセグメントと呼ばれることがあります。EDIセグメントはレコードと同様に処理されます。各セグメントは新規レコード・コマンドで始め、レコード名を指定します。新規レコード・コマンドの直後には、出力データの一部としてセグメント名を指定するデータ・フィールドを用意する必要があります。
DELIMITER_BASEDテンプレートでは、データ・フィールド間の個別の行に適切なデータ・フィールド・デリミタを挿入します。デリミタ行は、各データ・フィールド行の後に挿入します。空のフィールドにプレースホルダを挿入するには、2つの連続したデリミタ行を定義します。
空のフィールドは多くの場合、構文上の理由で使用されます。つまり、空のフィールドにプレースホルダを挿入し、その後に続くフィールドが適切に識別されるようにします。
データ・フィールド、コンポジット・データ・フィールドおよびレコードの終わりを示すために、それぞれ異なるデリミタが用意されています。一部の書式では、デリミタ文字を選択できる場合もあります。いずれの場合も、同じ用途には同じデリミタを一貫して使用して、構文エラーを避けるようにしてください。
DELIMITER_BASEDテンプレートでは、<POSITION>および<PAD>列は適用されません。これらはデータ表から省略されます。
DELIMITER_BASEDテンプレートの一部では、最大長と最小長を指定できます。このような場合は、Oracle Paymentsによって長さが検証されます。
DEFINE LEVELコマンド
一部の書式では、データ抽出にはない追加の特定データ・レベルが必要な場合があります。たとえば、ある書式では、支払いを支払い日ごとにまとめる必要があります。レベル定義コマンドを使用すると、支払い日のグループが入力抽出ファイルにない場合でも、このグループを定義して、テンプレート内のレベルとして参照できるようになります。
レベル定義コマンドを使用するときは、抽出内に存在するベース・レベルを宣言します。レベル定義コマンドにより、抽出のベース・レベルよりも1レベル高位にある新しいレベルが挿入されます。新しいレベルは、ベース・レベルのインスタンスのグルーピングとして機能します。
レベル定義コマンドは設定コマンドであるため、設定表で定義する必要があります。このコマンドには、次の3つのサブコマンドがあります。
-
ベース・レベル・コマンド - 新しいレベルのベースになっている抽出レベル(XML要素)を定義します。レベル定義コマンドには、常に1つのベース・レベル・サブコマンドのみを含める必要があります。
-
GROUPING CRITERIA - ベース・レベルのインスタンスをグループ化し、新しいレベルのインスタンスを形成するために使用するXML抽出要素を定義します。グルーピング基準コマンドのパラメータは、カンマで区切られた要素のリストで、これらの要素はグルーピング条件を指定します。
グルーピングの階層は、要素の順序で決定されます。ベース・レベルのインスタンスは最初の基準値に従ってグループ分けされ、これらの各グループが2番目の基準に従ってさらにグループ分けされます。この処理が基準値の数だけ繰り返されます。最後のサブグループはそれぞれ、新しいレベルのインスタンスとみなされます。
-
GROUP SORT ASCENDINGまたはGROUP SORT DESCENDING - グループのソート順序を定義します。
<GROUP SORT ASCENDING>
または<GROUP SORT DESCENDING>
コマンド行を、<DEFINE LEVEL>
コマンドと<END DEFINE LEVEL>
コマンドの間の任意の場所に挿入します。ソート・コマンドのパラメータは、カンマで区切られた要素のリストで、これらの要素によってグループがソートされます。 -
GROUP SORT ASCENDING NUMBERまたはGROUP SORT DESCENDING NUMBER - 数値グループのソート順序を定義します。
<GROUP SORT ASCENDING NUMBER>
または<GROUP SORT DESCENDING NUMBER>
コマンド行を、<DEFINE LEVEL>
コマンドと<END DEFINE LEVEL>
コマンドの間の任意の場所に挿入します。ソート・コマンドのパラメータは、ソートのために使用されるカンマ区切りの要素のリストです。
たとえば、次の表は、1つのバッチ内の5つの支払いを示しています。
支払いインスタンス | PaymentDate (グループ化基準1) | PayeeName (グループ化基準2) |
---|---|---|
Payment1 |
PaymentDate1 |
PayeeName1 |
Payment2 |
PaymentDate2 |
PayeeName1 |
Payment3 |
PaymentDate1 |
PayeeName2 |
Payment4 |
PaymentDate1 |
PayeeName1 |
Payment5 |
PaymentDate1 |
PayeeName3 |
テンプレートで次のような設定表を作成し、Payment DateとPayee Nameに従ってグループ化されたベース・レベルPaymentから、PaymentsByPayDatePayeeというレベルを作成します。PaymentDateとPayeeNameで各グループをソートするために、昇順グループ・ソート・コマンドを追加します。
支払いグループ | レベル |
---|---|
|
PaymentsByPayDatePayee |
|
Payment |
|
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種類の固有のデータ・グルーピング・シナリオがあります。1つの形式ではグループ・レコードのみが印刷され、もう1つの形式ではグループ内にネストされている個別の要素レコードを持つグループが印刷されます。次の表に、前述の5つの支払いとグルーピング条件に基づいたこれらのシナリオの例を2つと、生成された出力を示します。
シナリオ1: グループ・レコードのみ
EFTファイル構造:
-
BatchRec
-
PaymentGroupHeaderRec
-
PaymentGroupFooterRec
-
レコードの順序 | レコード・タイプ | 説明 |
---|---|---|
1 |
BatchRec |
該当なし |
2 |
PaymentGroupHeaderRec |
Group1(PaymentDate1、PayeeName1)用 |
3 |
PaymentGroupFooterRec |
Group1(PaymentDate1、PayeeName1)用 |
4 |
PaymentGroupHeaderRec |
Group2(PaymentDate1、PayeeName2)用 |
5 |
PaymentGroupFooterRec |
Group2(PaymentDate1、PayeeName2)用 |
6 |
PaymentGroupHeaderRec |
Group3(PaymentDate1、PayeeName3)用 |
7 |
PaymentGroupFooterRec |
Group3(PaymentDate1、PayeeName3)用 |
8 |
PaymentGroupHeaderRec |
Group4(PaymentDate2、PayeeName1)用 |
9 |
PaymentGroupFooterRec |
Group4(PaymentDate2、PayeeName1)用 |
シナリオ2: グループ・レコードと個別レコード
EFTファイル構造:
BatchRec
-
PaymentGroupHeaderRec
-
PaymentRec
-
-
PaymentGroupFooterRec
レコードの順序 | レコード・タイプ | 説明 |
---|---|---|
1 |
BatchRec |
該当なし |
2 |
PaymentGroupHeaderRec |
Group1(PaymentDate1、PayeeName1)用 |
3 |
PaymentRec |
Payment1用 |
4 |
PaymentRec |
Payment4用 |
5 |
PaymentGroupFooterRec |
Group1(PaymentDate1、PayeeName1)用 |
6 |
PaymentGroupHeaderRec |
Group2(PaymentDate1、PayeeName2)用 |
7 |
PaymentRec |
Payment3用 |
8 |
PaymentGroupFooterRec |
Group2(PaymentDate1、PayeeName2)用 |
9 |
PaymentGroupHeaderRec |
Group3(PaymentDate1、PayeeName3)用 |
10 |
PaymentRec |
Payment5用 |
11 |
PaymentGroupFooterRec |
Group3(PaymentDate1、PayeeName3)用 |
12 |
PaymentGroupHeaderRec |
Group4(PaymentDate2、PayeeName1)用 |
13 |
PaymentRec |
Payment2用 |
14 |
PaymentGroupFooterRec |
Group4(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コマンドは、SEQUENCE_NUMBER関数とともに使用できる順序を定義して、生成されたEFTレコード、または抽出インスタンス(データベース・レコード)のいずれかの索引を作成します。EFTレコードは、テンプレート内で定義される物理レコードです。データベース・レコードは、抽出によるレコードです。混乱を避けるために、「レコード」という用語は常にEFTレコードを意味するものとします。データベース・レコードは、抽出要素のインスタンスまたはレベルと呼びます。
DEFINE SEQUENCEコマンドには、RESET AT LEVEL、INCREMENT BASIS、START AT、MINIMUMおよびMAXIMUMという5つのサブコマンドがあります。
RESET AT LEVEL
RESET AT LEVELサブコマンドは、順序の開始番号をリセットする位置を定義します。
RESET AT LEVEは必須のサブコマンドです。たとえば、支払いをバッチ別に番号付けするには、RESET AT LEVELをBatchとして定義します。バッチ間にまたがって番号付けするには、RESET AT LEVELをRequestHeaderとして定義します。
順序がテンプレートの外部でリセットされる場合もあります。たとえば、周期的順序では、日付によるリセットが定義される場合があります。この場合は、RESET AT LEVELにPERIODIC_SEQUENCEキーワードを使用します。システムでは、支払いファイルで使用された最後の順序番号をデータベースに保存します。データベース内の順序のリセットは、外部イベントによって制御されます。次の支払いファイルの実行時には、この順序番号がデータベースから抽出され、開始番号として使用されます(「開始位置サブコマンド」を参照)。
INCREMENT BASIS
INCREMENT BASISサブコマンドは、レコードまたは抽出インスタンスに基づいて順序を増分させる必要があるかどうかを指定します。このサブコマンドで使用可能なパラメータはRECORDとLEVELです。
RECORDを入力すると、レコードごとに順序が増分します。
LEVELを入力すると、レベルの新しいインスタンスごとに順序が増分します。
複数のレコードが存在するレベルでは、レベルベースの増分を使用すると、そのレベル内のすべてのレコードに同じ順序番号が設定されることに注意してください。レコードベースの増分では、レベル内の各レコードに新しい順序番号が割り当てられます。
レベルベースの増分では、順序番号は1つのレベルのフィールドでのみ使用できます。たとえば、抽出にバッチ>支払い>請求書の階層がある場合に、バッチ・レベルでリセットされるレベル順序によるINCREMENT BASISを定義したとします。この場合、順序は支払いまたは請求書レベル・フィールドのいずれかで使用できますが、その両方で使用することはできません。つまり、階層レベル間をまたがった順序番号を使用することはできません。
しかし、このルールはレコード順序による増分基準には適用されません。この場合、レコードにレベル間をまたがった順序番号を付けることができます。
増分基準がレベル順序およびレコード順序のどちらの場合でも、順序のレベルは、順序が定義されている場所に基づいて暗黙的に定義されます。
連結定義コマンド
連結定義コマンドを使用すると、親レベル・フィールドで使用する子レベル抽出要素を連結できます。
たとえば、このコマンドを使用して、1つの支払いに属しているすべての請求書の請求書番号と期日を連結し、支払いレベル・フィールドで使用できます。
連結定義コマンドには、ベース・レベル、要素、デリミタの3つのサブコマンドがあります。
SUBSTR関数の使用
SUBSTR関数を使用すると、連結された文字列をより小さな文字列に分割し、異なるフィールドに配置できます。
たとえば、次の表は、1つの支払いに含まれている5つの請求書を示しています。
Invoice | 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> |
Invoice |
<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書式では、データにデリミタが含まれている場合、エスケープ文字「?」を使用してその意味を保持できます。たとえば、
First name?+Last nameは、Fist name+Last nameと同じです
Which source??は、Which source?と同じです。
データ内でエスケープ文字を使用する場合には、そのエスケープ文字自体をエスケープする必要があることに注意してください。
置換文字コマンドは、エスケープ文字の要件のサポートに使用できます。デリミタをソースとして指定し、エスケープ文字にデリミタを加えたものをターゲットとして指定します。たとえば、前述の例のコマンド・エントリは次のようになります。
<REPLACEMENT CHARACTERS>
+ ?+
? ??
<END REPLACEMENT CHARACTERS>
無効文字コマンドには、システム・エラーを発生させる無効な文字の文字列である単一のパラメータが存在します。
文字の置換プロセスは、文字セットの変換前または変換中に実行されます。文字セットの変換は書式設定前に、XML抽出に対して直接実行されます。文字セットの変換後は、出力文字セットにおいて無効な文字がチェックされます。無効な文字が見つからなかった場合は、書式設定が行われます。
出力文字セット・コマンドと新規レコード文字コマンド
新規レコード文字コマンドを使用すると、実行時に明示的および暗黙的なレコード・ブレイクを区切るための文字を指定できます。
新規レコード・コマンドは、それぞれ明示的なレコード・ブレイクを表します。表の終わりは、それぞれ暗黙的なレコード・ブレイクを表します。パラメータは、カンマで区切られた定数文字名のリストです。
書式の中には、レコード・ブレイクが含まれていないものもあります。生成される出力は1行のデータになります。この場合、新規レコード文字コマンドのパラメータ・フィールドは空のままにします。
新規レコード文字フィールドをテンプレートで定義しなかった場合は、デフォルトの新規レコード文字として\nが設定されます。
Output Length Mode
Output Length Modeは、characterまたはbyteに設定できます。
OUTPUT LENGTH MODEをcharacterに設定した場合、各フィールドの出力レコードの長さは文字の長さによって決まります。OUTPUT LENGTH MODEをbyteに設定した場合、各フィールドの出力レコードの長さはバイトの長さによって決まります。
OUTPUT LENGTH MODEの設定が指定されていない場合は、characterが使用されます。
3桁のセパレータと小数セパレータ
デフォルトの3桁の(またはグループ)セパレータはカンマ(",")で、デフォルトの小数セパレータはピリオド(".")です。3桁のセパレータ・コマンドおよび小数セパレータ・コマンドを使用すると、デフォルト以外のセパレータを指定できます。
たとえば、グループ・セパレータとして"."を定義し、小数セパレータとして","を定義するには、次のようにコマンドを入力します。
<NUMBER THOUSANDS SEPARATOR> .
<NUMBER DECIMAL SEPARATOR> ,
NUMBER DECIMAL SEPARATORを設定する場合は、NUMBER THOUSANDS SEPARATORも設定する必要があることに注意してください。表示されるフィールドには適切な書式マスクを設定するようにします。数値の書式設定の詳細は、「書式列」を参照してください。