我在使用客戶端對象模型在文檔庫中創建文件時遇到困難。我的自定義Visual Studio 2010工作流程未在創建後檢測到我對文件列表項目所做的更新。ListItem從客戶端對象模型更新不觸發OnWorkflowItemChanged活動
我想給基礎設施的想法來回答一些問題可能:
- 該文件被上傳到Web服務,它負責在圖書館實際插入的文件和配置其列表中的列值
- 的Web服務使用客戶端對象模型進行交互時
- Web服務進行身份驗證對SharePoint網站與商業智能自動化創建的帳戶不運行的系統帳戶執行此操作與SharePoint;但它是SharePoint所有者的成員
- 自定義工作流程中的操作取決於文件的列表項列被填充,然後才能繼續將任務分配給其中兩列中的用戶;因此,我創建了一個While活動來監視列表項中的更改,直到這兩列不再爲空爲止
以下是Web服務正在執行的示例。它以商業智能用戶身份在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服務的操作的直接結果。我可以手動修改該項目併成功繼續。
使用客戶端對象模型可能會排除這些事件正常觸發時是否需要考慮?
在進入睡眠狀態後工作流是否被觸發,或者問題在於未在此webservice中通過COM設置元數據?如果你有第二個問題,也許這將有助於http://stackoverflow.com/questions/6200654/updated-listitem-attributes-arent-commiting-changes-to-sharepoint? –
COM正確設置列。工作流正在正確啓動。問題是,我使用COM設置的列在我的第一個活動中沒有任何價值,除非在激活之後立即放置一個While循環以等待OnWorkflowItemChanged活動。但是,COM的更新不會觸發該活動,因此工作流不會前進。 – lsuarez