【SharePoint と BizTalk の連携 (4)】 タスクリストなど (ドキュメントライブラリ以外のリスト) との連携


環境:
Microsoft Office SharePoint Server (MOSS) 2007 (または WSS 3.0)
BizTalk Server 2006 R2
Visual Studio 2005

SharePoint と BizTalk の連携

  1. 考え方と環境準備
  2. SharePoint からのドキュメントの受信
  3. SharePoint へのドキュメントの送信
  4. タスクリストなど (ドキュメントライブラリ以外のリスト) との連携

こんにちは。 

いままで、ドキュメントライブラリのドキュメントを使った連携の例をみてきましたが、今回は、タスクリストを例に、一般的なリスト (お知らせ、カスタムリスト、などなど) との連携をみていきます。

今回のシナリオは、「購買申請用の XML ファイル (外部システムが作成したファイル) がディレクトリに配置され、その内容がもし一定金額以上なら、SharePoint にタスク登録をおこなう」といったサンプルでみていきましょう。

今回も同じような設定箇所については省略して記載していますので、詳しい手順は、第 2 回 を参照してください。(あらかじめ宣言しておきますが、もうみなさん慣れてきたのではないかと思いますので、今回はかなりさぼって作成します、、、)

また入力用の XML ファイル (外部システムが作成するファイル) ですが、わざわざまたスキーマのデザインから考えるのは面倒ですので、あくまでもデモということで、第 2 回 で使用した InfoPath のフォームをそのまま使うことにします。ですので、第 2 回 の方法に従って、.xsd ファイルを取り出しておいてください。(このあとの手順をみていただくとわかりますが、XML のフォーマットとして InfoPath を使っているだけで、InfoPath のフォームライブラリはいっさい関係ありません、、、)

