0

更新:进程需要首先设置为活动对象。新的问题是如何做到这一点。

PetrelSystem.ActiveObjectService.GetActiveObject<Process>()

上面的调用不起作用。是否有另一种方法来设置进程的活动对象?流程树中的流程似乎没有一种类型,所以我怀疑任何使用泛型的东西都可以工作。

老问题:我在使用 API 调用 DialogBu​​ilder.ShowSettings(object domainObject) 启动进程设置对话框时遇到问题。它似乎适用于导入数据过程,但我无法让它启动任何其他对话框。

我尝试遍历进程树以获取进程域对象,并尝试使用 PetrelSystem.ProcessDiagram.FindProcess(string name) 来获取进程。两者在传递到 DialogBu​​ilder.ShowSettings 时具有相同的结果。

这是 2011 年 API 的已知问题吗?

这就是我遍历树的方式

 IObservableElementEnumerableFactory service = CoreSystem.GetService<IObservableElementEnumerableFactory>(PetrelProject.Processes);
 IObservableElementEnumerable elemEnum = service.GetEnumerable(PetrelProject.Processes);

        indentLevel++;
        if (elemEnum != null)
        {
            foreach (object obj in elemEnum)
            {
                var cmo = cmoMananeger.CreateCMO(obj, addText, indentLevel);
                //add it to tree then add its children
                if (cmo != null)
                {
                    if (indentLevel > 0)
                    {
                        comboBox1.Items.Add(cmo);
                        processToCMO.Add(cmo, obj);
                    }
                    traverseTree(obj, indentLevel, addText);
                }
            }
        }
        indentLevel--;

然后尝试在之后启动该过程

  var process = processToCMO[comboBox1.SelectedItem as ContextMenuObject];
  if (!PetrelSystem.DialogBuilder.IsSettingsVisible(process))
        PetrelSystem.DialogBuilder.ShowSettings(process);

这就是我尝试通过 find 进程方法启动进程的方式

var PROCESS = PetrelSystem.ProcessDiagram.FindProcess((comboBox1.SelectedItem as ContextMenuObject).DisplayText);
        if (PROCESS != null)
        {
            if (!PetrelSystem.DialogBuilder.IsSettingsVisible(PROCESS))
                PetrelSystem.DialogBuilder.ShowSettings(PROCESS);
        }

我使用的方法适用于其他窗格,如输入和模型。它只是有问题的进程窗格。

为帮助干杯!

4

1 回答 1

1

IProcessDiagram.ActiveProcess属性获取或设置活动进程。

我编写了一个简单的测试来注册ActiveProcessChanged事件,当最终用户选择不同的进程时,事件处理程序会显示该进程的设置对话框。这适用于我尝试过的本~10Petrel进程。我在 和 上都进行了2011.2测试2012

PetrelSystem.DialogBuilder.ShowSettings(PetrelSystem.ProcessDiagram.ActiveProcess);

问候, 德莱娜

于 2012-08-28T20:17:45.573 回答