2012-07-05 142 views
3

使用basic創建工作流程如下。 PFA the workflow attached未執行自動活動

創建一個calss庫,使用ProgId,設置comvisible true並在Tridion服務器中註冊該程序集。

這是我測試的方式:

  1. 創建從工作清單完成活動的一個組成部分
  2. 導航到「全球工作清單」,並通過選擇「返回作者」步驟完成審閱者活動,並單擊「完成」按鈕。

該項目未移至作者。但是當我從全球工作清單中再次完成活動時,該項目移至作者處。

看來我的代碼沒有執行活動,因爲我試圖刪除下面的VB腳本代碼,並嘗試使用默認的自動腳本代碼。

' Script for Automatic Activity Content Manager Workflow 
FinishActivity "Automatic Activity Finished" 

它的行爲與上面相同。所以我決定我的代碼沒有工作。任何人都可以幫忙嗎?

下面是我在 「回到作者」 的劇本框使用的VBScript的:

Option Explicit 

Dim workflowHandler 
Set workflowHandler = CreateObject("CoreComponentWorkflow.WorkflowHandler"); 

If Not workflowHandler Is Nothing Then 
    Call workflowHandler.MoveBackToActivity(Cstr(CurrentWorkItem.ID, "Create or Edit  Component") 
End If 
Set workflowHandler = Nothing 

下面是C#代碼:

public void MoveBackToActivity(string workitemid, string strActivitytoMove) 
    { 

     try 
     { 
      Session session = new Session(); 
      WorkItem workitem = new WorkItem(new TcmUri("workitemid"), session); 
      ActivityInstance currentactivity = workitem.Activity as ActivityInstance; 
      ProcessInstance procInstance = currentactivity.Process as ProcessInstance; 

      IEnumerable<ActivityInstance> ieActivities = procInstance.Activities      
      .Select (s => s) 
      .Where (w => w.Title.IndexOf(strActivitytoMove) !=-1) 
      .OrderByDescending(w =>w.StartDate); 

      if (ieActivities != null && ieActivities.Count<ActivityInstance>() > 0) 
      { 
       ActivityInstance targetactivity = ieActivities.ElementAt(0); 
       User lastperformuser = targetactivity.Performers.ElementAt(targetactivity.Performers.Count<User>() - 1); 
       ActivityFinish finish = new ActivityFinish(targetactivity.FinishMessage, lastperformuser, workitem.Session); 
       currentactivity.Finish(finish); 

      } 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
+0

活動在沒有按預期移回給作者的地方處於什麼狀態? –

+0

從「審閱」狀態選擇「返回作者」活動。 – user1428019

+0

這不是我所問的。在全球工作清單的狀態欄中查找值... –

回答

4

請注意,您正在使用自動活動中不支持的API。允許使用TOM.NET的唯一過程是事件系統處理程序和模板構建塊,如文檔here所述。

自動工作流程活動 - 如果不使用VBScript開發 - 必須使用CoreService界面。

好消息是,我知道這是有效的 - 很多人在很多實現中都使用它。壞消息(對你而言)是錯誤出現在你的代碼中。您是否嘗試過通過代碼進行調試/逐步操作?您可以附加到工作流程過程(cm_wf_svc.exe),並且比我們更快地找出代碼中的錯誤。

這裏是一個非常簡單的片段,以完成與CoreService活動:

ActivityFinishData activityFinish = new ActivityFinishData 
    { 
     Message = "Automatically Finished from Expiration Workflow Extension" 
    }; 
ActivityInstanceData activityInstance = 
    (ActivityInstanceData)processInstance.Activities[0]; 
client.FinishActivity(activityInstance.Id, activityFinish, readOptions); 

順便說一句 - 如果你打算無論如何要使用TOM.NET,你爲什麼要打擾asking which API to use

+0

Hi Nuno,感謝您的評論,我有一個一步一步的指南,這是SDL,在那個文檔中他們使用了上面的C#和VB代碼,這就是讓我感到困惑的原因是TOM.NET還是Core Service。順便說一句,我從來沒有調試過的工作流程。我可以從客戶機Visual Studio中附加cm_wf_svc.exe嗎? – user1428019

+0

恐怕來自SDL的那位向您提供樣本和指南的人員不正確/不瞭解此限制。我建議你讓他知道這一點。是的,只要你的服務器允許你這樣做,你就可以附加到客戶端機器上的服務。有關此主題的信息,請參閱MSDN:http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx –

0

自動活動由執行工作流代理服務。分配狀態可能表明它只是沒有被服務接收。您的服務是否正常運行,並且正確設置了隊列通知?

+0

我已重新啓動工作流代理服務,並從全局工作列表中打開項目,現在將執行者狀態更改爲「NT \ AUTHORITY SYSTEM」,但仍未將其移至作者。如果我再次手動完成活動,那麼該項目將移動到作者,同時上述任務的執行者也從「NT \ AUTHORITY SYSTEM」中更改爲我 – user1428019

+0

行 - 好像聽起來您的座席運行不正常。現在它正在採取行動,但現在我看着你的代碼,你正在自動活動腳本中編寫TOM.NET代碼。這不支持。你可以用C#編寫你的代碼,但是你必須使用COM/.NET interop。 PIA是爲此目的而提供的。除此之外,你的邏輯並不總是導致活動結束。 –

+0

你的意思是使用interop dll?與TOM API?我可以使用核心服務API使用coreservice.client.dll嗎?我不明白,「你的邏輯並不總是導致活動結束」 – user1428019

2

遵循Nuno的答案,是的,您應該更改代碼以使用TOM或Core Services。 TOM。不支持Net,因爲它使用的是不同於我們用於工作流(COM)的基礎技術的線程單元。

關於此問題,我檢查了您是否正在調用此類活動。

Call workflowHandler.MoveBackToActivity(Cstr(CurrentWorkItem.ID, "Create or Edit  Component") 

看起來活動名稱不匹配。 「編輯」和「組件」之間有一些奇怪的字符

我希望這有助於。