テーブルと関係
Related information
テーブル
概要
宣言
maxOccurs> 1 のエレメントであるテーブルエレメントは、次のアノテーションを追加することで宣言されます。
<xs:annotation>
<xs:appinfo>
<osd:table>
<primaryKeys>/pathToField1 /pathToField...n</primaryKeys>
</osd:table>
</xs:appinfo>
</xs:annotation>
注意:
データモデルにエンティティ名が明示的に設定されていない場合、デフォルトのエンティティ名がテーブルに関連付けられます。テーブルの名前は、デフォルトのエンティティ名として使用されます。エンティティ名を使用すると、WSDL 操作のサフィックスと SQL リクエストのエイリアスを定義することで、パスの代わりに一意の名前を使用して、SQL 要求とデータサービス操作でテーブルを参照できます。詳細については、エンティティマッピングを参照してください。
共通のプロパティ
|
エレメント
|
説明
|
必須
|
|---|---|---|
primaryKeys
|
テーブルの主キーフィールドを指定します。
主キーの各フィールドは、テーブルのルートエレメントのすぐ下から始まる絶対 XPath 表記で示す必要があります。主キーに複数のフィールドがある場合、リストはスペースで区切られます。
注意:タイプ xs:string の主キーの空白は異なる方法で処理されます。文字列型の主キーの空白処理を参照してください。
|
はい
|
defaultLabel
|
レコードのエンドユーザー表示を定義します。複数のバリアントを指定できます。
注意:
エンドユーザーの表示は並べ替え可能である必要があるため、静的式では並べ替え可能な検索戦略を使用するフィールドのみが許可されます。
注意:ユーザーインターフェイスを表示するときのタグの優先度は次のとおりです。
注意:レコードラベルを表示する場合、関連するデータセットで定義されたアクセス権限は適用されません。アクセス権限の制限のために通常非表示になっているフィールドは、ラベルに表示されます。
|
いいえ
|
recordForm
|
データセットのレコードフォームをカスタマイズするための特定のコンポーネントを定義します。このコンポーネントは、
UIForm を拡張する JavaBean または UserServiceRecordFormFactory を実装する JavaBean を使用して定義されます。
JavaBean は、属性
osd:class を使用して指定されます。次に例を示します。
<recordForm osd:class="com.wombat.MyRecordForm"/>
|
いいえ
|
例
以下は、製品カタログの例です。
<xs:element name="Products" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
<osd:label>Product Table </osd:label>
<osd:description>List of products in Catalog </osd:description>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<osd:table>
<primaryKeys>./productRange /productCode</primaryKeys>
<index name="indexProductCode">/productCode</index>
</osd:table>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="productRange" type="xs:string"/><!-- key -->
<xs:element name="productCode" type="xs:string"/><!-- key -->
<xs:element name="productLabel" type="xs:string"/>
<xs:element name="productDescription" type="xs:string"/>
<xs:element name="productWeight" type="xs:int"/>
<xs:element name="productType" type="xs:string"/>
<xs:element name="productCreationDate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Catalogs" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
<osd:label>Catalog Table</osd:label>
<osd:description>List of catalogs</osd:description>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<osd:table>
<primaryKeys>/catalogId</primaryKeys>
</osd:table>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="catalogId" type="xs:string"/><!-- key -->
<xs:element name="catalogLabel" type="xs:string"/>
<xs:element name="catalogDescription" type="xs:string"/>
<xs:element name="catalogType" type="xs:string"/>
<xs:element name="catalogPublicationDate" type="xs:date"/>
</xs:sequence>
</xs:complexType>
</xs:element>
データセットの継承に関連するプロパティ
次のプロパティは、データセットの継承のコンテキストでのみ有効です。
| エレメント | 説明 | 必須 |
|---|---|---|
onDelete-deleteOccultingChildren |
レコードの削除時に、非表示モードの子レコードも削除するかどうかを指定します。 有効な値は、 never または always です。 |
いいえ。デフォルトは never です。 |
mayCreateRoot |
ルートレコードの作成を許可するかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは always です。 |
mayCreateOverwriting |
子データセットでレコードを上書きできるかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは always です。 |
mayCreateOcculting |
子データセットでレコードを非表示にできるかどうかを指定します。式は、以下の構文に従う必要があります。定義モードを参照してください。 | いいえ。デフォルトは always です。 |
mayDuplicate |
レコードの複製を許可するかどうかを指定します。式は、以下の構文に従う必要があります。 | いいえ。デフォルトは always です。 |
mayDelete |
レコードの削除を許可するかどうかを指定します。式は、以下の構文に従う必要があります。 | いいえ。デフォルトは always です。 |
may... 式は、アクションがいつ可能かを指定しますが、アクションの最終的な可用性はユーザーのアクセス権限にも依存します。式の構文は次のとおりです。
expression ::= always | never | <condition>*
「always」:操作は「常に」可能です (ただし、ユーザー権限によって制限される場合があります)。
「never」:操作は不可能です。
「root:yes」:レコードがルートインスタンスにある場合、操作は可能です。
「root:no」:レコードがルートインスタンスにある場合、操作はできません。
レコードで特定の条件が定義されていない場合は、デフォルトが使用されます。
以下も参照してください。:
ツールバーの使用
xs:annotation/appinfo/osd:table の下のエレメント defaultView/toolbars を使用して、ユーザーインターフェイスに表示するツールバーを定義することができます。ツールバーを使用すると、テーブルビュー、階層ビュー、またはレコードフォームを表示するときに表示するボタンとメニューをカスタマイズできます。
次の表は、
defaultView/toolbars で定義できるエレメントを示しています。
| エレメント | 説明 | 必須 |
|---|---|---|
tabularViewTop |
デフォルトのテーブルビューの上で使用するツールバーを定義します。 | いいえ |
tabularViewRow |
デフォルトのテーブルビューの各行で使用するツールバーを定義します。 | いいえ |
recordTop |
レコードフォームで使用するツールバーを定義します。 | いいえ |
hierarchyViewTop |
テーブルのデフォルトの階層ビューで使用するツールバーを定義します。 | いいえ |
以下も参照してください。:
例
以下は、製品カタログで使用されるカスタムツールバーの例です。
<xs:element name="Products" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
<osd:label>Product Table </osd:label>
<osd:description>List of products in Catalog </osd:description>
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:annotation>
<xs:appinfo>
<osd:table>
<primaryKeys>./productRange /productCode</primaryKeys>
<defaultView>
<toolbars>
<tabularViewTop>toolbar_name_for_tabularViewTop</tabularViewTop>
<tabularViewRow>toolbar_name_for_tabularViewRow</tabularViewRow>
<recordTop>toolbar_name_for_recordTop</recordTop>
<hierarchyViewTop>toolbar_name_for_hierarchyViewTop</hierarchyViewTop>
</toolbars>
</defaultView>
</osd:table>
</xs:appinfo>
</xs:annotation>
...
</xs:complexType>
</xs:element>
注意:
ツールバーが存在しないか、特定の場所で使用できない場合、対応する場所のユーザーインターフェイスにツールバーは表示されません。
レコードメタデータ
EBX® は、テーブルの構造にレコードメタデータを自動的に追加します。メタデータノードを使用すると、レコードに関する次の情報を取得できます。
-
作成者
-
作成時刻
-
最終変更者
-
最終変更時刻
-
レコードの一意の識別子 (UUID)。このメタデータは技術的なものであり、カスタムテーブルビュー、構造化検索ツール、およびクイック検索では使用できません。
-
レコードの定義モード。このメタデータは技術的なものであるため、カスタムテーブルビュー、構造化検索ツール、クイック検索では使用できません。レコードメタデータの使用例としては、特定の日付以降に特定のユーザーによって作成されたすべてのレコードを表示または取得することがあります。次のことが可能です。
-
ユーザーインターフェイスのビジネスユーザーの場合
-
検索条件の一部としてメタデータフィールドを使用して、クイック検索機能を使用してレコードを検索します。
-
必要なメタデータフィールドを含むテーブルビューを定義します。
-
-
API を介して、XPath または SQL を使用してクエリを実行します。
注意:
メタデータに関しては、次の点に注意してください。
-
メタデータは、予約名 ebx-metadata を持つグループの下で定義されます。結果として、テーブルのルートの直下に同じ名前のグループが含まれている場合、メタデータはテーブルで使用できません。テーブルがこの予約名でグループを定義している場合、データモデルのコンパイル時に警告が表示されます。
-
メタデータは読み取り専用です。
-
テーブルのコンテンツを XML または CSV ファイルにエクスポートする場合、メタデータは含まれません。
-
デフォルトでは、API を使用してデータモデルをインストロスペクトする場合、メタデータフィールドは含まれません。専用の API を使用して明示的に含めることができます。
以下も参照してください。:
外部キー
宣言
table への参照は、拡張ファセット
osd:tableRef を使用して定義されます。
osd:tableRef 宣言を保持するノードは、タイプ xs:string にする必要があります。
インスタンス化時に、ノードの任意の値は、主キー構文を使用してターゲットテーブル内のレコードを識別します。
この拡張ファセットは、値がターゲットテーブルのレコードを参照する列挙としても解釈されます。
|
エレメント
|
説明
|
必須
|
|---|---|---|
tablePath
|
ターゲットテーブルを指定する XPath 式。
|
はい
|
container
|
ターゲットテーブルを含むデータセットの参照。
|
データスペースエレメントが定義されている場合のみ。それ以外の場合、デフォルトは現在のデータセットです。
|
branch
|
コンテナデータセットを含むデータスペースの参照。
|
いいえ。デフォルトは現在のデータスペースまたはスナップショットです。
|
display
|
現在のレコードで選択された外部キーと可能なキーのソートされたリストを表示するためのカスタム表示。パターンベースの式、またはニーズが非常に具体的な場合は JavaBean の2つのバリアントを指定できます。
同じ外部キーエレメントで両方のバリアントを定義することはできません。
注意:レコードラベルを表示する場合、関連するデータセットで定義されたアクセス権限は適用されません。アクセス権限の制限のために通常非表示になっているフィールドは、ラベルに表示されます。
|
いいえ。 display プロパティが指定されていない場合、テーブルのレコードレンダリング が使用されます。
|
filter
|
ターゲットテーブルのレコードをフィルタリングする追加の制約を指定します。2 種類のフィルターを使用できます。
注意:
属性
osd:class とプロパティ predicate を同時に設定することはできません。検証検索の XPath 関数は、tableRef フィルターでは禁止されています。
以下も参照してください。:
|
いいえ
|
validation
|
osd:tableRef およびエラー管理ポリシーのローカライズされた検証メッセージを指定します。
特定の重大度レベルは、ネストされた
severity エレメントで定義できます。デフォルトの重大度は「error」です。
エラー管理ポリシーは、ネストされた
blocksCommit エレメントで定義できます。すべての操作をブロックするエラー管理ポリシーは、フィルターには適用されません。つまり、参照レコードが存在するが外部キーフィルタを満たさない場合、外部キー制約はブロックされません。この場合、更新は拒否されず、検証エラーが報告されます。
ローカライズされた各メッセージバリアントは、ネストされた message エレメントで定義され、ロケールは xml:lang 属性にあります。サポートされていないロケールのデフォルトメッセージを指定するには、xml:lang 属性のない message エレメントを定義します。
|
いいえ
|
注意:
リポジトリに存在しないコンテナへの外部キーを持つデータセットを作成できます。ただし、このデータセットのコンテンツは、コンテナが作成されるまで利用できません。コンテナの作成後、データセットを使用可能にするには、データモデルを更新する必要があります。まだ存在しないコンテナを参照するデータセットを作成する場合、次の制限が適用されます。
-
データセットレベルで定義されたトリガーは実行されません。
-
テーブルに含まれていないフィールドのデフォルト値は初期化されません。
-
アーカイブのインポート中に、存在しないコンテナを参照するデータセットを作成することはできません。
例
以下の例では、「Products」テーブルの外部キーを「Catalogs」テーブルのレコードに指定しています。
<xs:element name="catalog_ref" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:otherFacets>
<osd:tableRef>
<tablePath>/root/Catalogs</tablePath>
<display>
<pattern xml:lang="en-US">Catalog: ${./catalogId}</pattern>
<pattern xml:lang="fr-FR">Catalogue : ${./catalogId}</pattern>
</display>
<validation>
<severity>error</severity>
<blocksCommit>onInsertUpdateOrDelete</blocksCommit>
<message>A default error message</message>
<message xml:lang="en-US">A localized error message</message>
<message xml:lang="fr-FR">Un message d'erreur localisé</message>
</validation>
</osd:tableRef>
</osd:otherFacets>
</xs:appinfo>
</xs:annotation>
</xs:element>
以下も参照してください。:
関連付け
概要
関連付けは、データモデルの既存の関係を抽象化し、ユーザーインターフェイスとデータサービスで関連付けされたオブジェクトをモデル主導で簡単に統合できるようにします。
いくつかのタイプの関連付けがサポートされています。
-
*「外部キーによる」*関連付けは、既存の外部キーフィールドの逆の関係を指定します。
-
*「リンクテーブルを介した」*関連付けは、中間リンクテーブルに基づいて関係を指定します (このようなテーブルは「結合テーブル」と呼ばれることがよくあります)。このリンクテーブルは、2 つの外部キーを定義する必要があります。1 つは「ソース」テーブル (関連付けエレメントを保持するテーブル) を参照し、もう 1 つは「ターゲット」テーブルを参照します。
-
*「XPath 述語による」*関連付けは、XPath 述語に基づく関係を指定します。関連付けの場合、次のことも可能です。
-
追加の XPath フィルターを指定して、関連するオブジェクトをフィルター処理します。
-
表形式のビューを構成して、関連するテーブルに表示する必要のあるフィールドを定義します。
-
関連するオブジェクトをフォームにレンダリングする方法を定義します。
-
データサービスの「Select」操作で関連オブジェクトを非表示/表示します。データサービスでのフィールドの非表示を参照してください。
-
必要な関連オブジェクトの最小数と最大数を指定します。
-
関連するオブジェクトを制限するために XPath 述語を使用して検証制約を追加します。
以下も参照してください。:
宣言
関連付けは、
xs:annotation/appInfo の下の XML スキーマエレメント osd:association を使用してデータモデルで定義されます。
制限事項
-
関連付けは、タイプ xs:string の単純なエレメントにする必要があります。
-
関連付けは、テーブル内でのみ定義できます。
注意:
XML スキーマのインスタンスからは対応するノードが存在しないため、「公式」カーディナリティ制約 (
minOccurs="0" maxOccurs="0") が必要です。言い換えると、関連付けには値がなく、XML および XML スキーマに関する限り「仮想」エレメントと見なされます。
次の表は、
xs:annotation/appInfo/osd:association で定義できるエレメントを示しています。
|
エレメント
|
説明
|
必須
|
|---|---|---|
tableRefInverse
|
外部キーの逆の関係である関連付けのプロパティを定義します。
エレメント
fieldToSource は、関連付けのソーステーブルを参照する外部キーを定義します。エレメント fieldToSource は必須であり、関連付けを含むテーブルを参照する外部キーフィールドを指定する必要があります。
エレメント
fieldToSource は外部キーリスト ( maxOccurs > 1 ) で定義することができ、その場合、リストはブロッキング一意性制約 (onInsertUpdateOrDelete) で一意として宣言する必要があります。
以下も参照してください。:
|
関連付けが外部キーの逆の関係である場合は「はい」、それ以外の場合は「いいえ」。
|
linkTable
|
リンクテーブルを介した関連付けのプロパティを定義します。
エレメント
table は、関連付けで使用されるリンクテーブルを指定します。エレメント table は必須であり、既存のテーブルを参照する必要があります。
重要:関連付けで使用するためには、リンクテーブルは、自動インクリメントのフィールドで構成される主キーや、関連付けのソースまたはターゲットテーブルへの外部キーを定義する必要があります。
エレメント
fieldToSource は、関連付けのソーステーブルを参照する外部キーを定義します。エレメント fieldToSource は必須であり、関連付けを含むテーブルを参照する外部キーフィールドを指定する必要があります。
エレメント fieldToTarget は、関連付けのターゲットテーブルを参照する外部キーを定義します。エレメント fieldToTarget は必須であり、外部キーフィールドを指定する必要があります。
|
関連付けがリンクテーブル上にある場合は「はい」、それ以外の場合は「いいえ」。
|
xpathLink
|
XPath 述語に基づく関連付けのプロパティを定義します。
predicate エレメントは、現在のノードに関連する関連付けの基準を指定します。
例:
/root/Products[catalog_ref =${../catalogId}] または //Products[catalog_ref =${../catalogId}] または ../Products[catalog_ref =${../catalogId}]。
述部へのパス (
../Productsなど) は、関連付けのターゲットテーブルを指定します。パスのこの部分は、現在のテーブルに関して解決されます。関連付けが別のデータセットのテーブルを対象としている場合、相対パスを使用してテーブルを参照することはできません。
関連付けがソーステーブルのフィールドに依存する場合、XPath 式の述語には、
${<relative-path>} という表記を使用して依存するエレメントへの参照を含める必要があります。relative-path は、関連付けノードに関連するエレメントを識別するパスです。
EBX® XPath でサポートされている構文を参照してください。
注意:
検証検索 XPath 関数は、XPath リンクでは禁止されています。
|
関連付けが XPath 述語に基づいている場合は「はい」、それ以外の場合は「いいえ」。
|
filter
|
predicate エレメントを使用して関連オブジェクトをフィルタリングする XPath 述語を定義します。次に例を示します。
<filter><predicate>type = ${../refType}</predicate></filter>
XPath フィルターを定義する場合は、ソーステーブルとターゲットテーブルのフィールドのみを使用できます。つまり、リンクテーブルを介した関連付けである場合、XPath フィルターでリンクテーブルのフィールドを使用することはできません。
作成時のエラーメッセージ:ユーザーインターフェイスで、ユーザーがフィルターに準拠していない新しい関連付けられたレコードを送信すると、レコードの作成がブロックされます。エラーメッセージは、エレメント
checkOnAssociatedRecordCreation/message を使用してカスタマイズできます。ローカライズされた各メッセージバリアントは、xml:lang 属性にロケールを持つネストされたメッセージエレメントで定義されます。サポートされていないロケールのデフォルトメッセージを指定するには、xml:lang 属性のないメッセージエレメントを定義します。このプロパティの詳細については、例を参照してください。
注意:
検証検索 XPath 関数は、関連付けフィルターでは禁止されています。
|
いいえ
|
xpathFilter
|
注意:非推奨。このプロパティは、プロパティ
filter に置き換えられました。
関連するオブジェクトをフィルタリングするための XPath 述語を定義します。
|
いいえ
|
recordForm
|
関連するレコードの形式をカスタマイズするための特定のコンポーネントを定義します。このコンポーネントは、
UserServiceAssociationRecordFormFactory を実装する JavaBean を使用して定義されます。
JavaBean は、属性
osd:class を使用して指定されます。次に例を示します。
<recordForm osd:class="com.wombat.MyRecordFormFactory"/>
|
いいえ
|
別のデータセットを参照することができます。そのためには、関連付けのタイプに応じて、エレメント
tableRefInverse、 linkTable、または xpathLink のいずれかで次のプロパティを定義する必要があります。
| エレメント | 説明 | 必須 |
|---|---|---|
schemaLocation |
関連付けで使用されるフィールドを含むデータモデルを定義します。 データモデルは、埋め込みデータモデルとモジュールにパッケージ化されたデータモデルを参照できる特定の URN を使用して定義されます。 EBX® でサポートされている特定の URN の詳細については、SchemaLocation を参照してください。 |
はい |
dataSet |
関連付けで使用されるデータセットを定義します。このデータセットは、エレメント schemaLocation で指定されたデータモデルを使用する必要があります。 |
はい |
dataSpace |
関連付けで使用されるデータセットを含むデータスペースを定義します。 | いいえ |
重要
-
データセットを作成するときに、リポジトリにまだ存在しないコンテナへの関連付けを定義するデータセットを作成できます。ただし、このデータセットのコンテンツは、作成後すぐには利用できません。不在のコンテナが作成された後、データセットを使用可能にするためにデータモデルの更新が必要です。まだ存在しないコンテナを参照するデータセットを作成する場合、次の制限が適用されます。
-
データセットレベルで定義されたトリガーは実行されません。
-
テーブル外のフィールドのデフォルト値は初期化されません。
-
アーカイブのインポート中に、存在しないコンテナを参照するデータセットを作成することはできません。
-
-
別のデータセットへの関連付けの一貫性は、運用段階でチェックされます。関連付けが特定のデータセットのコンテキストで一貫していない場合、次のようになります。
-
許可の観点からは非表示と見なされます。つまり、関連付けはユーザーインターフェイスとデータサービスで非表示になります。
-
コンテナデータセット、テーブル、またはレコードの検証から除外されます。
-
関連付けの結果を計算する既存の API で例外が発生します。
-
ユーザーインターフェイスの統合
xs:annotation/appinfo の下のエレメント osd:defaultView/displayMode を使用して、関連付けられたオブジェクトをフォームにレンダリングする方法を定義できます。
可能な値は次のとおりです。
-
inlineは、関連付けられたレコードがデータモデル内の関連付けの同じ位置にあるフォームでレンダリングされることを指定します。 -
tabは、関連するレコードを特定のタブに表示することを指定します。 -
linkは、関連するレコードをモーダルウィンドウでレンダリングすることを指定します。
このプロパティが定義されていない場合、デフォルトでは、関連付けられたレコードは
inline でレンダリングされます。
次の例では、関連付けられたオブジェクトを次の形式で
inline でレンダリングするように指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
<osd:defaultView>
<displayMode>inline</displayMode>
</osd:defaultView>
</xs:appinfo>
</xs:annotation>
</xs:element>
次の例では、関連付けられたオブジェクトを特定のタブにレンダリングすることを指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
<osd:defaultView>
<displayMode>tab</displayMode>
</osd:defaultView>
</xs:appinfo>
</xs:annotation>
</xs:element>
ツールバーの使用
xs:annotation/appinfo の下のエレメント osd:defaultView/toolbars を使用して、ユーザーインターフェイスに表示するツールバーを定義することができます。ツールバーを使用すると、関連付けの表形式のビューを表示するときに表示するボタンとメニューをカスタマイズできます。
次の表は、
osd:defaultView/toolbars で定義できるエレメントを示しています。
| エレメント | 説明 | 必須 |
|---|---|---|
tabularViewTop |
この関連付けのデフォルトのテーブルビューで使用するツールバーを定義します。 | いいえ |
tabularViewRow |
この関連付けのデフォルトビューの各行に使用するツールバーを定義します。 | いいえ |
次の例は、カタログとその製品の間の以前の関連付けのツールバーを使用する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
<osd:defaultView>
<toolbars>
<tabularViewTop>toolbar_name_for_tabularViewTop</tabularViewTop>
<tabularViewRow>toolbar_name_for_tabularViewRow</tabularViewRow>
</toolbars>
</osd:defaultView>
</xs:appinfo>
</xs:annotation>
</xs:element>
注意:
関連付けのターゲットテーブルを含むデータモデルで定義されたツールバーのみを使用できます。つまり、関連付けのターゲットテーブルが別のデータモデルで定義されている場合、このデータモデルで定義されているツールバーのみを参照でき、関連付けを保持しているツールバーでは参照できません。
以下も参照してください。:
関連するオブジェクトのカスタマイズされたビュー
特定の表形式のビューを指定して、ターゲットテーブルに表示する必要のあるフィールドを定義できます。表形式のビューが定義されていない場合、付与されたアクセス権限に従って、ユーザーが表示できるすべての列が表示されます。表形式のビューは、
xs:annotation/appinfo の下のエレメント osd:defaultView/tabularView を使用して定義されます。
次の表は、
osd:defaultView/tabularView で定義できるエレメントを示しています。
| エレメント | 説明 | 必須 |
|---|---|---|
column |
表示するターゲットテーブルのフィールドを定義します。指定するパスは、ターゲットテーブルから絶対パスである必要があり、既存のフィールドを参照する必要があります。表示するフィールドを指定するために、いくつかの column エレメントを定義できます。 |
いいえ |
sort |
関連するオブジェクトの並べ替えに使用できるフィールドを定義します。いくつかの sort エレメントを定義して、関連するオブジェクトの並べ替えに使用できるフィールドを指定できます。 エレメント nodePath は、関連するオブジェクトの並べ替えに使用できるフィールドのパスを定義します。 エレメント isAscending は、ソート順が昇順 (true) か降順 (false) かを指定します。 |
いいえ |
次の例は、カタログとその製品の間の以前の関連付けから表形式のビューを定義する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
<osd:defaultView>
<tabularView>
<column>/productRange</column>
<column>/productCode</column>
<column>/productLabel</column>
<column>/productDescription</column>
<sort>
<nodePath>/productLabel</nodePath>
<isAscending>true</isAscending>
</sort>
</tabularView>
</osd:defaultView>
</xs:appinfo>
</xs:annotation>
</xs:element>
ユーザーインターフェイスでのアクション
ユーザーインターフェイスでは、次のアクションを実行できます。
-
作成:関連付けのターゲットテーブルにオブジェクトを直接作成できます。新しいオブジェクトが作成されると、そのオブジェクトは現在のレコードに自動的に関連付けられます。
-
複製:関連付けのターゲットテーブル内のオブジェクトを複製できます。新しいオブジェクトが作成されると、そのオブジェクトは現在のレコードに自動的に関連付けられます。
-
関連付け:既存のオブジェクトを現在のレコードに関連付けます。リンクテーブルを介した関連付けの場合、リンクテーブル内のレコードが自動的に作成され、現在のレコードと既存のオブジェクトの間のリンクが実体化されます。
-
移動:選択したオブジェクトを現在のレコードとは異なるレコードに関連付けます。リンクテーブルを介した関連付けの場合、前のリンクレコードが自動的に削除され、リンクテーブルに新しいレコードが自動的に作成されて、選択したオブジェクトとその新しい親レコードの間のリンクが具体化されます。
-
削除:関連付けのターゲットテーブルで選択された関連付けられたオブジェクトを削除します。
-
切断:現在のレコードと選択された関連オブジェクトの間のセマンティックリンクを切断します。リンクテーブルを介した関連付けの場合、リンクテーブル内のレコードは自動的に削除され、現在のレコードと関連付けられたオブジェクトの間のリンクが解除されます。
注意:
アクショ ンassociate および detach は、** XPath 述語** (エレメント xpathLink) を使用して関連付けが定義されている場合は使用できません。
アクションのカスタマイズされたビュー
表形式または階層形式の公開ビューを指定して、ユーザーインターフェイスを介してアクションを実行するときにオブジェクトを表示する方法を定義できます。公開されたビューは、
xs:annotation/appinfo の下のエレメント osd:defaultView/associationViews を使用して定義されます。
次の表は、
osd:defaultView/associationViews で定義できるエレメントを示しています。
| エレメント | 説明 | 必須 |
|---|---|---|
viewForAssociateAction |
現在のレコードに関連付けるターゲットテーブルのオブジェクトを表示するときに使用する公開ビューを定義します。指定されたビューは、関連付けのターゲットテーブルで公開および作成する必要があります。 | いいえ |
viewForMoveAction |
関連するオブジェクトを現在のテーブルの別のレコードに移動するときに使用する公開ビューを定義します。指定されたビューは、現在のテーブルで公開および作成する必要があります。 | いいえ |
次の例は、カタログとその製品の間の以前の関連付けからビューを定義する方法を示しています。
<xs:element name="Products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
<osd:defaultView>
<associationViews>
<viewForAssociateAction>view_name_for_catalogs</viewForAssociateAction>
<viewForMoveAction>view_name_for_products</viewForMoveAction>
</associationViews>
</osd:defaultView>
</xs:appinfo>
</xs:annotation>
</xs:element>
検証
一部のコントロールは、関連付けられたオブジェクトを制限するために、関連付けに対して定義できます。これらのコントロールは、エレメント
osd:association の下で定義されます。
次の表は、xs:annotation/appInfo/osd:association で定義できるコントロールを示しています。
| エレメント | 説明 | 必須 |
|---|---|---|
minOccurs |
この関連付けに必要な関連付けられたオブジェクトの最小数を指定します。この最小数は、エレメント value を使用して定義され、正の整数である必要があります。 |
いいえ。デフォルトでは最小値は制限されていません。 |
maxOccurs |
この関連付けに許可される関連付けられたオブジェクトの最大数を指定します。この最大数はエレメント value によって定義され、正の整数またはこの最大値が制限されていないことを示す生の文字列 unbounded のいずれかである必要があります。関連するオブジェクトの最大数は、関連するオブジェクトの最小数よりも大きくする必要があります。 |
いいえ。デフォルトでは最大値は制限されていません。 |
constraint |
関連するレコードを制限するための XPath 述語を定義します。XPath 述語を定義する場合は、ソーステーブルとターゲットテーブルのフィールドのみを使用できます。つまり、リンクテーブルを介した関連付けである場合、XPath 述語でリンクテーブルのフィールドを使用することはできません。 関連するデータセットでは、関連するレコードが指定された制約に準拠していない場合、検証時に指定された重大度の検証メッセージが追加され、エンドユーザーに表示されます。 | いいえ |
validation |
検証メッセージは、エレメント validation を使用して、エレメント minOccurs、 maxOccurs、および constraint の下で定義できます。検証メッセージの重大度は、エレメント severity を使用して指定されます。考えられる重大度は、 error、 warning、 info です。 重大度が指定されていない場合、デフォルトでは、重大度 error が使用されます。 ローカライズされた検証メッセージは、エレメント message を使用して指定できます。このメッセージは、関連付けがこの制約に準拠していない場合、検証時にエンドユーザーに表示されます。ローカライズされた各メッセージバリアントは、 xml:lang 属性にロケールを持つネストされたメッセージエレメントで定義されます。サポートされていないロケールのデフォルトメッセージを指定するには、 xml:lang 属性のないメッセージエレメントを定義します。 |
いいえ |
データサービスの統合
データサービスの
選択操作で、関連付けられたオブジェクトを非表示にする必要があるかどうかを定義できます。このために、 xs:annotation/xs:appinfo の下のプロパティ osd:defaultView/hiddenInDataServices を関連付けに設定できます。プロパティを「true」に設定すると、データサービスの選択操作で関連するオブジェクトが非表示になります。このプロパティが定義されていない場合、デフォルトでは、関連付けられたオブジェクトがデータサービスの選択操作に表示されます。
以下も参照してください。:
例
たとえば、以前に定義された製品カタログデータモデルは、製品がカタログに属することを指定します (「Products」テーブルの外部キーによって明示的に定義されます)。「Catalogs」テーブルに外部キーの逆である次の関連付けが含まれていない限り、逆の関係 (カタログに特定の製品がある) は XML スキーマで簡単に表現できません。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
リンクテーブルを介した関連付けの場合、前の例を検討して、いくつかの更新を行うことができます。たとえば、「Products」テーブルの外部キーが削除され、製品とカタログの関係が、2 つの外部キーで構成される主キーを持つリンクテーブル (「Catalogs\_Products」という名前) によって再定義されます。 「Products」テーブル (「productRef」という名前) と 「Catalogs」テーブル (「catalogRef」という名前) の別のテーブル。次の例は、この新しい関係からリンクテーブルを介して関連付けを定義する方法を示しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<linkTable>
<table>/root/Catalogs_Products</table>
<fieldToSource>./catalogRef</fieldToSource>
<fieldToTarget>./productRef</fieldToTarget>
</linkTable>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
次の例は、別のデータセットの外部キーを参照する関連付けを示しています。この例では、「Products」テーブルと「Catalogs」テーブルは同じデータセットにありません。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<schemaLocation>urn:ebx:module:aModuleName:/WEB-INF/ebx/schema/products.xsd</schemaLocation>
<dataSet>Products</dataSet>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
次の例では、「Technology」タイプの製品のみを関連付ける XPath フィルターを定義しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
<filter>
<predicate>./productType = 'Technology'</predicate>
<checkOnAssociatedRecordCreation>
<message>A default message</message>
<message xml:lang="en-US">A localized message</message>
<message xml:lang="fr-FR">Un message localisé</message>
</checkOnAssociatedRecordCreation>
</filter>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
次の例では、カタログに必要な製品の最小数を指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
<minOccurs>
<value>1</value>
<validation>
<severity>warning</severity>
<message xml:lang="en-US">One product should at least be associated to this catalog.</message>
<message xml:lang="fr-FR">Un produit doit au moins être associé à ce catalogue.</message>
</validation>
</minOccurs>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
次の例では、カタログに最大 10 個の製品を含める必要があることを指定しています。
<xs:element name="products" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:association>
<tableRefInverse>
<fieldToSource>/root/Products/catalog_ref</fieldToSource>
</tableRefInverse>
<maxOccurs>
<value>10</value>
<validation>
<severity>warning</severity>
<message xml:lang="en-US">Too much products for this catalog.</message>
<message xml:lang="fr-FR">Ce catalogue a trop de produits.</message>
</validation>
</maxOccurs>
</osd:association>
</xs:appinfo>
</xs:annotation>
</xs:element>
リンクされたフィールド
概要
リンクされたフィールドは、メインテーブルのフィールドを既存の関係上の別のテーブルのいくつかのフィールドと集約することにより、マルチテーブルビューをシミュレートする機能を提供します。これにより、関係を使用して他のレコードから参照されるレコードの一部のフィールドをモデル駆動型で簡単に統合できます。
以下も参照してください。:
次の関係を横断的に対応 (トラバース) できます。
-
**重要:**これらの関係は「単一値の関係」である必要があります。つまり、関係を定義するテーブルのレコードは、関係のターゲットテーブル内の1つのレコードのみを参照する必要があります。詳細
-
外部キーフィールドで maxOccurs が 1 に等しいと定義されている場合、外部キーは単一値の関係と見なされます。
-
参照される外部キーフィールドがターゲットテーブルの一意の主キーフィールドである場合、またはこの外部キーフィールドに一意性制約が定義されている場合、外部キーによる関連付けは単一値の関係と見なされます。
宣言
minOccurs = 0 および maxOccurs = 0 のエレメントであるリンクフィールドは、次のアノテーションを追加することで宣言されます。
<xs:element name="catalog_ref_label" minOccurs="0" maxOccurs="0" type="xs:string">
<xs:annotation>
<xs:appinfo>
<osd:function linkedField="../catalog_ref/catalogLabel"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
エレメント osd:function で定義された属性 linkedField は、コンテナテーブルの単一値の関係を参照するステップと、関係のターゲットテーブルのフィールドへのステップで構成されるパスを定義します。
重要
-
パスが絶対パス (「/」で始まる) の場合、コンテナテーブルノードから解決されます。
-
パスが相対パスの場合、現在のフィールドから解決されます。以前に定義された製品カタログデータモデルのコンテキストでは、フィールド catalog\_ref\_label が 製品テーブルに追加されます。最初のステップ catalog\_ref は、製品がカタログに属していることを示す外部キーを参照します。最後のステップ catalogLabel は、参照されたカタログのラベルを参照します。このフィールドは、外部キー制約のターゲットテーブルである Catalog テーブルに属しています。制限事項
-
現在、リンクされたフィールドでは、単一値の関係の 1 つのレベルのみをターゲットにできます。結果は次のようになります。
-
単一値の関係は、別のリンクされたフィールドで定義することはできません。
-
リンクされたフィールドは、別のリンクされたフィールドをターゲットにすることはできません。
-
-
リンクされたフィールドは、プロパティ minOccurs および maxOccurs (=0) を定義する必要があります。
-
リンクされたフィールドは、ターゲットフィールドの1つと互換性のあるデータ型を定義する必要があります。
-
リンクされたフィールドをコンテナテーブルの主キーの一部にすることはできません。
-
リンクされたフィールドは、端末フィールドをターゲットにする必要があります。
-
リンクされたフィールドは、集約リストまたは集約リストの下のフィールドをターゲットにすることはできません。
-
リンクされたフィールドは、リンクされたフィールドでもある単一値の関係を参照することはできません。
-
ローカライズされたラベル (データモデルで xs:enumeration を定義) を使用して静的列挙型であるフィールドをターゲットにすることには、いくつかの制限があります。つまり、ターゲットフィールドの列挙ラベルではなく、リンクされたフィールドの生の値のみが表示および検索に使用できます。リンクされたフィールドとそのターゲットの両方に同じ静的列挙を定義して、表示と検索のラベル付け機能を利用することもできます。
-
リンクされたフィールドとそのターゲットが両方の外部キー制約を定義する場合、これらの制約はまったく同じ表示パターンを定義する必要があります (データモデルのプロパティ osd:tableRef/display/pattern)。そうしないと、リンクされたフィールドでローカルに定義された表示パターンは、検索操作中に無視されます。つまり、検索操作は、対象の外部キーフィールドで定義された表示パターンでのみ機能します。