2010-09-07 86 views
0

我有一個自定義的工作流程實現需要更新外部數據庫。我爲文本目的創建了一個簡單的工作流程,發現了一件奇怪的事情在SharePoint工作流程中重複執行代碼活動?

我的Db更新/插入代碼被放置在工作流的代碼活動中。似乎代碼活動多次執行時,工作流在SharePoint的自定義列表中的簡單列表項上調用。這是我的工作流程:

workflow-image

,我的代碼是:

private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e) 
{ 
    workflowProperties.Item["Title"] = "Processed by workflow at "+ DateTime.Now; 
    workflowProperties.Item.Update();  

} 

private void codeActivity1_ExecuteCode(object sender, EventArgs e) 
{ 
    Random rnd = new Random(); 

    string conStr = "Data Source=192.168.1.57\\TRIBIRD;Initial Catalog=XXXXXX;User ID=XXXXXX;Password=XXXXXXXXXX"; 
    SqlConnection connection = new SqlConnection(conStr); 
    SqlCommand command = connection.CreateCommand(); 
    command.CommandType = System.Data.CommandType.Text; 
    command.CommandText = "INSERT INTO XXXX VALUES(" + rnd.Next() + ",'THE CONTENT FROM SHAREPOINT WORKFLOW','EN',1,1,'BRT')"; 

    connection.Open(); 
    command.ExecuteNonQuery(); 
    command.Dispose(); 
    connection.Close(); 
} 

在DB我獲得超過1行中的工作流執行!有趣的是,在每次執行期間,添加的行數都不相同。

這是怎麼發生的?我的錯誤是什麼?
歡迎任何想法和建議。

回答

0

確保您正在運行SharePoint的最新修補程序和更新。

2007年的早期版本將允許循環自觸發(例如,重新觸發)。後續版本不會(但仍允許共循環觸發器)。我懷疑這是問題,並且「級聯」由Update方法開始。只是一種預感。

這應該被固定在SP2:爲info..any解決這個Service Pack 2 prevents an on-change workflow from starting itself

+0

@pst ..謝謝?我的真實工作流程將在兩者之間進行審批流程,並且只有在項目獲得批准後,數據纔會更新/插入到外部數據庫中。任何最佳實踐或解決此問題的其他解決方案? – 2010-09-07 21:22:00

+0

@Abdel我用一個(希望)有用的鏈接更新了我的回覆。如果此問題是由於變更事件引起的,則SP2應修復觀察到的行爲。當我創建了這樣的工作流程(聽起來像這樣)時,我保持工作流程流程簡短並保持項目本身的狀態。然後,我假定該項目在工作流程運行時不會被外部更改(工作流本身可能會更改項目,SP2會阻止重新觸發)。有了這個假設和SP2修復,一切運作良好。 – 2010-09-07 21:25:35

+0

@pst,我做了升級,仍然沒有工作!我會嘗試重新部署工作流程並測試... – 2010-09-07 22:58:27