Enterprise Architect 模型搜索 XML 格式

Enterprise Architect Model Search XML Format

我用 C# 为 Enterprise Architect 编写了一些插件。我现在想以类似的方式添加一个复杂的模型搜索。 运行我的加载项搜索没有问题。我认为我的问题出在 XML 模型搜索格式上。我能找到的唯一文档是 here

我尝试在 EA "JScript - Model Search (Attributes) Example" 中使用示例 JScript 和 VB 脚本文件。当我在 EA 中 运行 它时,我无法得到它来给我输出。我相信那一定是用户错误。我正在使用该代码作为示例,尝试从 C# 加载项正确输出我的搜索结果。

我不知道 <ReportViewData UID=\"MySearchID\" > 的值应该是多少?看起来应该是搜索的UID。如何找到它?据我所知,JScript 示例中缺少它。

是否有人有我可以测试的格式正确的 XML 搜索格式文件?只需手动修改一个已知的工作文件以匹配我的存储库中的一个元素并导入结果将是一个巨大的帮助。除了上面链接的内容,我找不到任何文档。

Repository.RunModelSearch 没有 return 任何结果。它只是 运行 模型搜索 (Ctrl-F),就好像用户选择了它并传递了搜索词一样。您可以添加自己的 XML,模型搜索 window 将显示它(因此格式正确)。还有其他方法可以从模型中检索数据。使用 Repository.SQLSearchRepository.GetElementSet.

假设您有以下 SQL 搜索名为 "test":

SELECT  ea_guid AS CLASSGUID, Object_Type AS CLASSTYPE, Name FROM t_object
WHERE Name LIKE '*<Search Term>*' 

你的 XML 看起来像这样:

<ReportViewData UID="MySearchID" >
 <Fields>
         <Field name="CLASSGUID"/>
         <Field name="CLASSTYPE"/>
 </Fields>

 <Rows>
         <Row>
                 <Field name="CLASSGUID" value="{99660FA1-6927-41bf-9676-521A6C852884}"/>
                 <Field name="CLASSTYPE" value="Class"/>
         </Row>
 </Rows>
</ReportViewData>

如果您 运行 Repository.RunModelSearch ("test", "Class1", "", xml) 它会在 class 后附加提供的 guid,而不考虑其他已找到的内容。如果您将 CLASSTYPE 更改为 Object,它甚至会将 class 显示为对象。

据我了解,ReportViewData UID="MySearchID" 用于保留搜索设置(列宽等)并且不太重要。

老实说,我很难想象这种方法的用例 ;-)

P.S.: 我问过 Sparx 这件事,这里是回复:

public object MyAddinSearch(EA.Repository Repository, String SearchText, out String XMLResults)

The XMLResults parameter needs to be passed by reference. The XML results generated by this function need to be assigned to this parameter for further processing by EA. The return value for this method simply requires a non-empty result to indicate that results should be displayed in EA. For example, simply returning a boolean true value is sufficient.

我的大问题是没有在我的 C# 函数中使用 out 关键字作为 XMLResults 值。 Thomas 回答中的函数声明就是那个问题。

"MySearchID" 的值是搜索的 GUID。使用 EA 中的构建器创建插件搜索后,将搜索导出为 XML。 XML 导出文件包含搜索的 GUID。使用该值替换 "MySearchID"。这是我的 XML 由 C# 加载项生成的输出,作为有效文件的示例:

<ReportViewData UID="{74945F94-D210-4f45-8639-784DAE0DAB1F}">
  <Fields>
    <Field name="CLASSGUID" />
    <Field name="CLASSTYPE" />
    <Field name="Object" />
    <Field name="Type" />
    <Field name="Stereotype" />
  </Fields>
  <Rows>
    <Row>
      <Field name="CLASSGUID" value="{A16DD03A-B1B2-4269-A058-0AB14B933388}" />
      <Field name="CLASSTYPE" value="Class" />
      <Field name="Object" value="Class1" />
      <Field name="Type" value="Class" />
      <Field name="Stereotype" value="AffineConversion" />
    </Row>
    <Row>
      <Field name="CLASSGUID" value="{44E11CA0-1FAE-47ee-9088-D3106F320C57}" />
      <Field name="CLASSTYPE" value="Class" />
      <Field name="Object" value="Class2" />
      <Field name="Type" value="Class" />
      <Field name="Stereotype" value="MessagePort" />
    </Row>
  </Rows>
</ReportViewData>