更新:进程需要先设置为活动对象。新的问题是如何做到这一点。
PetrelSystem.ActiveObjectService.GetActiveObject<Process>()
上述通话不起作用。是否有另一种方法为进程设置活动对象?进程树中的进程似乎没有一个类型,所以我怀疑使用泛型的任何东西都可以工作。
旧问题: 我在使用API调用DialogBuilder.ShowSettings(object domainObject)启动进程的设置对话框时遇到问题。它似乎适用于导入数据流程,但我不能让它启动任何其他对话框。
我试过遍历Processes树来获取进程域对象,我尝试使用PetrelSystem.ProcessDiagram.FindProcess(字符串名称)来获取进程。传递给DialogBuilder.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);
这就是我试图通过查找过程方法
启动该过程的方法var PROCESS = PetrelSystem.ProcessDiagram.FindProcess((comboBox1.SelectedItem as ContextMenuObject).DisplayText);
if (PROCESS != null)
{
if (!PetrelSystem.DialogBuilder.IsSettingsVisible(PROCESS))
PetrelSystem.DialogBuilder.ShowSettings(PROCESS);
}
我正在使用的方法适用于其他窗格,如输入和模型。只有进程窗格出现问题。
欢呼帮助!
答案 0 :(得分:1)
IProcessDiagram.ActiveProcess
属性获取或设置活动进程。
我编写了一个注册ActiveProcessChanged
事件的简单测试,当最终用户选择不同的进程时,事件处理程序会显示该进程的设置对话框。这适用于我尝试过的~10
原生Petrel
进程。我在2011.2
和2012
进行了测试。
PetrelSystem.DialogBuilder.ShowSettings(PetrelSystem.ProcessDiagram.ActiveProcess);
问候,Delaina