Soapclient 查询 Sharepoint Web 服务

发布于 2024-09-13 19:57:22 字数 3034 浏览 4 评论 0原文

我使用以下代码成功查询服务 但是

<?php
$authParams = array("login" => "username", "password" => "password");
$listName = "{2882F083-8890-4ADA-A1FC-39ED1D63D825}";
$rowLimit = '150';
$wsdl = "http://localhost:89/list.wsdl";
$soapClient = new SoapClient($wsdl, $authParams);
$params = array('listName' => $listName, 'rowLimit' => $rowLimit);
$rawXMLresponse = null;
try{
    $rawXMLresponse = $soapClient->GetListItems($params)->GetListItemsResult->any;
}
catch(SoapFault $fault){
    echo 'Fault code: '.$fault->faultcode;
    echo 'Fault string: '.$fault->faultstring;
}
echo '<pre>' . $rawXMLresponse . '</pre>';

$dom = new DOMDocument();
$dom->loadXML($rawXMLresponse);
$results = $dom->getElementsByTagNameNS("#RowsetSchema", "*");

foreach($results as $result){
    echo $result->getAttribute("ows_LinkTitle")."<br/>";
    echo $result->getAttribute("ows_Body")."<br/>";
}
unset($soapClient);
?>

,属性 ows_Body 不显示,可能是因为未在 $rawXMLresponse 中获取该属性。我如何在响应中得到它?如果 GetListItems 需要额外的查询参数,我该如何格式化它?

下面是 rawXMLresponse 返回的内容

<pre><listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"><rs:data ItemCount="3"><z:row ows_Attachments="0" ows_LinkTitle="Hypothermia and Jellyfish" ows_Modified="2010-08-03 09:43:56" ows_Notice_x0020_Type="Calendar" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Hypothermia and Jellyfish" ows_ID="1" ows_owshiddenversion="2" ows_UniqueId="1;#{B90ECA8C-6FBB-476D-BF67-A05B07268591}" ows_FSObjType="1;#0" ows_Created_x0020_Date="1;#2010-07-29 09:38:52" ows_Created="2010-07-29 09:38:52" ows_FileLeafRef="1;#1_.000" ows_FileRef="1;#Lists/kk3/1_.000"/><z:row ows_Attachments="0" ows_LinkTitle="The Hunting of the Snark" ows_Modified="2010-08-03 09:43:42" ows_Notice_x0020_Type="Public" ows_MetaInfo="2;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="The Hunting of the Snark" ows_ID="2" ows_owshiddenversion="2" ows_UniqueId="2;#{F070D967-97F1-40DF-803B-EF50424D205B}" ows_FSObjType="2;#0" ows_Created_x0020_Date="2;#2010-07-29 09:39:57" ows_Created="2010-07-29 09:39:57" ows_FileLeafRef="2;#2_.000" ows_FileRef="2;#Lists/kk3/2_.000"/><z:row ows_Attachments="0" ows_LinkTitle="Never undersell yourself" ows_Modified="2010-08-03 09:43:29" ows_Notice_x0020_Type="Public" ows_MetaInfo="3;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Never undersell yourself" ows_ID="3" ows_owshiddenversion="3" ows_UniqueId="3;#{4DBEC63E-E25F-4580-B5D8-590C584A6E95}" ows_FSObjType="3;#0" ows_Created_x0020_Date="3;#2010-07-29 09:40:32" ows_Created="2010-07-29 09:40:32" ows_FileLeafRef="3;#3_.000" ows_FileRef="3;#Lists/kk3/3_.000"/></rs:data></listitems></pre>

I successfully query a service with the following code from here

<?php
$authParams = array("login" => "username", "password" => "password");
$listName = "{2882F083-8890-4ADA-A1FC-39ED1D63D825}";
$rowLimit = '150';
$wsdl = "http://localhost:89/list.wsdl";
$soapClient = new SoapClient($wsdl, $authParams);
$params = array('listName' => $listName, 'rowLimit' => $rowLimit);
$rawXMLresponse = null;
try{
    $rawXMLresponse = $soapClient->GetListItems($params)->GetListItemsResult->any;
}
catch(SoapFault $fault){
    echo 'Fault code: '.$fault->faultcode;
    echo 'Fault string: '.$fault->faultstring;
}
echo '<pre>' . $rawXMLresponse . '</pre>';

