0

Из-за странного поведения в моем приложении, я вынужден перезагрузить конструктор перед вызовом WorkflowInvoker.Invoke на нем.WF 4 разных идентификатора в тех же действиях

  wd.Flush(); 
      SaveXamlFile(currentXamlPath, wd.Text); 

Я просто очищаю содержимое и записываю файл wd.Text в файл.

  //cleanup the previous designer 
     if (wd != null) 
     { 
      wd.ModelChanged -= new EventHandler(Designer_ModelChanged); 
     } 

     //designer 
     wd = new WorkflowDesigner(); 
     designerArea.Child = wd.View; 
     this.DebuggerService = this.wd.DebugManagerView; 

     //property grid 
     propertiesArea.Child = wd.PropertyInspectorView; 

     //event handler 
     wd.ModelChanged += new EventHandler(Designer_ModelChanged); 

     //error service 
     wd.Context.Services.Publish<IValidationErrorService>(errorService); 


     wd.Context.Items.Subscribe<Selection>(OnItemSelected); 

Затем я создаю новый экземпляр WorkflowDesigner и загружаю ранее сохраненный файл.

 wd.Load(currentXamlPath); 

я называю WorkflowInvoker.Invoke и внутри моей пользовательской активности, которая происходит от CodeActivity я беру это имя: enter image description here ОК, штраф до сих пор, у меня есть 1.2 Id там.

Я хочу обновить некоторые поля этого действия через свой ModelItem, чтобы сразу отобразить их в графическом интерфейсе.

IEnumerable<ModelItem> activityCollection = currentWorkflow.Find(currentWorkflow.Root, typeof(Activity)); 

Но здесь встает вопрос: enter image description here

Я не могу найти, что моя активность идентификатор там. Теперь он превращается из 1,2 в 2. Почему это происходит?

Я попытался отправить эту ссылку из моего метода Execute Activity и выполнил поиск по ref, но все, что я получил, это null.

ModelItem temp = activityCollection.FirstOrDefault((m) => (m.GetCurrentValue() == a)); 

Уверен, что у меня что-то отсутствует, но я не могу понять, что это.

ответ

0

Я нашел обходной путь на этом:

На моих заказных мероприятиях я добавляю свойство Guid и я перекрывающий CacheMetadata:

public Guid unique { get; set; } 

    protected override void CacheMetadata(CodeActivityMetadata metadata) 
    { 
     if (unique.ToString() == "00000000-0000-0000-0000-000000000000") 
      unique = Guid.NewGuid(); 
    } 

Когда я перетащить деятельность на дизайнере, уникальный идентификатор генерироваться. Я уверен, что эта часть кода вызывается только один раз. Почему?

Потому что после того, как вызов, как это,

IEnumerable<ModelItem> activityCollection = currentWorkflow.Find(currentWorkflow.Root, typeof(Activity)); 

каждая модель в коллекции активности содержит это свойство (уникальный тип Guid) со значением первого задания, сделанные в CacheMetadata. Я не могу объяснить это поведение, я только что принял это во внимание.

Кто снова называет CacheMetadata? что-то вроде этого:

 Activity root = ActivityXamlServices.Load(currentXamlPath); 
     WorkflowInspectionServices.CacheMetadata(root); 

Итак, руководство изменено и его утилита исчезла.

Таким образом, я могу получить ModelItem для своей пользовательской активности и обновить некоторые ее свойства, которые сразу отображаются в графическом интерфейсе.