BizTalk Server プロジェクトの作成 

  1. いつものように、Visual Studio で [空のBizTalk Server プロジェクト] を新規作成します。

  2. スキーマ定義を作成していきます。
    受信用のスキーマ定義として、上記の .xsd ファイル (外部システムが定義したファイル) をプロジェクトに追加します。

  3. では、オーケストレーションの組み立てです。
    いつものようにオーケストレーションファイルを新規作成します。今回はちょっとさぼって、オーケストレーションの [トランザクションの種類] プロパティを [アトミック] としてしまいましょう。(待機処理が入った場合などに永続化などはいっさいおこなわれませんので、将来的な拡張などを考えると本来は望ましい設定ではないかもしれません。いろいろなバリエーションをご紹介したほうがいろいろと技をおぼえて頂けると思いますので、今回はこうしておきます、、、)

  4. 以下の受信用の送信用のメッセージ (Message) を作成します。
    送信メッセージ (下記の TaskMsg) はただの「タスク」でありドキュメントの中身は関係ありませんので、下記のように System.Xml.XmlDocument など一般的なスキーマ (どんなドキュメントでも入れ込めるスキーマ) としておくと良いでしょう。

    識別子 : OrderMsg
    スキーマ : <上記の .xsd のスキーマ定義>

    識別子 : TaskMsg
    スキーマ : System.Xml.XmlDocument

  5. いつものように受信をおこないます。
    オーケストレーション内に [受信] 図形と、受信用の [ポート] 図形をドラッグアンドドロップし、いつもの要領で [受信] 図形の [メッセージ] プロパティとして上記の「OrderMsg」を設定し、[受信] 図形と [受信] ポートを接続します。([アクティブ化] プロパティは忘れず true に設定しておきましょう)

  6. さて、一定金額以上という条件が入りますので、受信メッセージのスキーマの ProductCost 要素 (第 2 回 参照) を使って条件判断をおこなう必要があります。
    こうした場合の簡易的な手段として、「要素を昇格させる」 (property promotion) という方法がありますので、今回は今までと違ってこの方法を使用してみます。上記で挿入した .xsd を表示し、下図のようにルートのノード下の 「ProductCost」を右クリックして、[昇格] - [クイック昇格] を選択します。



    すると、.xsd の内容が変更され、PropertySchema.xsd という専用の「プロパティ」を定義したスキーマが新規作成されます。これにより、この「ProductCost」が BizTalk のプロジェクトの中から「プロパティ」として扱えるようになります。
    変更された .xsd ファイルは、いったん確実に保存をしてください。

    (なお、せっかく BizTalk を使用しているのですから、この方法は周辺システムの変更の影響も考えて使用しましょう。あくまでも簡易的手段であり、プロパティを管理できる範囲で使用し、むやみやたらと乱用しないようにしてください)

  7. さて、上記の「クイック昇格 (Quick Promote) されたプロパティ」を使って条件分岐を挿入します。
    第 3 回 同様、[決定] 図形を挿入し、「Rule_1」をダブルクリックして以下の通り条件を記述します。

    OrderMsg(TaskIntegrationSample.PropertySchema.ProductCost) > 3000



  8. さて、以降では、タスクの登録を実施していきますが、(後述する) 日付の処理などで SharePoint の Utitlity 関数を使用しますので、準備として、Microsoft.SharePoint.dll と関連する以下の dll をプロジェクトに参照追加しておいてください。

    Microsoft.SharePoint.dll
    System.Web.dll
    System.DirectoryServices.dll
    System.Drawing.dll

  9. では、TaskMsg を構築するための処理をおこなっていきます。
    第 3 回 のように、上図の [決定] 図形の「Rule_1」の中に、[メッセージの構築] 図形と、さらにその中に [メッセージの割り当て] 図形を挿入し、[メッセージの構築] 図形の [メッセージ] プロパティとして「TaskMsg」を選択しておきます。

  10. つぎに、[メッセージの割り当て] 図形をダブルクリックし、以下のコードを記述します。(さらっと書きましたが、ここが今日の ポイント!)

    // メッセージを作成 (今回は受信メッセージをそのままコピー)
    TaskMsg = OrderMsg;

    // 名前空間エイリアスを設定
    TaskMsg(WSS.ConfigNamespaceAliases) = "mytestns='http://schemas.microsoft.com/office/infopath/2003/myXSD/2008-05-03T05:06:39'";

    // タスクのプロパティを設定
    TaskMsg(WSS.ConfigPropertiesXml) = "<ConfigPropertiesXml>" +
    "<PropertyName1>Title</PropertyName1>" +
    "<PropertySource1>タスク - %XPATH=//mytestns:MyOrder/mytestns:ProductName%</PropertySource1>" +
    "<PropertyName2>Status</PropertyName2>" +
    "<PropertySource2>Not Started</PropertySource2>" +
    "<PropertyName3>Priority</PropertyName3>" +
    "<PropertySource3>(1) High</PropertySource3>" +
    "<PropertyName4>AssignedTo</PropertyName4>" +
    "<PropertySource4>9</PropertySource4>" +
    "<PropertyName5>PercentComplete</PropertyName5>" +
    "<PropertySource5>0.000000000000000</PropertySource5>" +
    "<PropertyName6>DueDate</PropertyName6>" +
    "<PropertySource6>" + Microsoft.SharePoint.Utilities.SPUtility.CreateISO8601DateTimeFromSystemDateTime(System.DateTime.Now.AddMonths(1)) + "</PropertySource6>" +
    "</ConfigPropertiesXml>";

    ここは今回のポイントのためさぼらずに記載してみました。このコードの意味をご説明します。

    まず、タスクなどのリストの場合には、第 3 回 でも最後のほうでご説明したように、メッセージの本体の中身ではなく「Windows SharePoint Services に統合されたプロパティ」というものを使用していきます。上記の長々と記載した WSS Config Property です (ただし、XLANGPart[0] が 0 バイトデータだとエラーになりますので、メッセージ本体にも何かドキュメントは設定しておきましょう)。

    さて、Property1 の Title をみていただくとわかりますが、このサンプルのように、メッセージ本体にそのタスクの元となる必要な情報 (この場合は、受信した XML そのもの) をいれておくと、このように XPath を使ってドキュメントに応じてタイトルなどを変更することができます。今回は、XML の中の ProductName 要素を使って 「タスク - <ProductName>」 というタイトルのタスクを作成しています。また、その際、XML のターゲット Namespace を指定する必要があるため、上記のコードの 2 行目で、そのネームスペースの設定をおこなっています。(こうした XPath による処理などがないなら、WSS.ConfigNamespaceAliases は設定する必要はありません。)

    また、DueDate では、現在の日付の 1 ヶ月後を設定しているのがわかります。

    AssignTo は、現実の開発では検討のポイントとなることでしょう。
    上記のように、SharePoint のユーザの ID を指定する必要があります。ですので、現実の構築では、企業システム全体 (BizTalk と接続するシステムすべて) を含めたユーザ管理全体という広い視野で、この取得方法について設計をおこなうことになるでしょう。(例えば、ユーザのチームサイトや SharePoint ユーザ ID なども含め Active Directory で集中管理をして BizTalk からも見えるようにしておく、など)

  11. さいごに、いつものように、[送信] 図形と送信用の [ポート] 図形をドラッグアンドドロップし、この構築された TaskMsg を論理ポートに送信するように設定しておきます。

     