$dom = new DOMDocument();
$dom->loadXML($rawXMLresponse);
$results = $dom->getElementsByTagNameNS("#RowsetSchema", "*");

foreach($results as $result){
    echo $result->getAttribute("ows_LinkTitle")."<br/>";
    echo $result->getAttribute("ows_Body")."<br/>";
}
unset($soapClient);
?>

However the attribute ows_Body doesnt display, probably because the atribute is not fetched in the $rawXMLresponse. How do I get that in the response? If the GetListItems requires an extra query paramater how do I format that?

below is what is returned from the rawXMLresponse

<pre><listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema"><rs:data ItemCount="3"><z:row ows_Attachments="0" ows_LinkTitle="Hypothermia and Jellyfish" ows_Modified="2010-08-03 09:43:56" ows_Notice_x0020_Type="Calendar" ows_MetaInfo="1;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Hypothermia and Jellyfish" ows_ID="1" ows_owshiddenversion="2" ows_UniqueId="1;#{B90ECA8C-6FBB-476D-BF67-A05B07268591}" ows_FSObjType="1;#0" ows_Created_x0020_Date="1;#2010-07-29 09:38:52" ows_Created="2010-07-29 09:38:52" ows_FileLeafRef="1;#1_.000" ows_FileRef="1;#Lists/kk3/1_.000"/><z:row ows_Attachments="0" ows_LinkTitle="The Hunting of the Snark" ows_Modified="2010-08-03 09:43:42" ows_Notice_x0020_Type="Public" ows_MetaInfo="2;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="The Hunting of the Snark" ows_ID="2" ows_owshiddenversion="2" ows_UniqueId="2;#{F070D967-97F1-40DF-803B-EF50424D205B}" ows_FSObjType="2;#0" ows_Created_x0020_Date="2;#2010-07-29 09:39:57" ows_Created="2010-07-29 09:39:57" ows_FileLeafRef="2;#2_.000" ows_FileRef="2;#Lists/kk3/2_.000"/><z:row ows_Attachments="0" ows_LinkTitle="Never undersell yourself" ows_Modified="2010-08-03 09:43:29" ows_Notice_x0020_Type="Public" ows_MetaInfo="3;#" ows__ModerationStatus="0" ows__Level="1" ows_Title="Never undersell yourself" ows_ID="3" ows_owshiddenversion="3" ows_UniqueId="3;#{4DBEC63E-E25F-4580-B5D8-590C584A6E95}" ows_FSObjType="3;#0" ows_Created_x0020_Date="3;#2010-07-29 09:40:32" ows_Created="2010-07-29 09:40:32" ows_FileLeafRef="3;#3_.000" ows_FileRef="3;#Lists/kk3/3_.000"/></rs:data></listitems></pre>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

内心激荡 2024-09-20 19:57:23

尝试向您的查询添加 ViewFields 参数。这允许您指定在查询中返回哪些字段以及以什么顺序。

viewFields 是一个GetListItems 元素的子元素:

<viewFields>
   <ViewFields>
     <FieldRef Name="LinkTitle" />
     <FieldRef Name="Body" />
   </ViewFields>
</viewFields>

根据您提供的示例,我猜测您要查找的列名称;您可能需要调整以适应 SharePoint 在内部实际调用这些列的任何内容。

ows_ 前缀添加到列名称中,因此除非从结果 XML 中检索,否则您不会以该格式对它们进行寻址。

Try adding a ViewFields parameter to your query. This allows you to specify which fields to return in the query and in what order.

viewFields is a child of the GetListItems element:

<viewFields>
   <ViewFields>
     <FieldRef Name="LinkTitle" />
     <FieldRef Name="Body" />
   </ViewFields>
</viewFields>

Based on the example you gave, I'm guessing at the column names you'd be after; you may need to adjust to whatever SharePoint is actually calling those columns internally.

The ows_ prefix is added to the column name, so you wouldn't address them in that format except when retrieving from the result XML.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文