0

这里有没有人有为 MKS Integrity 命令行 API 构建解析器的经验。我计划构建一个 API(在 C# 中)并且需要构建一个 CLI 结果解析器,我可以使用它来解析来自 CLI 的结果。我听说 CLI 的结果不遵循任何特定的数据布局(没有字段分隔符等),并且可能会因版本而异。这是真的?我听说过 JAVA 和 ANSI C api,但也听说它们不支持 CLI 公开的所有功能。任何反馈都会有很大帮助。

谢谢和问候,乔。

4

5 回答 5

2

祝你好运。解析 MKS 的输出非常困难。例如“si viewsandbox”命令通过缩进指示子项目结构。这是一个将成员映射到子项目的 Perl 代码片段:

我们的 %parentproject;
我们的计划;
我的@subprojects;
$subprojects[0] = $沙盒;
$projects[0] = $沙盒;
打开 MKS,“si viewsandbox -R -S $sandbox |” 或死$!;
尽管 () {
    咀嚼;
    接下来如果/工作文件/i;
    下一个如果/新版本可用/i;
    我的 ($indentation, $filename, $project, $version, $type);
    if (m:^( +)$dir/(.+) 归档 (.+) *$:) {
        ($indentation, $filename, $version) = ($1, $2, $3);
    }
    if (m:^( +)$dir/(.+project) (\((.+)\) )?(.*subsandbox) *$:) {
        ($indentation, $project, $version, $type) = ($1, $2, $4, $5);
    }
    下一个除非 $indentation;
    我的 $level = 长度($indentation)/ 2 + 1;
    如果($项目){
        $子项目[$级别] = $项目;
        $parentproject{$project} = $subprojects[$level - 1];
        推@projects,$project;
    }
    如果($文件名){
        $parentproject{$filename} = $subprojects[$level - 1];
    }
}

此脚本在 Linux 上运行,因此文件夹分隔符为 /。您可能希望在 Windows 上的某些正则表达式中使用 \。

请花时间欣赏 MKS 的输出之美。项目的直接成员缩进1。子项目的成员缩进3。子项目的成员缩进5。以此类推。

我会放弃,并在绝对必要的情况下编写临时脚本,但仅此而已。是的,输出确实在版本之间发生变化。有时。

于 2013-06-25T16:55:53.220 回答
1

使用您的命令尝试 --xmlapi 选项并接收 XML 格式的答案。

此致,

阿克塞尔

于 2013-11-07T16:51:02.760 回答
0

@Joe Varghese,不确定您是否仍在为此工作,但是(在带有 MKS Integrity 2009 的 win7 上)我可以做这样的事情:

si memberinfo --xmlapi [file_name_goes_here]

这将为您提供 XML 格式的输出:

<?xml version="1.0"?>
<Response command="memberinfo" app="si" version="4.10.0 7-1 9665">
  <App-Connection port="7001" userID="some_ID" server="some_server"></App-Connection>
  <WorkItems selectionType="IMemberSelection">
    <WorkItem id="some_path_to_a_file" context="c:/Groups/MKS/IntegrityServer/some_path_to_a_project.pj" displayId="some_path_to_a_file" modelType="si.Member">
      <Field name="membername">

...

您需要将这些(或您机器上的等效项)添加到您的 Windows PATH 变量中,以便它可以看到 MKS CLI 命令:

C:\Program Files (x86)\MKS\IntegrityClient\bin;

C:\Program 文件 (x86)\MKS\Toolkit\mksnt;

祝你好运。

于 2015-06-19T20:24:58.743 回答
0

请记住,并非所有命令都可以通过 CLI 或 java API 使用(请参阅底部的一些示例)

遗憾的是,从 PTC Integrity 10.5 开始,您不能只依靠其中一个来自动化您的活动。

遗憾的是,PTC Integrity 没有提供太多关于这一切的稳定性的信息。我认为 API 更稳定(与其他工具一样)。

因此,根据您的用例,您可能需要使用 CLI 和 --xmlapi 选项并解析输出(这是地狱)。

关于 C#、java 等。这完全取决于你。API 是用 Java 编写的,但您当然可以使用适当的包装器从 C#、Python 等中调用它。我最近倾向于使用 Groovy ......

fe 用于 CM 端的 PTC Integrity 10.5(您可以在 IM 端获得类似的结果)这里的一些命令只能通过 API 而不是通过 CLI 可用:

  • 项目添加
  • 项目
  • 项目公司

这里有些命令只能通过 CLI 而不是 API 可用:

  • 接受cp
  • 添加标签
  • 添加成员属性
  • 添加项目
  • 添加项目标签
  • 添加项目度量
  • applycp ...(共81个)
于 2015-08-03T15:31:33.137 回答
0

我对问题、类型、字段等的解决方案是解析输出,当我看到一行没有前导空格但有冒号的文本时,它是一个键:值对。如果下一行是前导空格,我可以追加,但我会丢弃输出,包括上一行。只有符合标准 key:value 的行才会被直接解析。

然后对于我丢弃的那些字段名称,我将执行以下操作(此处的示例是一个问题):

我发出 --fields='list,of,fieldnames' item#,然后用制表符分隔它们。如果您的字段可能包含一个选项卡,我会单独获取它而没有其他字段。然后我有一个带有 key=value 对的 perl 关联数组。

我知道这不是最有效的,但它似乎确实可以准确地提取字段进行解析。

我在 perl 中确实有另一个函数,我放在一起读取类型、字段、查询、演示文稿(作为 XML)。这要复杂得多。一旦我把它清理得更清楚了,我可能会回来重新发布。

于 2015-09-29T20:17:51.050 回答