1

有人知道如何使用 SOAP 接口 (XOG PPM) 和 VBA (Excel) 从 Clarity PPM获取项目列表到 excel 吗?

我已经能够使用该界面成功登录,但无法更进一步……XML 文档对我来说不够清晰。

这是我如何记录和获取会话 ID

Sub Soap_LOGIN()
' RKO
' add MS XML v6 reference : tool/Reference

 'Set and instantiate our working objects
    Dim Req As Object
    Dim sEnv As String
    Dim Resp As New MSXML2.DOMDocument60
    Set Req = CreateObject("MSXML2.XMLHTTP")
    Set Resp = CreateObject("MSXML2.DOMDocument.6.0")
    Req.Open "Post", "http://SERVER/niku/xog", False
    Req.setRequestHeader "Content-Type", "text/plain; charset=UTF-8"
    Req.setRequestHeader "soapaction", "http://www.niku.com/xog/Query/Login" ' per the documentation
    Req.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    Req.setRequestHeader "Connection", "keep -alive"



 ' we create our SOAP envelope for submission to the Web Service
     sEnv = sEnv & "<?xml version=""1.0"" encoding=""utf-8""?>"
     sEnv = sEnv & "<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">"
     sEnv = sEnv & " <soap:Body>"
     sEnv = sEnv & "  <Login xmlns=""http://www.niku.com/xog/Query"">"
     sEnv = sEnv & "   <TenantID>Clarity</TenantID>"
     sEnv = sEnv & "   <Username>XXXX</Username>"
     sEnv = sEnv & "   <Password>YYYY</Password>"
     sEnv = sEnv & "  </Login>"
     sEnv = sEnv & " </soap:Body>"
     sEnv = sEnv & "</soap:Envelope>"
     MsgBox sEnv


' Send SOAP Request
    Req.send (sEnv)

' Display results in MessageBox
    'MsgBox Req.responseText
    Resp.LoadXML Req.responseText
    MsgBox (Req.responseText)
    MsgBox Resp.Text '<--- This is the Session ID


  'clean up code
    Set Req = Nothing
    Set Resp = Nothing



End Sub
4

1 回答 1

2

如果您已成功登录并获得会话 ID,那么您就快到了。您可以创建一个 SOAP 请求来请求项目:

<soap:invoke endpoint="${XOGURL}/niku/xog" var="xogoutput">
    <soap:message>
        <soap-env:Envelope>
            <soap-env:Header>
                <xog:Auth>
                    <xog:SessionID>SESSIONID</xog:SessionID>
                </xog:Auth>
            </soap-env:Header>
            <soap-env:Body>
                <XOGREQUEST/>
            </soap-env:Body>
        </soap-env:Envelope>
    </soap:message>
</soap:invoke>

在上面将 SESSIONID 替换为您的会话 ID。然后替换为您的项目的 XML 读取请求。这方面的一个例子是:

<NikuDataBus xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/nikuxog_read.xsd">
  <Header version="6.0.11" action="read" objectType="project" externalSource="NIKU">
  </Header>
  <Query>
      <Filter name="projectID" criteria="EQUALS">test</Filter>
  </Query>
</NikuDataBus>

将 test 替换为您想要返回的项目的 ID。根据您的 Clarity 配置,这可能会返回大量数据,仅针对一个项目。在 Clarity XOG 和集成指南中,它将展示如何扩展上述过滤器以获取更多项目。或者,在任何 Clarity 文档中下载 XOG 客户端以从 xml 示例文件夹中获取示例 project_read.xml。

如果您拿回您的项目,您将需要处理 XML 数据。这可能是一项相当复杂的任务。

如果您只想要一个项目列表,一个更简单的机制可能是在 MS Excel(菜单/数据/来自 Otehr 源/SQL)中编写 SQL,并使用 ODBC 连接直接连接到 Clarity 数据库。

其他替代方法是编写报告(如果您使用 SQL Server,那么您可以为此使用 SSRS)。

另一种最适用于简单集成的方法可能是在 Clarity 服务器上编写 GEL 脚本以提取项目列表并将结果复制到 FTP 服务器上的 CSV 文件中。

于 2015-10-22T21:34:55.047 回答