0

有沒有人在這裏獲得了爲MKS Integrity命令行API構建解析器的經驗。我打算構建一個API(用C#),並且需要構建一個CLI結果解析器,我可以使用它來解析CLI的結果。我聽說CLI的結果沒有遵循任何特定的數據佈局(沒有字段分隔符等),並且可能會從版本更改爲版本。這是真的? 我聽說過JAVA和ANSI C API,但也聽說它們不支持CLI公開的所有功能。任何反饋都會有很大的幫助。MKS完整性命令行API

感謝和問候, 喬。

回答

2

祝你好運。解析MKS的輸出是非常困難的。 例如,「si viewsandbox」命令通過縮進指示子項目結構。 這裏是一個Perl代碼片段的成員映射到子項目:

 
our %parentproject; 
our @projects; 
my @subprojects; 
$subprojects[0] = $sandbox; 
$projects[0] = $sandbox; 
open MKS, "si viewsandbox -R -S $sandbox |" or die $!; 
while() { 
    chomp; 
    next if /working file/i; 
    next if /new revision available/i; 
    my ($indentation, $filename, $project, $version, $type); 
    if (m:^(+)$dir/(.+) archived (.+) *$:) { 
     ($indentation, $filename, $version) = ($1, $2, $3); 
    } 
    if (m:^(+)$dir/(.+project) (\((.+)\))?(.*subsandbox) *$:) { 
     ($indentation, $project, $version, $type) = ($1, $2, $4, $5); 
    } 
    next unless $indentation; 
    my $level = length($indentation)/2 + 1; 
    if ($project) { 
     $subprojects[$level] = $project; 
     $parentproject{$project} = $subprojects[$level - 1]; 
     push @projects, $project; 
    } 
    if ($filename) { 
     $parentproject{$filename} = $subprojects[$level - 1]; 
    } 
} 

這個腳本運行在Linux上,所以文件夾分離器/。您可能想在Windows上的某些正則表達式中使用\。

請花時間欣賞MKS的產品之美。項目 的直接成員縮進1.子項目的成員縮進3.子項目的子項目的成員縮進5.依此類推。

我會放棄,並在絕對必要的地方寫下特別的腳本,但不要再寫了。 是的,輸出在版本之間確實改變。有時。

+0

謝謝@SzG。是的,我正在學習它(解析CLI響應)困難的方式:)。保持手指交叉。 –

1

對您的命令嘗試使用--xmlapi選項並以XML格式接收答案。

最好的問候,

阿克塞爾

+0

嗨阿克塞爾,請你提供更多信息。你的意思是說PTC(MKS)客戶端有一個XML API,如果是這樣的話,你可以分享一下你指的是哪一個版本(和一個cmd行命令示例)。我的API需要來自PTC/MKS版本2009的支持。 –

0

@Joe Varghese表示,不知道你是否仍在努力這一點,但(與MKS完整性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 Files(x86)\ MKS \ Toolkit \ mksnt;

祝你好運。

+0

感謝您的信息。是的,xmlApi的確提供了一個可讀的輸出,但是根據MKS(PTC),XmlApi沒有官方的支持。這是我們無法承擔的風險。 :( –

0

記住,不是所有的命令都可以或者通過CLI或Java API(見底部一些例子)

這是一個遺憾,因爲PTC的完整性10.5你不能只在其中的一個依賴使您的活動自動化。

同樣可惜的是,PTC Integrity並未提供有關穩定性的所有信息。我認爲API更穩定(和其他工具一樣)。

所以要根據您的使用情況下,您可能需要使用CLI和--xmlapi選項,並解析輸出(這是地獄)。

關於C#,JAVA等。它是一切都取決於你。這個API是用Java編寫的,但是你可以用C#,Python等用適當的包裝器來調用它。我最近傾向於使用Groovy ...

f.e.對於PTC完整性10.5 CM側(類似的結果,你可以在IM側) 這裏一些只能通過API而不是通過CLI命令:

  • projectadd
  • projectci
  • projectco

和這裏一些命令只能通過CLI而不通過API:

  • acceptcp
  • addlabel
  • addmemberattr
  • addproject
  • addprojectlabel
  • addprojectmetric
  • applycp ... (共81頁)
0

我的問題,類型,字段等的解決方案。當解析輸出時,當我看到一行文字沒有前導空格但冒號時,這是一個關鍵值對。如果下一行是空白符號,我可以追加,但是我將輸出放到了前一行。只有符合標準key:value的行才被直接解析。

然後爲我扔掉了這些字段名稱,我會做如下(這裏的例子是一個問題):

IM問題--fields =「名單,,字段名」項#和然後用製表符分隔它們。如果您的字段可能包含選項卡,我可以單獨獲取而不需要其他字段。然後我有一個perl關聯數組和key = value對。

我知道這是不是最有效的,但它確實出現了拉準確的字段解析。

我有在Perl中另一個函數我放在一起,上面寫着類型,字段,查詢,演示文稿(如XML)。它要複雜得多。一旦我清理了更多,我可能會回來重新發布。