レコード・マッパーの使用法
次の 2 つの技術文書では、複雑なレコード・マッピング (それぞれのレコードが一群の異種サブレコードで構成されている) と、バッチ処理 (複数のレコードをグループに分けて一括して処理する) について説明します。
概要
レコード・マッパー ツールを使用すると、テキスト・ファイル内のデータを永続プロダクション・メッセージにマッピングしたり、元のデータに再びマッピングしたりする作業をすばやく効率的に実行できます。特に、管理ポータル・ユーザ・インタフェースでは、テキスト・ファイルの表現を視覚的に作成することによって、プロダクションの単一の永続メッセージ・オブジェクトにマッピングされる、そのデータの有効なオブジェクト表現を作成できます。ターゲット・オブジェクト構造と入出力パーサの両方を生成するプロセスは自動化されており、指定する必要があるのはオブジェクト・プロジェクションの永続構造に関する少数のオプションだけです。InterSystems IRIS® は単一の永続ツリーになるようにオブジェクトを生成するため、完全なカスケード式の削除操作が可能になります。
管理ポータルには、コンマ区切り形式 (CSV) のファイルをレコード・マップ構造に変換する CSV ウィザードもあります。このウィザードは、ヘッダ名を使用してサンプル・ファイル内の列に対応するレコード・マップ・プロパティを作成するため、特に、ファイルに列ヘッダが含まれている場合に有効です。
レコード・マッパーでは、区切りがあるか、または固定幅のフィールドを持つ単純なレコードが処理されます。レコード・マップは、レコード内のデータを識別する一連のフィールドと、フィールドを 1 つの構成単位に整理する複合で構成されます。区切りのあるレコードでは、複合の階層がフィールド間で使用されるセパレータを指定します。区切りのあるレコード内には、繰り返される単純なフィールドを含めることができます。繰り返される複合フィールドを含めることはできません。保存されたレコードでフィールドがスペースを無駄にしないように、必要に応じて受信テキスト・ファイルのフィールドを無視できます。
レコード・マッパーは、区切りのあるデータと固定幅のデータが混在したデータを処理できません。また、繰り返される単純なフィールドの処理以外に、受信レコードの内容に基づいてパーサまたはオブジェクト構造を動的に調整することもできません。
複雑なレコード・マッパーを使用すれば、さまざまなレコード・タイプを含む構造化レコードを処理できます。これには、繰り返しレコードを含む構造や区切りのあるレコードと固定フィールド・レコードの混在した構造を処理する能力も含まれます。
レコード・マッパー・パッケージの追加機能では、EnsLib.RecordMap.BatchOpens in a new tab の継承クラスを実装することによって、異種レコードをバッチ処理できます。このクラスは、特定のバッチに関連付けられたヘッダおよびトレーラの解析と書き出しを処理します。ヘッダおよびトレーラが単純な場合は、レコード・マッパー・ユーザ・インタフェースでバッチ・タイプ EnsLib.RecordMap.SimpleBatchOpens in a new tab を作成できます。より複雑なヘッダおよびトレーラ・データを処理する必要がある場合は、これらの 2 つのバッチ実装のいずれかを拡張します。
RecordMap バッチ・オペレーションでは、個別のレコードからバッチを作成するときに、部分的に作成したバッチを中間ファイルに保存します。このファイルの場所は、バッチ・オペレーションの IntermediateFilePath プロパティを使用して指定できます。ミラー・システムでは、メイン・システムとフェイルオーバー・システムの両方にアクセスできるネットワーク・ドライブに、中間ファイルを保存できます。これにより、フェイルオーバーが発生した場合でも、フェイルオーバー・システムは引き続き未完了のバッチにレコードを追加できます。未完了のバッチは InterSystems IRIS データベースではなくファイルに保存されるため、ミラー・システムに自動的にコピーされることはありません。
レコード・マップの作成と編集
この節では、レコード・マップの作成方法と編集方法について説明します。この章は以下の節で構成されています。
概要
レコード・マップを作成するには、管理ポータルの [レコード・マッパー] ページを使用します。区切りのあるファイルの場合は、[CSV レコード・ウィザード] を使用して、プロセスをさらに自動化できます。レコード・マップの開発時には、サンプル・ファイルがレコード・マップにどのように表示されるかを確認できます。
レコード・マップ (CSVRecord マップも同様) の再生成では、生成済みコードの手動による変更が破棄されます。この原則に対応するために、生成されたパーサー・クラス・メソッド (GetObject、PutObject、GetRecord、PutRecord) にはコメント "DO NOT EDIT" が明確に付記されます。
[レコード・マッパー] ページには、レコード・マップ構造のビジュアル表現に加えて、レコード・マップ・コンポーネントで使用できる詳細な設定を入力および操作できる単純なインタフェースが含まれています。また、兄弟要素 (同じレベルにある要素) の配置を変更することもできます。このユーザ・インタフェースのより重要な機能の 1 つは、サンプル入力ファイルがある場合に、現在のレコード・マップの保存時にこのファイルのサンプル解析が試みられることです。レコード・マップ内の小さな問題には、管理ポータルから直接対処することができます。
XML とモデル・クラスを使用して、直接レコード・マップを作成することもできます。
はじめに
レコード・マッパーを起動するには、[Interoperability] > [ビルド] > [レコード・マッパー] を選択します。ここから、以下のコマンドを使用できます。
-
[開く] — ファインダ・ダイアログ・ボックスが表示されます。このダイアログ・ボックスで、編集対象として開く既存のレコード・マップを選択できます。
-
[新規作成] — ページが初期化され、新しいレコード・マップ構造を入力できるようになります。
-
[保存] — 作業中のネームスペースに、クラスとしてレコード・マップ構造が保存されます。保存されると、オブジェクトはレコード・マップのリストに表示されます。
-
[名前をつけて保存] — レコード・マップ構造が新しいクラスとして、作業中のネームスペースに保存されます。保存されると、オブジェクトはレコード・マップのリストに表示されます。
-
[生成] — レコード・マップ・パーサ・コードと関連する永続メッセージ・レコード・クラス・オブジェクトが生成されます。
オブジェクトを手動で生成するには、EnsLib.RecordMap.GeneratorOpens in a new tab の GenerateObject()Opens in a new tab クラス・メソッドを使用します。このメソッドでは、生成するオブジェクトの永続構造に関するいくつかのオプションを指定できます。これについては、このメソッドのコメントに記載があります。
-
[削除] — 現在のレコード・マップが削除されます。オプションで、関連する永続メッセージ・レコード・クラスと保存されたすべてのクラスのインスタンスを削除できます。
-
[CSV ウィザード] — カンマ区切り値 (CSV) を含むサンプル・ファイルからのレコード・マップの作成プロセスの自動化を支援する CSV レコード・ウィザードが開きます。
[保存] 操作では、現在のレコード・マップのみがディスクに書き込まれます。対照的に、[生成] 操作では、基礎のオブジェクトに対してパーサ・コードと永続オブジェクト構造が生成されます。
ページの左側でレコード・マップ名を選択すると、右側にレコードの設定が表示され、そのレコード・マップのプロパティを編集できます。レコード・マップを保存する前に、レコード・マップに少なくとも 1 つのフィールドを追加する必要があります。以下の各節では、これらのプロセスについて説明します。
新しいレコード・マップを作成するか、または既存のレコード・マップを開くと、レコード・マッパーの左側のパネルにレコード・マップで定義したフィールドの要約が表示されます。右側のパネルでは、レコード・マップまたは選択したフィールドのプロパティを設定できます。サンプル・データ・ファイルを指定した場合は、左側のパネルの上に表示されます。例えば、以下は、右側のパネルにレコード・マップのプロパティが表示されたレコード・マッパーを示します。
レコード・マップをエクスポート、インポート、または削除するには、[Interoperability]、[リスト]、[レコード・マップ] の順にクリックして、[レコード・マップ・リスト] ページを表示します。
一般的な制御文字
1 つのレコード・マップ内の複数の場所で、リテラル制御文字だけでなく、印刷可能文字も使用できます。例えば、一般的な制御文字であるタブ文字に加えて、印刷可能文字であるカンマをセパレータとして指定できます。制御文字は、パディング文字またはレコード・ターミネータ文字の 1 つとして指定することもできます。これらのコンテキストのいずれかで制御文字を指定するには、その文字の 16 進エスケープ・シーケンスを指定する必要があります。レコード・マッパーで、パディング文字としてスペースまたはタブ文字を選択した場合やレコード・ターミネータ文字として CRLF (復改の後に行フィードが続く)、CR、または LF を選択した場合は、管理ポータルが自動的に 16 進表現を生成します。パディング文字としてまたはレコード・ターミネータ内で別の制御文字を指定する場合や、セパレータとして任意の制御文字を指定する場合は、対応するフォーム・フィールドに 16 進表現を入力する必要があります。以下の表に、一般的に使われている制御文字の 16 進のエスケープ・シーケンスを示します。
文字 | 16 進表記 |
---|---|
タブ | \x09 |
行フィード | \x0A |
復改 | \x0D |
スペース | \x20 |
その他の文字については、https://en.wikipedia.org/wiki/C0_and_C1_control_codesOpens in a new tab にアクセスするか、その他のリソースを参照してください。
RecordMap でレコード・ターミネータを指定する場合は、受信メッセージとそのレコード・ターミネータが正確に一致する必要があります。例えば、CRLF (\x0D\x0A) を指定する場合は、受信メッセージ・レコードとその順序が一致する必要があります。
レコード・マップのプロパティの編集
新しいレコード・マップのプロパティを入力する場合も、ウィザードで生成したマップから作業を始める場合も、また既存のマップを編集する場合も、プロセスは同じです。レコード自体に対して、以下のフィールドの値を入力または更新します。
レコード・マップの名前。レコード・マップ名はパッケージ名で修飾する必要があります。パッケージ名を入力せず、非修飾レコード・マップ名を指定した場合は、デフォルトで、レコード・マップ・クラスがユーザ・パッケージ内に保存されます。
このレコードを表すクラスの名前。デフォルトで、レコード・マッパーは、ターゲット・クラス名を、レコード・マップ名の後に “.Record” が付いた修飾名に設定しますが、このターゲット・クラス名は変更できます。 ターゲット・クラス名はパッケージ名で修飾する必要があります。パッケージ名を入力せず、非修飾ターゲット・クラス名を指定した場合は、デフォルトで、ターゲット・クラスがユーザ・パッケージ内に保存されます。
このレコード・マップに関連付けるバッチ・クラスの名前 (存在する場合)。
レコードのタイプ。以下のオプションがあります。
-
[デリミタ区切り]
-
[固定幅]
インポートしたデータ・レコードの文字エンコード。
パディング文字をフィールド内のデータの左側に表示するように指定するフラグ。
このレコード・マップの目的と用途を記述するテキスト。
実際のレコード・コンテンツのあらゆるデータの前に配置される静的文字。このレコード・マップを複雑なレコード・マップ内で使用している場合は、先行データが含まれたレコードを識別する必要があります。
値を埋めるために使用される文字。パディング文字はビジネス・サービスによって受信メッセージから削除され、ビジネス・オペレーションによって固定幅レコード・マップ内のフィールドを埋めるフィールド値として使用されます。
-
[なし]
-
[スペース]
-
[タブ]
-
[その他]
レコードの終端として使用される文字。
-
[なし]
-
[CRLF]
-
CR
-
[LF]
-
[その他]
レコードの終了前に終端が可能かどうかを指定するフラグ。可能な場合は、レコードがパディング文字で埋められているものとして処理されます。
レコード・マップを複雑なレコード・マップに使用できるかどうかを指定するフラグ。
固定幅フィールドをレコードに分割するために使用されるオプションの単一文字。指定された場合は、入力メッセージのフィールド間にこの文字を含める必要があり、ビジネス・オペレーションがフィールド間にこの文字を書き込みます。
フィールド・セパレータ文字のリスト。最初のセパレータがレコード内の最上位フィールドを区切ります。次のセパレータが最上位複合フィールド内のフィールドを区切ります。その他のセパレータがネストした複合フィールド内のフィールドを区切ります。
繰り返されるすべてのフィールドで使用される 1 つの区切り文字。
引用符スタイルのエスケープ処理がないことを指定するラジオ・ボタン。
フィールド値内にセパレータ文字を出現可能にする引用符スタイルのエスケープ処理を有効にするラジオ・ボタン。入力フィールドは、引用符文字で囲むことができます。このフィールドでは、開始引用符と終了引用符の間のすべての文字が考慮されます。引用符内に出現するセパレータ文字は、リテラル文字として処理されます。セパレータとしては処理されません。出力では、値にセパレータを含むフィールドは、引用符文字で囲まれます。
フィールド値内にセパレータ文字を出現可能にする引用符スタイルのエスケープ処理を有効にするラジオ・ボタン。これには引用符エスケープ処理と同じ効果がありますが、出力のすべてのフィールドが、そこに区切り文字が使用されているかどうかに関係なく、引用符で囲まれる点が異なります。
フィールド・コンテンツを囲む引用符として使用する文字。このフィールドは、[引用符のエスケープ] ラジオ・ボタンまたは [すべてクォート] ラジオ・ボタンを選択した場合に表示されます。引用符として制御文字を使用している場合、16 進数で入力する必要があります。"一般的な制御文字" を参照してください。
引用符で囲まれたフィールドにレコード終端文字がある場合のレコード・マッパーの動作を指定します。チェックを付けると、レコード・マッパーによってレコード終端文字がエスケープ処理され、レコードの終了としてではなく、フィールド・データの一部として扱われます。
レコード・マップ・フィールドと複合の編集
レコード・マッパーの左側のパネルには、レコード・マップで定義したフィールドの要約が表示されます。フィールドを選択すると、右側のパネルにフィールドのプロパティが表示されます。以下に例を示します。
レコード・マップは、一連のフィールドと複合で構成されます。各複合は、一連のフィールドと複合で構成されます。[複合の作成] ボタンと [フィールドの作成] ボタンは複合フィールドとデータ・フィールドを切り替えます。複合フィールドでは、名前と、フィールドが必要なことを示すフラグを指定するだけです。レコード・マップ上の緑色のプラス記号アイコンをクリックすると、単一のフィールドまたは複合フィールドが最上位に追加されます。複合フィールドのプラス記号をクリックすると、そこに単一のフィールドまたは複合フィールドが追加されます。
レコード・マップへのフィールドの追加時には、サンプル・ファイルを開いて、作成するレコードにそのデータがどのようにマッピングされるかを確認できます。
区切りのあるレコード・マップでは、複合フィールド内のフィールドに異なるセパレータが使用されます。例えば、レコード内の最上位フィールドはカンマで区切られますが、複合内のフィールドはセミコロンで区切られます。固定幅レコード・マップでは、複合フィールドがデータを概念的に整理するのに役立ちますが、入力メッセージの処理には影響しません。
レコード・マッパーで複合フィールドを作成すると、複合フィールドによって、デフォルト名が複合構造と一致する修飾名として設定されます。修飾フィールド名によって、生成されたレコード・クラス内のフィールドの構造が決定されます。別の修飾名を含むようにフィールド名を変更しても、レコード・マップ内の複合フィールドのレベルは、生成されたレコード・クラス内のフィールドの構造に関係なく変化しません。
データ・フィールドごとに、以下のプロパティを入力します。
フィールドの名前。
フィールドのデータ型。以下のリストから選択するか、カスタム・データ型を入力します。
-
%Boolean
-
%Date
-
%Decimal
-
%Double
-
%Integer
-
%Numeric
-
%String
-
%Time
-
%Timestamp
このレコード・マップ内のフィールドの目的と用途を記述します。
フィールドの幅。
フィールドが必須であることを示すフラグ。
レコード・マップの繰り返し区切り文字を使用して、フィールドに繰り返される値を含めることが可能なことを指定するフラグ。
入力ではフィールドを無視し、保存されるレコードに含めないことを指定するフラグ。[無視] プロパティを使用すると、保存されたレコードのストレージ・スペースが節約されます。出力では、無視したフィールドに対して空の値が出力されます。固定幅のレコードでは、フィールドはスペースで埋められます。区切りのあるレコードでは、空のフィールドに連続する 2 つのセパレータが書き込まれます。
このフィールドの末尾に付ける必要がある文字。制御文字は 16 進で入力する必要があります。"一般的な制御文字" を参照してください。
セミコロンで区切られたデータ型に適用されるパラメータ。"一般的なプロパティ・パラメータ" を参照してください。
フィールドの SQL 列番号。この値は省略するか、SqlColumnNumber プロパティ・キーワードの値と同じように、2 ~ 4096 の範囲にする必要があります。SQL 表現を容易に複製できることから、列番号は CSV ファイルのデータまたは同様のデータ・ダンプをインポートするときに特に役立ちます。
プロパティにインデックスを付けるかどうかを制御する列挙値。以下のいずれかを選択します。
-
(空白) — インデックスを作成しません。
-
1
-
[bitmap]
-
[idkey]
-
[unique]
レコード・マッパーの左側のパネルは、フィールド定義の要約が入っているテーブルです。各列は以下を指定しています。
-
上位レベルのフィールド番号。
-
フィールド名。
-
フィールドのプロパティの要約。要約には、以下の情報が含まれており、; (セミコロン) で区切られています。
-
ignored — [無視] チェック・ボックスにチェックが付いている場合、表示されます。
-
0..1 または 1..1 と、それに続くデータタイプおよびデータタイプ・パラメータ — それぞれ、オプションのフィールドか、必須のフィールドかを示します。
-
固定幅のレコード・マップのフィールド幅。
-
#nnn — SQL 列番号 (指定されている場合)。
-
standard、bitmap、idkey、または unique — インデックスのタイプ (指定されている場合)。
例えば、固定幅のレコード・マップの SSN フィールドの要約は 0..1 %String(PATTERN=3N1"-"2N1"-"4N); 11; #5; standard になる場合があります。これは、このフィールドがオプションのフィールドで、データタイプおよびデータタイプ・パラメータが %String(PATTERN=3N1"-"2N1"-"4N)、フィールド幅が 11、SQL 列番号が 5、インデックスが標準インデックスであることを意味します。
-
-
フィールドを上下に移動したり、フィールドを削除したりできるアイコン。複合フィールドでは、プラス・アイコンで新しいサブフィールドを追加できます。
CSV レコード・ウィザードの使用
InterSystems IRIS は、カンマ区切り値 (CSV) を含むサンプル・ファイルからのレコード・マップの作成プロセスの自動化を支援するウィザードを備えています。この CSV レコード・ウィザードを開始するには、InterSystems IRIS の [ビルド] サブメニューでこのウィザードを選択するか、または [レコード・マッパー] ページのリボン・バーにある [CSV ウィザード] をクリックします。ウィザードは、単一レベルのセパレータを含むファイルしか処理せず、先行データは処理しません。
ウィザードから、以下のフィールドの値を入力します。
サンプルの完全なパスとファイル名を入力するか、または [ファイルを選択] をクリックしてサンプル・ファイルの場所に移動し、ファイルを選択します。
サンプル・ファイルから生成するレコード・マップの名前を入力します。
サンプル・ファイルで使用している区切り文字。制御文字は 16 進で入力する必要があります。"一般的な制御文字" を参照してください。
サンプル・ファイルでレコードを終了する方法を指定します。以下のいずれかを選択します。
-
CRLF — 各レコードは、後ろに行フィードが続く復改で終了します。
-
CR — 各レコードは、復改のみで終了します。
-
LF — 各レコードは、行フィードのみで終了します。
-
その他 — 各レコードは、制御文字で終了します。制御文字の値は 16 進で入力します。"一般的な制御文字" を参照してください。
サンプル・ファイルで使用されている文字エンコードのタイプを選択します。
使用するサンプル・ファイルにヘッダ行が含まれている場合は、このチェックボックスにチェックを付けます。
この場合は、ヘッダ行の句読点と空白がすべて削除され、その結果値がプロパティ名としてレコード・マップに使用されます (このオプションを選択しない場合、プロパティ名は Property1、Property2、などと指定されます)。
生成するオブジェクトで SQL の列の順序を維持する場合は、このチェックボックスにチェックを付けます。
サンプル・ファイルでセパレータの引用符スタイルのエスケープ処理が使用されている場合は、このチェック・ボックスにチェックを付けて、引用符文字を選択します。
ウィザード・フォームへの入力が完了したら、[RecordMap の作成] をクリックします。それにより、サンプル・ファイルから新しいレコード・マップが生成され、[レコード・マッパー] ページに戻ります。この後、レコード・マップの調整を行い、生成されたプロパティに詳細を追加します。詳細は、"レコード・マップのプロパティの編集" を参照してください。
レコード・マップ・クラスの構造
レコード・マップを記述するクラスが 2 つあります。
-
レコードの外部構造を記述し、レコード・パーサとレコード・ライタを実装する RecordMap。
-
データを含むオブジェクトの構造を定義する生成されたレコード・クラス。このオブジェクトを使用すれば、データ変換とルーティング・ルール条件内のデータを参照できます。
レコード・マップ・ビジネス・サービスは、受信データを読み取って解釈し、生成されたレコード・クラスのインスタンスであるメッセージを作成します。ビジネス・プロセスは、生成されたレコード・クラスのインスタンスを読み取り、変更、または生成することができます。最後に、レコード・マップ・ビジネス・オペレーションは、インスタンス内のデータを使用して、RecordMap を書式設定テンプレートとして送信データを書き込みます。RecordMap クラスと生成されたレコード・クラスは共に、データを記述する階層構造を持っていますが、生成されたオブジェクト構造を RecordMap 構造と同じにする必要はありません。
管理ポータルで新しいレコード・マップを作成してから保存すると、RecordMap クラスを拡張するためのクラスが定義されます。生成されたレコード・クラスを定義するには、管理ポータルで [生成] をクリックする必要があります。これにより、EnsLib.RecordMap.GeneratorOpens in a new tab クラス内の GenerateObject()Opens in a new tab メソッドが呼び出されます。RecordMap クラス定義をコンパイルするだけでは、生成されたレコード・クラス用のコードは作成されません。管理ポータルを使用するか、ターミナルまたはコードから Generator.GenerateObject() メソッドを呼び出す必要があります。
RecordMap は、一連のフィールドと複合で構成されます。
-
フィールドは、指定されたタイプのデータ・フィールドを定義します。フィールド・タイプは、VALUELIST、MAXVAL、MAXLEN、FORMAT などのパラメータを指定できます。固定幅レコードでは、レコード・マッパーがフィールド幅を使用して、MAXVAL パラメータまたは MAXLEN パラメータのデフォルト値を設定します。
-
複合は、一連のフィールドと複合で構成されます。また、複合は RecordMap 内でネストすることができます。
デフォルトで、管理ポータル内のレコード・マッパーは、複合レベルを使用してフィールドの修飾名を設定します。区切りのあるレコードでは、次のように、複合要素のネスト・レベルによって、フィールド間で使用されるセパレータが決定します。
-
複合内に含まれない RecordMap 内のフィールドは、最初のセパレータで区切られます。
-
RecordMap 内に存在する複合内に出現するフィールドは、2 つ目のセパレータで区切られます。
-
それ自体が複合内に存在する複合内に出現するフィールドは、3 つ目のセパレータで区切られます。
-
複合のその他のネスト・レベルでは、フィールドを区切るためのセパレータが順にインクリメントされます。
固定幅レコード内の複合は、データ構造を記述したものですが、InterSystems IRIS によるメッセージの処理方法に影響しません。
各 RecordMap オブジェクトは、対応するレコード・オブジェクト構造を持っています。RecordMap を生成すると、レコード・マップのオブジェクト表現を規定したレコード・オブジェクトが定義され、コンパイルされます。デフォルトで、管理ポータル内のレコード・マッパーが “Record” レコードを RecordMap の名前で修飾しますが、[ターゲット・クラス名] フィールドで明示的にレコード・オブジェクトの名前を設定することができます。また、デフォルトで、レコード・マッパーは、複合内のフィールドをそれが含まれる複合の名前で修飾します。デフォルト修飾名を使用した場合は、レコード・オブジェクト・クラス・プロパティの構造が RecordMap フィールドと複合の構造と一致しますが、フィールドに他の名前を割り当てた場合は、レコード・オブジェクト・クラス・プロパティの構造が RecordMap フィールドと複合の構造と一致しません。
レコード・オブジェクト・クラスは、EnsLib.RecordMap.BaseOpens in a new tab、%PersistentOpens in a new tab、%XML.AdaptorOpens in a new tab、および Ens.RequestOpens in a new tab の各クラスを拡張します。既存のクラスの RECORDMAPGENERATED パラメータが 0 の場合は、ターゲット・クラスがレコード・マップ・フレームワークによって変更されません。したがって、すべての変更をプロダクション開発者が行う必要があります。生成されたレコード・クラス内のプロパティは、レコード・マップ内のフィールドの名前によって異なります。
レコード・オブジェクト・クラスのプロパティは、レコード・マップのフィールドに対応しており、以下の名前と型を持っています。
-
RecordMap またはその中の複合内の任意の場所に出現する単純な非修飾名を含むフィールドの名前。これらのプロパティにはフィールドの型によって決定された型が設定されます。
-
RecordMap またはその中の複合内の任意の場所に出現する修飾名を含むフィールドの最上位名。これらのプロパティには、同じ最上位修飾名を共有するフィールドによってクラスが定義されたオブジェクト型が設定されます。これらのクラスは、%SerialObjectOpens in a new tab クラスと %XML.AdaptorOpens in a new tab クラスを拡張します。また、これらのクラスは、生成されたレコード・クラス名のスコープ内で定義されます。さらに、これらのクラスには、次のレベルの名前修飾に対応したプロパティが含まれています。
データに 3 つのレベルのセパレータが含まれている区切りのあるレコード・マップを定義しているとします。最上位セパレータ・フィールドが人に関する情報を区切り、次のレベルが識別番号、名前、および電話番号に関する情報を区切り、最後のレベルが住所と名前に含まれる要素を区切ります。例えば、メッセージの先頭を次のようにすることができます。
French Literature,TA,199-88-7777;Jones|Robert|Alfred;
これらのセパレータを処理する RecordMap を定義するには、人のレベルの複合と名前のレベルの複合が必要になります。つまり、FamilyName フィールドのデフォルト・フィールド名を Person.Name.FamilyName にすると、レコード・オブジェクト・クラス内に深いレベルのクラス名が作成されます。例えば、クラス NewRecordMap.Record.Person.Name には、NewRecordMap.Record.Person.Name.FamilyName などのプロパティが含まれます。フィールド名の先頭に $ (ドル記号) 文字を付けることによってこの深いレベルを回避できます。こうすることによって、クラスとプロパティのすべてがレコード・スコープ内で直接定義されます。同じ例を使用すると、クラス NewRecordMap.Record.Name に NewRecordMap.Record.FamilyName のようなプロパティが含まれることになります。
フィールド名の修飾に使用される名前は、オブジェクト型でプロパティを定義するために使用されます。そのため、フィールド名を修飾するための名前をフィールド名の最後の部分に使用することはできません。これは、データ型と名前が同じプロパティが定義されるためです。
RecordMap 構造のオブジェクト・モデル
クラス構造の動作は、XML を直接作成するか、EnsLib.RecordMap.Model.* クラスを使用して RecordMap のオブジェクト・プロジェクションを作成することによって実現できます。一般に好まれるアプローチでは管理ポータルが使用されますが、状況によっては、オブジェクト・モデルを使用して RecordMap 構造を作成する方が都合がいい場合もあります。これらのクラスの構造は RecordMap クラスの構造に従います。このレベルにおける詳細は、クラスリファレンスを参照してください。
プロダクションでのレコード・マップの使用
[レコード・マッパー] ページでオブジェクト・クラスの生成を選択した場合は、プロダクションのビジネス・サービスで使用できるクラスを作成します。