从Clarity PPM导出项目列表到Excel

时间:2015-04-17 12:34:59

标签: vba soap export-to-excel clarity

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

我已经能够使用该界面成功登录但无法继续... 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

1 个答案:

答案 0 :(得分: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>

在上面用您的会话ID替换SESSIONID。然后替换为您的项目的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>

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

如果您获得项目,则需要处理XML数据。这可能是一项非常复杂的任务。

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

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

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