クライアントオブジェクトモデルを使用してドキュメントライブラリにファイルを作成するのに問題が発生しています。カスタムVisualStudio2010ワークフローは、ファイルの作成後にファイルのリストアイテムに対して行っている更新を検出しません。
いくつかの可能性のある質問に答えるためのインフラストラクチャのアイデアを提供したいと思います。
- ドキュメントはWebサービスにアップロードされます。このサービスは、実際にドキュメントをライブラリに挿入し、そのリスト列の値を構成する役割を果たします。
- Webサービスは、クライアントオブジェクトモデルを使用してこの操作を実行しています
- Webサービスは、SharePointと対話するときにシステムアカウントとして実行されないビジネスインテリジェンス自動化用に作成されたアカウントを使用して、SharePointサイトに対して認証を行っています。ただし、SharePoint所有者のメンバーです
- カスタムワークフローの操作は、ファイルのリストアイテムの列に依存してから、それらの列の2つでユーザーにタスクを割り当てることができます。そのため、これら2つの列がnullでなくなるまで、リストアイテムの変更を監視するWhileアクティビティを作成しました。
以下は、Webサービスが実行していることのサンプルです。これは、ビジネスインテリジェンスのユーザーIDでIISで実行されています。ワークフローが適切に応答すると予想していた操作について、いくつかコメントを追加しました。
Using client As New ClientContext(My.Settings.SharePointSiteURL)
// Pre-processing to determine appropriate user ID values for columns
Dim fci As New FileCreationInformation() With {
.Content = IO.File.ReadAllBytes(storagePath),
.Overwrite = True,
.Url = String.Format("{0}/{1}", theList.RootFolder.ServerRelativeUrl, theFileName)
}
Dim theFile As Microsoft.SharePoint.Client.File = theList.RootFolder.Files.Add(fci)
// Expecting the workflow to be activated here
client.ExecuteQuery()
theFile.ListItemAllFields("Project_x0020_Manager") = pmId
theFile.ListItemAllFields("Project_x0020_Accountant") = paId
theFile.ListItemAllFields.Update()
// Expecting the onWorkflowItemChanged activity to be invoked here
client.ExecuteQuery()
End Using
ワークフローは、ファイルがアップロードされたときにアクティブになり、SharePointからの変更イベントを待機し続けますが、そのイベントがWebサービスの操作の直接の結果として到着することはありません。アイテムを手動で変更して、続行することができます。
これらのイベントが正常に発生するのを妨げる可能性のあるクライアントオブジェクトモデルを使用する場合の考慮事項はありますか?