3

以下のように基本的なワークフローを作成しました。PFA 添付のワークフロー

ProgId を使用して calss ライブラリを作成し、comvisible true を設定して、アセンブリを Tridion サーバーに登録しました。

これは私がテストした方法です:

  1. コンポーネントを作成しました
  2. 作業リストからアクティビティを終了しました。
  3. 「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;
        }
    }
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

自動アクティビティは、ワークフロー エージェント サービスによって実行されます。Assigned 状態は、サービスによって取得されていないことを示している場合があります。サービスは正しく実行されていますか?また、キュー通知などは適切に設定されていますか?

于 2012-07-05T09:18:49.920 に答える