これで完了しました。
いつものように、

  • アセンブリへの署名
  • アプリケーション名の設定

を実施して、ビルドと配置をおこなってください。(第 2 回 を参照)

物理ポートの設定

物理ポートの設定については、いままでとほとんど変わりません。
今回、受信が FILE のポートで、送信が Windows Sharepoint Services のポート (WSS Adapter を使用したポート) となります。

FILE のポート (受信ポート) は、今回は CSV などではなく XML そのままですので、受信パイプラインは「XMLReceive」となります。

Windows Sharepoint Services のポート (送信ポート) において、[ターゲットフォルダの URL] 欄は、カスタムに作成したタスクリストなどの特別なケースを除いては、「Lists/Tasks」となっているはずです。
また [Windows SharePoint Services 統合] というグループの各列は、上記で (コードで) 設定していますので特に指定する必要はありません。


 

最後に

今回はタスクリストを例に記載しましたが、同様の方法で、Blog サイト、Wiki サイトなど、他のリストとの連携も可能です。
これらのサンプルについては、以下に掲載されています。

TechNet : Windows SharePoint Services 3.0 Support
http://technet.microsoft.com/en-us/library/bb743510.aspx

さて、これまでみてきたように、BizTalk Server を使った開発では、現在、Visual Studio 2005 が必要で、Office 開発を各段に進化させる現在の Visual Studio 2008 (クライアントプログラムの ClickOnce, SharePoint ワークフロー開発の簡素化、など) が登場したことによって、この点について疑問 (もう少し待ったほうが良い ?) を持たれている方も多いかもしれません。
この点については、第 1 回でも記載したように 今後 Visual Studio 2008 への対応が検討されており、次フェーズの BizTalk については現在 BizTalk Server の R3、つまり R2 からアップデートとして開発中で、ファイナルテストを完了したもようです。(なお、最終的なリリースの方法や、名称、機能詳細、日本語化の予定などは、まだ正式には決まっておりませんので、正式なアナウンスをお待ちください。現時点での予定です。)

http://blogs.msdn.com/stevemar/archive/2008/04/23/biztalk-server-platform-updates.aspx

Visual Studio 2008 (および .NET Fraemwork 3.5) だけでなく、Windows Server 2008, SQL Server 2008 などへの対応も予定されています。
BizTalk のこの進化は、緩やかな進化です。つまり、いままで作ってきたものの大きな変更が必要では、BizTalk の意味がなく、本末転倒ですね (エンタープライズプロセスが、頻繁に「作りかえ」になってしまいます。上記ブログにも 「To ensure existing BTS applications continue to run without changes ...」 と記載されているのはそうした意図があるのでしょう)。

以前 も記載したように、BizTalk は今後も含めシステム全体の中で非常に重要な役割をになってくることになります。BizTalk は上記以降も含め、緩やかに進化していくことになるでしょう。

 

Comments (2)

  1. SharePoint と BizTalkで、MSエバンジェリストの松崎さんがかなり良い記事を連載していたことに気づく。 ■SharePoint と BizTalk の連携 考え方と環境準備 http:

Skip to main content