自动活动未执行

时间:2012-07-05 07:18:03

标签: tridion tridion-2011

使用基本创建工作流程,如下所示。 PFA the workflow attached

创建了一个calss库,使用了ProgId,设置了comvisible true并在Tridion服务器中注册了程序集。

这是我测试过的方式:

  1. 创建了一个组件
  2. 从工作清单中完成活动。
  3. 导航到“全球工作清单”并通过选择“返回作者”步骤并单击“完成”按钮自行完成Reviewer活动。
  4. 该项目未移至作者。但是当我再次从全球工作清单中完成活动时,该项目已移至作者。

    似乎我的代码没有执行活动,因为我尝试删除下面的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;
            }
        }
    

3 个答案:

答案 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

答案 1 :(得分:2)

根据Nuno的回答,是的,您应该更改代码以使用TOM或核心服务。不支持TOM .Net,因为它使用的是与我们用于工作流(COM)的底层技术不同的线程单元。

关于这个问题我已经检查过您是否正在调用这样的活动。

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

看起来活动名称不匹配。 “编辑”和“组件”之间有一些奇怪的字符

我希望这会有所帮助。

答案 2 :(得分:0)

自动活动由Workflow代理服务执行。分配状态可能表示该服务尚未被接收。您的服务是否正常运行,是否正确设置了队列通知?