以下のように基本的なワークフローを作成しました。
ProgId を使用して calss ライブラリを作成し、comvisible true を設定して、アセンブリを Tridion サーバーに登録しました。
これは私がテストした方法です:
- コンポーネントを作成しました
- 作業リストからアクティビティを終了しました。
- 「Global Work list」に移動し、「Back to Author」ステップを選択して「Finish」ボタンをクリックすることで、レビュアー アクティビティを自分で終了しました。
アイテムは作成者に移動されません。しかし、グローバルワークリストからアクティビティを再度終了すると、アイテムは作成者に移動しました。
以下の VB スクリプト コードを削除して、デフォルトの自動スクリプト コードを試してみたため、コードがアクティビティを実行していないようです。
' Script for Automatic Activity Content Manager Workflow
FinishActivity "Automatic Activity Finished"
上記と同じように動作します。だから私は自分のコードが機能していないと判断しました。誰でもこれについて助けてもらえますか?
以下は、「Back to Author」のスクリプト ボックスで使用した 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;
}
}