Cloud Software Group, Inc. EBX®
ドキュメント > 開発者ガイド > データモデル
ナビゲーションモードドキュメント > 開発者ガイド > データモデル

テーブルと関係

テーブル

概要

TIBCO EBX® は、大量のレコードの処理や主キーによる識別など、リレーショナルデータベーステーブルの機能をサポートしています。

テーブルには、集約リストでは提供されない多くの利点があります。リレーショナル機能以外に、テーブルが提供するいくつかの機能は次のとおりです。

宣言

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

レコードのエンドユーザー表示を定義します。複数のバリアントを指定できます。

  • ローカライズされていない静的な式は、defaultLabel エレメントを使用して定義されます。次に例を示します。

    <defaultLabel>Product: ${./productCode}</defaultLabel>

  • ローカライズされた静的な式は、属性 xml:lang を持つ defaultLabel エレメントを使用して指定されます。次に例を示します。

    <defaultLabel xml:lang="fr-FR">Produit : ${./productCode}</defaultLabel>

    <defaultLabel xml:lang="en-US">Product: ${./productCode}</defaultLabel>

  • インターフェイス UILabelRenderer および/またはインターフェイス UILabelRendererForHierarchy を実装する JavaBean。JavaBean は、属性 osd:class を使用して指定されます。次に例を示します。

    <defaultLabel osd:class="com.wombat.MyLabel"></defaultLabel>

注意

エンドユーザーの表示は並べ替え可能である必要があるため、静的式では並べ替え可能な検索戦略を使用するフィールドのみが許可されます。

注意:ユーザーインターフェイスを表示するときのタグの優先度は次のとおりです。

  1. JavaBean を使用した defaultLabel タグ (ただし、同じタイプの複数のレンダラーを定義することは許可されていません)。

  2. xml:lang 属性を使用した静的ローカライズ式の defaultLabel タグ。

  3. ローカライズされていない静的な式を持つ 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>*

condition ::= [root:yes | root:no]

「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® は、テーブルの構造にレコードメタデータを自動的に追加します。メタデータノードを使用すると、レコードに関する次の情報を取得できます。

レコードメタデータの使用例としては、特定の日付以降に特定のユーザーによって作成されたすべてのレコードを表示または取得することがあります。次のことが可能です。

注意

メタデータに関しては、次の点に注意してください。

  • メタデータは、予約名 ebx-metadata を持つグループの下で定義されます。結果として、テーブルのルートの直下に同じ名前のグループが含まれている場合、メタデータはテーブルで使用できません。テーブルがこの予約名でグループを定義している場合、データモデルのコンパイル時に警告が表示されます。

  • メタデータは読み取り専用です。

  • テーブルのコンテンツを XML または CSV ファイルにエクスポートする場合、メタデータは含まれません。

  • デフォルトでは、API を使用してデータモデルをインストロスペクトする場合、メタデータフィールドは含まれません。専用の API を使用して明示的に含めることができます。

外部キー

宣言

テーブルへの参照は、拡張ファセット osd:tableRef を使用して定義されます。

osd:tableRef 宣言を保持するノードは、タイプ xs:string にする必要があります。

インスタンス化時に、ノードの任意の値は、主キー構文を使用してターゲットテーブル内のレコードを識別します。

この拡張ファセットは、値がターゲットテーブルのレコードを参照する列挙としても解釈されます。

エレメント

説明

必須

tablePath

ターゲットテーブルを指定する XPath 式。

はい

container

ターゲットテーブルを含むデータセットの参照。

データスペースエレメントが定義されている場合のみ。それ以外の場合、デフォルトは現在のデータセットです。

branch

コンテナデータセットを含むデータスペースの参照。

いいえ。デフォルトは現在のデータスペースまたはスナップショットです。

display

現在のレコードで選択された外部キーと可能なキーのソートされたリストを表示するためのカスタム表示。パターンベースの式、またはニーズが非常に具体的な場合は JavaBean の 2 つのバリアントを指定できます。

  • 静的な式は、display エレメントと pattern エレメントを使用して指定されます。これらの静的な式は、pattern エレメントの追加属性 xml:lang を使用してローカライズできます。次に例を示します。

    <display>

    <pattern>Product : ${./productCode}</pattern>

    <pattern xml:lang="fr-FR">Produit : ${./productCode}</pattern>

    <pattern xml:lang="en-US">Product: ${./productCode}</pattern>

    </display>

    注意

    表示パターンはソート可能である必要があるため、ソート可能な検索戦略を使用するフィールドのみが許可されます。

  • インターフェイス TableRefDisplay を実装する JavaBean。これは、属性 osd:class を使用して指定されます。次に例を示します。

    <display osd:class="com.wombat.MyLabel"></display>

    注意

    JavaBean が定義されている場合、またはターゲットテーブルがレコードのプログラムラベルを定義している場合、ユーザーインターフェイスでのクイック検索およびソート操作では、レコードのラベルの代わりに生の値が使用されます。これらの操作でレコードのラベルを使用するには、静的式を定義する必要があります。

同じ外部キーエレメントで両方のバリアントを定義することはできません。

注意:レコードラベルを表示する場合、関連するデータセットで定義されたアクセス権限は適用されません。
アクセス権限の制限のために通常非表示になっているフィールドは、ラベルに表示されます。

