有人知道如何使用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
答案 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文件中。