複雑なデータ型の使用

最終更新日: 2010年4月16日

適用対象: SharePoint Server 2010

この記事の内容
BCS の複合型の概要
文字列書式を使用する、BCS 外部コンテンツ タイプ内での複雑な書式
SharePoint と互換性のあるサービス層
.NET Connectivity Assembly
ユーザー設定フィールド型を使用して、外部リスト タイプのシステムを拡張する
SharePoint リスト フォームをカスタマイズする
InfoPath フォームをカスタマイズする

Microsoft Business Connectivity Services (BCS) を使用すると、外部リスト内の複合データ型をさまざまな方法で表示できます。複合型とは、他のサブタイプを含むデータ型です。たとえば、郵便番号、都道府県、市町村、番地の各フィールドで構成される住所があります。複合型は、外部コンテンツ タイプのスキーマで既定でサポートされますが、複合型を Microsoft SharePoint 2010 および Microsoft Office 2010 のプレゼンテーション層に表示できません。この理由で、この複合型の表示を可能にするには、追加の手順を実行する必要があります。このトピックでは、Business Connectivity Services の複合型の概要、およびその複合型をユーザー インターフェイスに表示するためのさまざまなソリューションについて説明します。

BCS の複合型の概要

外部システムのデータは、複雑なメッセージ構造の詳細な Web サービスを使用して頻繁に公開されます。外部コンテンツ タイプのスキーマでは、ほぼすべての複雑なパラメーター データ構造がサポートされますが、複合型は SharePoint および Microsoft Office のプレゼンテーション テクノロジとの互換性が確保されない可能性があります。

外部コンテンツ タイプでは、ステレオタイプ化された操作が定義されますが、その操作の多くは、技術的に複雑なパラメーター構造を必要とします。特定のファインダー (SharePoint Designer では項目の読み取りとも呼ばれる) は、外部コンテンツ タイプの一連のフィールドを含む 1 つの複合型 ("CustomerID"、"Name"、および "PhoneNumber" フィールドを含む "Customer" 型など) を返す必要があります。この構造の子要素は外部リストの列にマップします。ほとんどの外部コンテンツ タイプには、特定のファインダーと同じ型のコレクションを返すファインダー メソッドが含まれます。問題が発生するのは、いずれかのフィールドに子要素がある場合や、フィールドの型がプレゼンテーション テクノロジでサポートされていない場合です。たとえば、"CustomerAddress" フィールドを顧客構造に追加する、つまり、"Street"、"City"、"State"、および "PostalCode" を定義する子要素が含まれる場合です。

SharePoint で外部データを表示するための主なユーザー インターフェイス コンポーネントの 1 つは、外部リストです。設計上、外部リストは、データを行ベースでフラットに表現します。開発者が追加の作業を行わない限り、SharePoint リスト タイプのシステムでサポートされない複合型と単純型は、リストビューから省略されます。

Business Connectivity Services の外部コンテンツ タイプ スキーマでは、Microsoft .NET Framework 形式の文字列 (このトピックの以降の「文字列書式を使用する、BCS 外部コンテンツ タイプ内での複雑な書式」を参照) を使用して複合型を単純な文字列に変換できる場合、読み取り専用のシナリオで複雑な書式の概念がサポートされます。読み取り専用のサポートが十分でない場合や、このメソッドで複合型を変換できない場合、SharePoint 2010 では、外部リストおよびリスト アイテム フォームでレンダリング動作および編集動作を制御するユーザー設定フィールド型を作成する機能が提供されます。

フォームは、外部リスト アイテム用の主なユーザー インターフェイスです。複合型を使用すると、フォームの生成が困難になります。複合型は、最小レベルの視覚効果を維持しながら、自動的に設計することが困難なためです。外部リストは、SharePoint リスト フォーム (ASP.NET に基づく) または Microsoft InfoPath 2010 フォームに関連付けることができます。このトピックの「SharePoint リスト フォームをカスタマイズする」および「InfoPath フォームをカスタマイズする」セクションで、これらのフォームで複合型を表示する方法について説明します。

