「以下の条件で無視...」アクション

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > MapForce とデータベース > データをデータベースにマップする >

「以下の条件で無視...」アクション

テーブルアクション 「以下の条件で無視...」 は、定義された条件に従い、データベース内の特定のレコードが更新されることを回避するために使用されます。「以下の条件で無視...」 アクションは、  (「残りを挿入」 アクションなどの) 他のデータベーステーブルアクションと組み合わせて使用される場合のみ、意味があります。例えば、ソース XML からのデータをターゲットデータベースにマッピングする場合、 「以下の条件で無視...」 条件を構成し、ソース XML 内の特定のフィールドがターゲットデータベースの記録内の(通常、 主キーの値である)フィールドと等価がであるかをチェックするように構成することができます。 マッピングが実行される際、 「以下の条件で無視...」 条件が true の場合、(つまり、 2つのフィールドが等しい場合)、 データベースの記録は無視され、 次に定義されたアクション (例えば、「残りを挿入」) は、実行されます。

 

この例は、 「以下の条件で無視...」 条件の結果に基づいたデータベーステーブルにレコードを挿入する方法について説明します。この例は、次のファイルを使用します:

 

altova-cmpy-extra.xml — データベースに挿入されるソースデータを含んでいます。
Altova_Hierarchical.xsd — 上記のインスタンスファイルを検証するために使用されるスキーマです。
altova.mdb — 更新されるターゲットデータベースです。

 

全てのファイルは <マイ ドキュメント>\Altova\MapForce2019\MapForceExamples\ フォルダー内にあります。 下の説明では、簡素化のために、これらのファイルへの完全なパスは省略されています。

 

この例のマッピングは、サンプルデータベースファイルを変更します。元のデータベースをバックアップし、下記のステップを開始する前に、新規のコピーを起動することが奨励されます。することが奨励されます。バックアップを作成することにより、元の例が上書きされず、下記と同じ結果を得ることができます。詳細に関しては、次を参照してください:データベースを変更するマッピングの実行

 

このマッピングの目的は以下の通りです:

 

ソース XML とターゲット Person テーブル内の両方で、同じ PrimaryKey を持つ個人のレコードが存在する場合、  アクションは取られません。 (つまり、無視されます)。
個人のレコードが Person テーブル内に存在する上記の条件を満たさない場合、 アクションは取られません。
Person テーブル内に対応する (主キーが無い)ソース XML からのレコードは、新規として扱われ、新規の主キーと共に Person テーブルに挿入されます。

マッピングの目的を達成するために、以下のステップを行います。

 

ステップ 1: ソース XML コンポーネントを挿入する

 

「挿入」 メニューから、「XML スキーマ/ファイル」をクリックして、Altova_Hierarchical.xsd を参照します。インスタンスファイルを与えるように問われると、altova-cmpy-extra.xml を参照してください。

 

ステップ 2: ターゲットデータベースを挿入する

 

「挿入」 メニューから、「データベース」をクリックして、 altova.mdb に接続するためにウィザードのステップを行ってください。 (次を参照してください: 例: "altova.mdb" データベースをマッピングに追加する)。

 

ステップ 3: 接続を描く

 

下に表示されるとおりマッピングの接続を描きます。

mf_db_ignoreif_01

 

ステップ 4: "「以下の条件で無視...残りを挿入」" アクションを構成する

 

1.ターゲットコンポーネントで、 「Person」 テーブルの横の アクション: 挿入 ( tbl-act-icon ) ボタンをクリックします。
2.「レコードに対するアクション」の横の、「以下の条件で無視...」 を選択します。これは、条件付きの無視アクションへのデータベーステーブルアクションを変更します。つまり、 条件が満たされる場合のみ、現在のレコードは無視されます (次のステップを参照してください)。
3.「PrimaryKey」値の横から下に表示されるとおり、 equal を選択します。これは無視の条件を定義します。つまり、 データベースの記録は、PrimaryKey 値がマッピングから与えられる PrimaryKey の値と同じ場合、無視されます。

mf_db_ignoreif_02

4.任意で、NULL equal チェックボックスを選択します。 このサンプルでは、ソース XML内の PrimaryKey フィールド、または、データベース内の PrimaryKey フィールドに null 値が含まれていないため、このチェックボックスには関連性はありません。 しかしながら、データに null 値が含まれており、このような値を等価として扱うには、場合、このチェックボックスをチェックする必要があます。それ以外の場合は、希望しない結果が生成される場合があります。 詳細に関しては、データベーステーブルアクション内の Null 値の処理を参照してください。
5.「アクションの追加」 をクリックします。これは、新規のアクションを既存の「以下の条件で無視...」 アクションの右に追加します。主キー が max() + 1 に設定され、下に表示されるとおり、新規のアクションが「残りを挿入」として構成されます :

mf_db_ignoreif_03

上のイメージでは、データベース テーブル アクションは、マッピングの目的に従い構成されています。つまり、 「以下の条件で無視...」 条件が満たされると、 レコードはスキップされます。それ以外の場合、挿入されます。オプション 「マップされた値」 は、マッピングからの値がレコードの全てのフィールドを作成するために使用されることを指定します。オプション max() + 1 は、レコードのために一意の、新規の主キーの値を生成します。

 

6.ダイアログボックスを閉じるために「OK」をクリックします。マッピングでは、アクション: 挿入 tbl-act-icon ボタンは、 アクション: 無視; 挿入 (  ) ボタンに変更されます。これは、アクションの無視と挿入がこのテーブルのために構成されていることを示しています。

 

ステップ 5: マッピングをプレビューし、データベースを更新する

 

マッピングをプレビューするために「出力」タブをクリックします。データベースに対して実行されるアクションを含む、 SQL スクリプトが生成されます。このスクリプトはプレビューのためであり、データベースをまだ変更していません。データベースに対してスクリプトを実行するには以下を行います:

 

「出力」 メニューから、 「SQL-スクリプトの実行」をクリックします。

 

メモ:MapForce から直接 SQL スクリプトを実行することは、データベースを更新する方法のひとつです。次も参照してください: データベースを変更するマッピングの実行

 

MapForce 内の DB クエリタブ内の「Person」 テーブル を開くと (次を参照してください: データベースの参照とクエリ)、 マッピングの結果は以下の通りです:

 

XML ファイル内に対応する主キーを持つ全てのデータベースの記録は、 「以下の条件で無視...」 条件を満たし、影響を受けず、変更されていません。例は、 主キー1、2、 3、 4、 および 5 を持つレコードです。
XML ファイル内で対応するキーを持たない全てのデータベースの記録は、 「以下の条件で無視...」 条件を満たしませんでしたが、影響を受けず変更されていません。 例は、 主キー 6、7、8、9、10、11、12、および 13 を持つレコードです。
新規のレコードが (データベース内でキーが存在していない箇所である) 「Person」 テーブルに挿入されました。 例は、 主キー 30 と 31 を ソース XML ファイル内に持つレコードです。 これらは、それぞれ新規の主キー 22 と 23 と共にデータベースに挿入されます。

mf_db_ignoreif_04

データベースの更新後の 「Person」 テーブル


(C) 2019 Altova GmbH