更新: プロセスは、最初にアクティブなオブジェクトとして設定する必要があります。新しい質問は、これを行う方法です。
PetrelSystem.ActiveObjectService.GetActiveObject<Process>()
上記の呼び出しは機能しません。プロセスのアクティブ オブジェクトを設定する別の方法はありますか? プロセス ツリーにはプロセスのタイプが 1 つないように見えるので、ジェネリックを使用するものは何も機能しないと思います。
古い質問: API 呼び出し DialogBuilder.ShowSettings(object domainObject) を使用してプロセスの設定ダイアログを起動するのに問題があります。データのインポート プロセスでは機能しているようですが、他のダイアログを起動することはできません。
Processes ツリーを走査してプロセス ドメイン オブジェクトを取得し、PetrelSystem.ProcessDiagram.FindProcess(string name) を使用してプロセスを取得しようとしました。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);
}
私が使用している方法は、入力やモデルなどの他のペインでうまく機能します。問題があるのはプロセスペインのみです。
助けて乾杯!