使用基本创建工作流程,如下所示。
创建了一个calss库,使用了ProgId,设置了comvisible true并在Tridion服务器中注册了程序集。
这是我测试过的方式:
该项目未移至作者。但是当我再次从全球工作清单中完成活动时,该项目已移至作者。
似乎我的代码没有执行活动,因为我尝试删除下面的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 :(得分: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代理服务执行。分配状态可能表示该服务尚未被接收。您的服务是否正常运行,是否正确设置了队列通知?