3

创建了一个基本的工作流程,如下所示。PFA 附加的工作流程

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

这是我测试过的方式:

  1. 创建了一个组件
  2. 完成工作清单中的活动。
  3. 导航到“全局工作列表”并通过选择“返回作者”步骤并单击“完成”按钮自行完成审阅者活动。

该项目未移至作者。但是当我从全局工作列表中再次完成活动时,该项目已移至作者。

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

3 回答 3

4

请注意,您正在使用自动活动中不支持的 API。允许您使用 TOM.NET 的唯一进程是事件系统处理程序和模板构建块,如此所述。

自动工作流活动——如果不是用 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,为什么还要问要使用哪个 API

于 2012-07-05T12:54:00.433 回答
2

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

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

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

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

我希望这有帮助。

于 2012-07-05T14:32:56.410 回答
0

自动活动由工作流代理服务执行。已分配状态可能表明它只是没有被服务接收。您的服务是否正常运行,队列通知等设置是否正确?

于 2012-07-05T09:18:49.920 回答