いいえ。display プロパティが指定されていない場合、テーブルのレコードレンダリング が使用されます。

filter

ターゲットテーブルのレコードをフィルタリングする追加の制約を指定します。2 種類のフィルターを使用できます。

  • XPath フィルターは、ターゲットテーブルコンテキストの XPath 述語です。predicate エレメントを使用して指定されます。次に例を示します。

    <filter><predicate>type = ${../refType}</predicate></filter>

    ローカライズされた検証メッセージは、エレメント validationMessage を使用して指定できます。このメッセージは、レコードがフィルターによって受け入れられない場合、検証時にエンドユーザーに表示されます。

    特定の重大度レベルは、ネストされた severity エレメントで定義できます。デフォルトの重大度は「error」です。

    ローカライズされた各メッセージバリアントは、ネストされた message エレメントで定義され、ロケールは xml:lang 属性にあります。サポートされていないロケールのデフォルトメッセージを指定するには、xml:lang 属性のない message エレメントを定義します。

    ユーザーインターフェイスでは、XPath フィルターを適用して、外部キーフィールドの値に従ってテーブルをフィルター処理します。つまり、外部キーフィールドがデータモデルで XPath フィルターを指定している場合、それはフィルターペインで再利用され、フィルターペインに表示される関連するコンボボックスの値のセットを制限します。ただし、フィルターペインで使用される述語は、述語の非コンテキスト部分のみを考慮します。

  • プログラムフィルターは、インターフェイス TableRefFilter を実装する JavaBean です。これは、属性 osd:class を使用して指定されます。次に例を示します。

    <filter osd:class="com.wombat.MyFilter"></filter>

    プログラムフィルターのセットアップ中に、追加の検証メッセージを指定できます。

    ユーザーインターフェイスでは、プログラムフィルターは、フィルターペインに表示される関連するコンボボックスの値のセットをフィルター処理するために適用されません。ただし、ユーザーインターフェイスのフィルターペインで使用される追加の XPath 述語を指定することは可能です。この XPath 述語は、メソッド TableRefFilterContext.setFilterForSearch を使用したプログラムフィルターのセットアップ中に指定されます。

注意

属性 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>

関連付け

概要

関連付けは、データモデルの既存の関係を抽象化し、ユーザーインターフェイスとデータサービスで関連付けされたオブジェクトをモデル主導で簡単に統合できるようにします。

いくつかのタイプの関連付けがサポートされています。

関連付けの場合、次のことも可能です。

宣言

関連付けは、xs:annotation/appInfo の下の XML スキーマエレメント osd:association を使用してデータモデルで定義されます。

制限事項

注意

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"/>

いいえ

別のデータセットを参照することができます。そのためには、関連付けのタイプに応じて、エレメント tableRefInverselinkTable、または xpathLink のいずれかで次のプロパティを定義する必要があります。

エレメント

説明

必須

schemaLocation

関連付けで使用されるフィールドを含むデータモデルを定義します。

データモデルは、埋め込みデータモデルとモジュールにパッケージ化されたデータモデルを参照できる特定の URN を使用して定義されます。

EBX® でサポートされている特定の URN の詳細については、SchemaLocation を参照してください。

はい

dataSet

関連付けで使用されるデータセットを定義します。このデータセットは、エレメント schemaLocation で指定されたデータモデルを使用する必要があります。

はい

dataSpace

関連付けで使用されるデータセットを含むデータスペースを定義します。

いいえ

重要

ユーザーインターフェイスの統合

xs:annotation/appinfo の下のエレメント osd:defaultView/displayMode を使用して、関連付けられたオブジェクトをフォームにレンダリングする方法を定義できます。

可能な値は次のとおりです。

このプロパティが定義されていない場合、デフォルトでは、関連付けられたレコードは 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>

ユーザーインターフェイスでのアクション

ユーザーインターフェイスでは、次のアクションを実行できます。

注意

関連付け切断のアクションは、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 を使用して、エレメント minOccursmaxOccurs、および constraint の下で定義できます。検証メッセージの重大度は、エレメント severity を使用して指定されます。考えられる重大度は、errorwarninginfo です。

重大度が指定されていない場合、デフォルトでは、重大度 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 つの外部キー (「Products」テーブル (「productRef」という名前) と 「Catalogs」テーブル (「catalogRef」という名前) を参照) で構成される主キーを持つリンクテーブル (「Catalogs_Products」という名前) によって再定義します。次の例は、この新しい関係からリンクテーブルを介して関連付けを定義する方法を示しています。

<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 つのレコードのみを参照する必要があります。

詳細

注意

リンクされたフィールドは、ターゲットフィールドからいくつかのプロパティ (外部キー制約、列挙、値のラベル付け、検索戦略、検索モード、フォーマット設定) を継承します。

宣言

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_labelProducts テーブルに追加されます。最初のステップ catalog_ref は、製品がカタログに属していることを示す外部キーを参照します。最後のステップ catalogLabel は、参照されたカタログのラベルを参照します。このフィールドは、外部キー制約のターゲットテーブルである Catalog テーブルに属しています。

制限事項

ドキュメント > 開発者ガイド > データモデル