SharePoint ワークフローで Business Connectivity Services を使用する

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

適用対象: SharePoint Server 2010

Microsoft Business Connectivity Services (BCS) では、以下の 2 つの方法を使用して、SharePoint ワークフロー内の外部データにアクセスできます。

  • Microsoft SharePoint Designer 2010 を使用して作成されるコードなしのワークフロー。外部リストと対話します。

  • Microsoft Visual Studio で作成されるコードを含むワークフロー (コードありのワークフロー)。外部リスト、あるいは Microsoft SharePoint 2010 または Business Connectivity Services オブジェクト モデルと対話します。

ユーザー独自のシナリオのワークフローを構築する前に、以下の点を検討します。

  • ワークフローは、外部リストに関連付けることができない。 SharePoint Server 2010 では、ワークフローは外部リストと連携しますが、ワークリストを外部リストに直接関連付けることはできません。サイト ワークフローを作成するか、リスト ワークフローをドキュメント ライブラリなどの SharePoint リストに含めて、そのワーク フローに対して外部リストから読み取りまたは更新を行うようにできます。また、SharePoint Designer で、タスク処理の宛先として外部リスト アイテムを使用することもできます。ただし、タスクへのリンクに、外部リスト アイテムのタイトルは表示されません。

  • Business Data Connectivity (BDC) service にアクセスするワークフローは、代理ステップ下であっても、サービス アカウントとして常に実行される。 ワークフローは、サービス アカウントとして常に実行されます。また、ワークフローは、Secure Store Service または RevertToSelf (セキュリティ上の理由により、既定では無効にされている。詳細については、「Business Connectivity Services Security Overview」を参照) を使用する場合にのみサポートされます。この制限によって、SharePoint 2010 を、悪意のある BDC モデルおよびコードから保護できます。バックエンド システムへのアクセスは、常に、1 つのアカウント経由で行われるため、変更を行ったユーザーを追跡できません。ワークフローで SPUser 名を外部リストの列に渡すか、BDC API を使用するカスタム アクティビティに渡すことができます。このシナリオは、参考のみの目的で存在します。このシナリオをセキュリティ機能として使用しないでください。

SharePoint Designer 2010 を使用して外部リストを更新するように、SharePoint リストにコードなしのワークフローを定義する

SharePoint Designer 2010 では、コードを使用しないワークフロー (コードなしのワークフロー) を作成し、それを任意の SharePoint リストまたはサイトに接続できます。SharePoint の [リスト アイテムを作成する]、[リスト アイテムを更新する]、および [リスト アイテムを削除する] ワークフロー アクティビティは、外部リストをサポートするように拡張されます。また、[ワークフローの変数を設定する] などの他のアクティビティを外部リストと共に使用すると、リストまたはアイテムを SharePoint リストから選択できます。リスト ワークフローは、リスト アイテムが追加または変更されたときに自動的に開始できます。また、リスト ワークフローに条件付きロジックを含めて、関連付けられたアクションを実行できます。サイト ワークフローは開始のためのトリガーを必要としません。

SharePoint Designer 2010 を使用すると、外部リストのデータを読み書きするように、SharePoint リスト内のリスト アクティビティ ([リスト アイテムを作成する] や [リスト アイテムを更新する] など) を構成できます。たとえば、既定の SharePoint リスト内のリストアイテムまたはドキュメント ライブラリ内のドキュメントが変更されるたびに、外部リスト内のリスト アイテムを更新するワークフローを作成できます。次の手順に従うと、顧客の連絡先ドキュメント ライブラリ内の顧客に対して新しい連絡先情報ドキュメントが追加されたときに、顧客外部リスト内の Address フィールドを更新する簡単なワークフローを作成できます。

