Установить значение InArgument из cs

Я работаю над проектом по основанию рабочего процесса, и у меня возникла проблема. Объясняю свой проект:

  • У меня есть MainWindow, где я задаю имя рабочего процесса, который хочу запустить. Когда я запускаю этот рабочий процесс, я вызываю класс VisualTracking.cs, чтобы узнать, где находится отладка. Этот конструктор класса cs имеет следующий метод (WorkflowDesigner wd, string filePath, string name). Имя - это имя рабочего процесса, которое я установил в mainwindow.

  • У меня есть проект dll с некоторыми настраиваемыми действиями, которые я использую в предыдущем перенесенном рабочем процессе. В одном из этих действий у меня есть аргумент InArgument, который вызывает textValue. Я хотел бы, чтобы этот InArgument получил значение имени рабочего процесса, поэтому для этого я выполняю следующий код:

MainWindow:

    ......
    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 для каждого действия рабочего процесса я проверяю, является ли его пространство имен целевым действием, которому я хочу установить имя рабочего процесса.

Статус

    ........
    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);
       ...........

Поэтому я хотел бы, чтобы в строковом тексте было значение workflowName, которое я связал в классе visualtracking .... Но когда я отлаживаю, всегда получаю значение как null ....

Любое решение будет оценено по достоинству !!!!!


person Xavi Guirao    schedule 07.06.2012    source источник


Ответы (1)


Когда workflowName установлен в вашем классе VisualTracking? Мне кажется, что вы передаете желаемое значение при создании экземпляра из MainWindow, но на самом деле никогда не устанавливали его. Я предполагаю, что вы действительно хотите использовать значение, переданное параметру name из MainWnidow. Я бы порекомендовал вам заменить следующие строки кода:

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;
}
person Jon Senchyna    schedule 07.06.2012
comment
Извините, я забыл указать this.workflowName = name; в классе visualTracking ;-), но все равно не работало - person Xavi Guirao; 07.06.2012