文字列書式を使用する、BCS 外部コンテンツ タイプ内での複雑な書式

複合型が外部リストで読み取り専用になっており、複合型を文字列に変換できるシナリオでは、Business Connectivity Services では、型記述子での書式文字列の概念がサポートされます。これにより、複合型を文字列として外部リストまたはアイテム フォームにレンダリングできます、次のコードは、文字列書式を使用して、前述の Costomer 複合型を変換する例です。

<TypeDescriptor TypeName="CustomerAddress" IsCollection="false" Name="CustomerAddresses" > 
   <TypeDescriptors> 
      <TypeDescriptor TypeName=" CustomerAddress " Name="CustomerAddress" > 
         <Properties> 
            <Property Name="ComplexFormatting" Type="System.String" /> 
            <Property Name="FormatString" Type="System.String">{0}, {1}, {2} {3}</Property> 
         </Properties> 
         <TypeDescriptors> 
            <TypeDescriptor TypeName="System.String" Name="Street"/> 
            <TypeDescriptor TypeName="System.String" Name="City" /> 
            <TypeDescriptor TypeName="System.String" Name="StateProvince" /> 
            <TypeDescriptor TypeName="System.String" Name="PostalCode" /> 
         </TypeDescriptors> 
     </TypeDescriptor> 
   </TypeDescriptors> 
</TypeDescriptor>

SharePoint と互換性のあるサービス層

アーキテクチャの点で、複合データ型を操作する最適な方法は、プレゼンテーション層の制限の範囲内に存在する、フラットなパラメーター構造を持つサービス層を作成することです。前のセクションの例を続けると、Web サービスが、顧客を表すすべてのフィールドを同じレベルで返す場合、SharePoint は、顧客アイテムを、変更なしで、レンダリングおよび編集できます。

ただし、この方法およびこの方法におけるカスタム コードの書き込み、ホスト、維持にかかる負荷と、複合サービスを使用してアプリケーションごとにプレゼンテーション層で複合型に対処する負荷を比較検討する必要があります。多くの企業展開で、特に、多くのアプリケーションで幅広く使用されている顧客や製品などのビジネス エンティティに対して、サービス層は既に存在します。SharePoint 2010 で使用するメソッドを追加するためのコストは、各アプリケーションで型の複雑性に対処するためのコストよりも少なくなる場合があります。

.NET Connectivity Assembly

サービス層の追加や拡張ができない場合、SharePoint 2010 では、外部コンテンツ タイプ操作の背後のビジネス ロジックをカプセル化するクラスと共に外部コンテンツ タイプの定義をパッケージ化する方法が提供されます。Visual Studio 2010 内で Business Data Connectivity デザイナーを使用して、外部コンテンツ タイプのフラット化されたインターフェイスを定義し、ツールで生成されるコード スタブで必要なあらゆる集約と型変換ロジックを実装できます。実装が完了すると、SharePoint 2010 にインポートできる、外部コンテンツ タイプの定義とアセンブリを含むソリューション パッケージ (.wsp file) を、Visual Studio を使用して生成できます。

注意

この種類のパッケージをインポートするには、ファーム管理者権限が必要です。外部コンテンツ タイプの背後のコードが完全信頼モードで実行されるためです。.NET コネクタ アセンブリの作成方法については、Boris Scholl の「Using the SharePoint Business Data Connectivity Designer in Visual Studio 2010 (英語)」を参照してください。

バックエンド サービスの動作を必ずしも変更できるとは限らないため、SharePoint 2010 では、プレゼンテーション層を拡張して複合型に対処するためのいくつかの方法も提供されます。

ユーザー設定フィールド型を使用して、外部リスト タイプのシステムを拡張する