ドキュメント ライブラリに新しいアイテムが作成されたときに外部リストを自動的に更新するワークフローを作成するには

  1. SharePoint Designer 2010 で、顧客の連絡先ドキュメント ライブラリを参照します。

  2. Server リボンで、[新しいリスト ワークフロー] をクリックします。

  3. ワークフローの名前と説明を指定し、[次へ] をクリックします。SharePoint Designer 2010 で、ワークフロー デザイナーが開きます。

  4. 図 1 のように、[リスト アイテムを更新する] アクションを挿入します。

    図 1. [リスト アイテムを更新する] アクションの挿入

    リスト アイテムの更新アクションの挿入

  5. [リスト] リンクをクリックし、[リスト] フィールド内の顧客外部リストを参照して選択します。[追加] ボタンをクリックして、外部リストで更新する必要のあるフィールドを追加します。

    図 2. 外部リストで更新するフィールドの追加

    外部リストで更新するフィールドの追加

  6. [値の割り当て] ダイアログ ボックスで、更新する外部リストのアドレス フィールドと、ドキュメント ライブラリ内で照合するアドレス フィールドを選択して、[OK] をクリックします。

    注意

    [値の割り当て] ダイアログ ボックスには、SpecificFinder の戻り値パラメーター内のすべてのフィールドが表示されます。Creator または Updater でフィールドのサブセットのみが必要とされる場合、それらのフィールドのみを、このダイアログ ボックスで選択します。

    図 3. [値の割り当て] ダイアログ ボックス

    [値の割り当て] ダイアログ ボックス

  7. 更新元リストと更新先リスト内の照合フィールドを指定して、SharePoint が、ドキュメント ライブラリと外部リスト内の照合アイテムを識別できるようにします。これを行うには、外部リストから CustomerID フィールドを選択し、ドキュメント ライブラリから Current Item: Client Id を選択します (これらのフィールドを使用して 2 つのリストの照合アイテムを識別できると仮定する)。[OK] をクリックします。

    図 4. 更新元リストと更新先リスト内の照合フィールドを指定する

    一致するフィールドの指定

    これで、図 5 のような、外部リストを更新する簡単なワークフローが作成されました。

    図 5. 外部リストを更新する簡単なワークフロー

    単純なワークフロー

  8. 顧客の連絡先ドキュメント ライブラリ内でアイテムが作成されたときに、このワークフローを自動的に開始するには、リボンの [ワークフロー設定] ボタンをクリックし、図 6 のように、[アイテムが作成されたときにワークフローを自動的に開始する] をクリックします。

    図 6. ワークフローの開始オプション

    ワークフロー開始オプション

これで、ドキュメント ライブラリに新しいアイテムが作成されたときに外部リストを自動的に更新するワークフローが正常に作成されました。

ワークフロー アクティビティ、使用法、および一般的な誤りに関するヒント

組み込みの SharePoint ワークフロー アクティビティは、以下のシナリオで使用します。

  • 外部リスト内の少数の列を読み取って、後でそれらをワークフローで使用する必要があります。

    同じ外部リスト アイテムから複数の値を読み取る場合、アイテムはキャッシュされません。このため、アクティビティでは、最初に Read List メソッド (Finder) が呼び出され、次に、読み取る列ごとにアイテムの読み取りメソッド (SpecificFinder) が呼び出されます。したがって、2,000 個のアイテムのリストで 10 個のプロパティを読み取る場合、BDC の呼び出しが 20 回発生し、20,010 個のアイテムが外部システムから取得されます。

  • 外部リストの 1 つのアイテムに対して作成、更新、または削除を行う必要があります。

以下の点に注意することが重要です。

  • 値を持たないアイテムから値を読み取ると、null が返されます。SharePoint 2010 では、これは empty と同じですが、外部リストでは、null と "見つからない" は異なります。

  • 外部リストにアイテムを作成した後で、同じワークフローからそのアイテムを変更する場合、[リスト アイテムを作成する] から返される BDC 識別子を使用する必要があります。

  • Business Connectivity Services では、既定で、すべての SpecificFinder フィールドが表示されます。したがって、Creator または Updator でフィールドのサブセットのみが必要とされる場合、SharePoint Designer 2010 で、ワークフロー ユーザー インターフェイス内の必要なフィールドのみを選択します。

  • BDC 識別子は、Creator からのみ取得されます。作成したばかりの外部アイテムを検索する場合、Creator から返された BDC 識別子を使用する必要があります。その他のフィールドを使用して、その外部アイテムを検索することはできません。また、更新したばかりの外部アイテムを検索する場合、BDC 識別子は使用できません。Updator は、この識別子を返さないためです。更新したばかりの外部アイテムを確認する唯一の方法は、別のフィールドを使用することです。

  • InfoPath フォームと共に使用するワークフローを作成する場合は、ワークフローの条件とアクションでフォーム テンプレートの正しいフィールドを使用できるように、発行処理中に、それらのフィールドが SharePoint の列として表示されていることを確認してください。

Visual Studio を使用して、コードベースのワークフローを作成する

Visual Studio を使用すると、外部リストまたは SharePoint 2010 オブジェクトモデルおよび Business Connectivity Services オブジェクト モデルを使用して外部データと対話する、コードありのワークフローを作成できます。また、カスタム ワークフロー アクティビティを作成することもできます。詳細については、SharePoint 2010 SDK の SharePoint ワークフローに関するトピックを参照してください。