0

ワークフローファウンデーションプロジェクトで作業していますが、問題が発生します。私は自分のプロジェクトについて説明します。

  • 実行するワークフロー名を設定するメインウィンドウがあります。このワークフローを実行するときは、VisualTracking.csクラスを呼び出して、デバッグの場所を確認します。このcsクラスコンストラクターには次のメソッドがあります(WorkflowDesigner wd、string filePath、string name)名前は、メインウィンドウで設定したワークフロー名です。

  • 以前に再ホストされたワークフローで使用するいくつかのカスタムアクティビティを含むdllプロジェクトがあります。これらのアクティビティの1つに、textValueを呼び出すInArgumentがあります。このInArgumentがworkflowname値を取得するようにしたいので、それを行うには、次のコードを実行します。

メインウィンドウ:

    ......
    VisualTracking tracker = new VisualTracking(wd, workflowFilePathName, this.workflowName);
    .....

VisualTrackingクラス:

    .......
    private string workflowName { get; set; }
    .......
    public VisualTracking(WorkflowDesigner wd,string filePath,string name) {
    .......
    foreach (Activity v in idActivityMap.Values)
        {
            string val = v.GetType().FullName;
            activityLists.Add(val);
            if (v.GetType().FullName == "RulesDll.Status_Activity.StatusActivity")
            {
                ((StatusActivity)v).textValue = this.workflowName;                   
            }
        }
    ........

このforeachで、ワークフローアクティビティごとに、彼の名前空間がワークフロー名を設定するターゲットアクティビティであるかどうかを確認します。

StatusActivity

    ........
    public InArgument<string> textValue;

    public InArgument<string> Text
    {
        get { return this.textValue; }
        set { this.textValue = value; }
    }
    ........
    protected override void Execute(CodeActivityContext context)
    {
       ...........
        string text = context.GetValue(this.Text);
       ...........

したがって、文字列テキストに、visualtrackingクラスで関連付けたworkflowName値が含まれるようにします。ただし、デバッグするときは、常に値をnullとして取得します。

どんな解決策もありがたいです!!!!!

4

1 に答える 1

0

workflowNameVisualTracking クラスでいつ設定されますか? MainWindow からインスタンスを作成するときに目的の値を渡しているように見えますが、実際に設定することはありません。nameMainWnidow からパラメーターに渡された値を実際に使用したいと思います。次のコード行を置き換えることをお勧めします。

if (v.GetType().FullName == "RulesDll.Status_Activity.StatusActivity")
{
    ((StatusActivity)v).textValue = this.workflowName;
} 

これ等と一緒に:

// This will also catch cases where your class inherits
// from StatusActivity.
StatusActivity activity = v as StatusActivity;

// Using 'as' cast will return null if the type cannot be 
// cast to a StatusActivity.
if (activity != null)
{
    // You passed in a reference to MainWindow's "this.workflowName" 
    // in the name parameter of this constructor.
    activity.textValue = name;
}
于 2012-06-07T14:11:27.440 に答える