SharePoint 2010 リスト インフラストラクチャでは、一連の汎用データ型がサポートされます。これらのデータ型で、ほとんどの一般的なデータ入力シナリオに十分に対処できます。住所など、複合型のビジネス データ アイテムを表すために、SharePoint 2010 では、SharePoint 上のすべてのサイトにわたって使用可能にできるユーザー設定フィールド型を定義する方法が提供されます。ユーザー設定フィールド型の中心にあるのは、ユーザー設定フィールド型の定義ファイルです。この定義ファイルは、リストおよびアイテム ビュー上でフィールドをどのようにレンダリングするかを定義します。また、定義ファイルは、あらゆる可変プロパティ、およびフィールド型を実装するアセンブリへの参照も定義します。フィールド クラスは SPField から継承され、特定のフィールドをユーザー設定フィールド型に基づいて表します。フィールド クラスは、ユーザー設定フィールドに基づいて列の機能 (並べ替えなど) を定義し、リストおよびコンテンツ データベース内のセルの動作を定義し、カスタム検証ロジックを実装できます。

ほとんどの複合的なユーザー設定フィールド型では、レンダリング コントロール クラス、レンダリング テンプレート、またはユーザー設定値クラスも必要です。ユーザー設定フィールド型の詳細については、「ユーザー設定フィールド型」および「[ウォークスルー] ユーザー設定フィールド型を作成する」を参照してください。

定義したユーザー設定の型は、次の例のように、外部コンテンツ タイプの定義内で型記述子を使用して参照できます。

<TypeDescriptor TypeName="Customer.Address” Name="CustomerAddress" DefaultDisplayName="Customer Address"> 
   <Properties> 
       <Property Name="SPCustomFieldType" Type="Customer.Address">Customer Address</Property> 
   </Properties> 
</TypeDescriptor> 

型記述子のこの定義を使用すると、外部コンテンツ タイプに基づく外部リストは、その型記述子 "CustomerAddress" がユーザー設定フィールド型を参照していることを確認し、それを適切にレンダリングできます。

SharePoint リスト フォームをカスタマイズする

新しい外部リストを作成すると、SharePoint 2010 は、リスト アイテムの作成、編集、表示を可能にする各フォームを自動的に生成します。SharePoint フォームは, .NET Framework コントロールに基づいており、その拡張性機能を共有します。この拡張性機能を使用して、複合型を適切にレンダリングできます。このトピックで説明されているユーザー設定フィールド型は、複合型で最も頻繁に使用される拡張性メカニズムです。単純なケースでは、ネイティブの SharePoint Foundation フィールドを拡張できる場合があります。リスト フォームのカスタマイズ方法については、「リスト フォーム」を参照してください。

InfoPath フォームをカスタマイズする

SharePoint 2010 では、InfoPath フォームを使用して、リスト アイテムの表示と編集を行うこともできます。InfoPath は、強力な検証と条件付き書式を備える魅力的なフォームを開発者以外のユーザーが簡単に作成できる機能を提供します。InfoPath フォームが標準のリスト フォームよりも優れているもう 1 つの点は、ブラウザー内またはスタンドアロン フォームとして動作する機能、あるいはリッチ クライアントで動作する機能です。InfoPath フォームは、Microsoft SharePoint Workspace 2010 で、外部リスト データをオフラインで操作するために使用するフォーム テクノロジです。SharePoint 2010 では、InfoPath Designer で、外部リスト用の InfoPath フォームの作成を開始できません。代わりに、外部リストまたは外部コンテンツ タイプのデザイナーから InfoPath フォームを SharePoint Designer に作成できます。生成したフォームは InfoPath Designer でカスタマイズできます。

複合型を含む外部コンテンツ タイプの場合、視覚的に優れたレイアウトを既定で生成することは困難です。したがって、フォーム ジェネレーターでは、空のフォームが作成されます。ただし、InfoPath では、デザイナー内で複合型がサポートされません。したがって、フォームを生成した後は、そのフォームを SharePoint Designer の外部リスト デザイナーから InfoPath Designer で開くことができます。ユーザー設定の型はフィールド リストで使用できます。図 1 を参照してください。手動で配置できます。

図 1. InfoPath Designer のフィールド リスト

InfoPath Designer のフィールド リスト

カスタマイズが完了すると、[ファイル] メニューの [クイック発行] ボタンを使用して、更新したフォームを外部リストに発行する必要があります。

図 2. InfoPath Designer の [クイック発行] ボタン

InfoPath Designer の [クイック発行] ボタン