当前位置 : 主页 > 网页制作 > xml >

xml – SAS PROC SOAP更新Sharepoint列表

来源:互联网 收集:自由互联 发布时间:2021-06-13
我试图通过PROC SOAP(SAS生活在Unix GRID上)使用SAS(9.3)更新Sharepoint(2007)列表. sharepoint站点启用了基本身份验证(因为PROC SOAP无法通过NTLM进行身份验证). 我可以使用XML Libname引擎成功从Sharepoin
我试图通过PROC SOAP(SAS生活在Unix GRID上)使用SAS(9.3)更新Sharepoint(2007)列表. sharepoint站点启用了基本身份验证(因为PROC SOAP无法通过NTLM进行身份验证).

我可以使用XML Libname引擎成功从Sharepoint列表中提取数据,但我不能通过PROC SOAP XML数据发回Sharepoint列表Web服务.具体来说,我试图通过http:// [intranet_site] /sites/IT/_vti_bin/Lists.asmx在sharepoint列表中添加和更新项目

SAS LOG输出:

18399  %let RESPONSE=RESPONSE;
18400  proc soap in=REQUEST
18401            out=&RESPONSE
18402            url="http://[intranet_site]/sites/IT/_vti_bin/Lists.asmx"
18403      webusername="[username]"
18404      webpassword="[password]"
18405      webdomain="[domain]"
18406      SOAPACTION="http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"
18407            ;
18408  run;

ERROR: org.springframework.ws.client.WebServiceTransportException: Unauthorized [401]

我已经通过SOAPUI确认传入Lists.asmx Web服务的XML是有效的(当通过SOAPUI手动执行时,我实际上可以在Sharepoint中按预期创建和更新列表项.

由于错误明确指出,由于某种原因,被提供给PROC SOAP的用户身份验证不会使其进入Sharepoint(我在Sharepoint中拥有管理权限,因此我应该拥有正确的权限).令人困惑的是,我可以通过XML Libname提供相同的凭据并将数据拉回来……

**问题**

>如果我通过PROC SOAP传递我的凭据,为什么我无法对Sharepoint进行身份验证?
>是否有任何其他解决方法将此XML传递到Sharepoint(IE:是XML LIBNAME还是PROC HTTP能够通过传入XML来支持这一点)?
>问题出在哪里:SAS与PROC SOAP(我调用程序的方式)或Sharepoint?

…只是为了完整性,可以在下面看到传递到PROC SOAP的示例XML(SOAP 1.1 – 应该由PROC SOAP支持):

<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/">
   <soap:Body>
      <UpdateListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
          <listName>{851DDBB5-1765-444D-9012-0210F006A4AF}</listName>
          <updates>
          <Batch OnError="Continue" ListVersion="1">
              <Method ID="1" Cmd="New">
                  <Field Name='ID'>NEW</Field>
                  <Field Name='Title'>DUMMY</Field>
                   [...shortened for space...]
              </Method>
          </Batch>
          </updates>
      </UpdateListItems>
   </soap:Body>
</soap:Envelope>
我放弃了尝试利用SAS PROC SOAP功能与SharePoint进行交互. NTLM身份验证过于难以克服.我正在寻找一个非常暗淡的未来,无限期地每天多次通过SOAPUI手动执行SOAP XML …当谈到NTLM身份验证功能时,SAS目前还缺乏(基于与SAS支持的讨论,有计划构建此功能,但此时仍在测试中).

然后,我找到了一个解决方案:cURL !!!
有关curl的更多信息,请参见:http://curl.haxx.se/

由于我在Linux环境中使用SAS EG并且在服务器上安装了CURL,因此我可以利用SAS X Command将curl命令传递到控制台.将此与睡眠相结合,允许卷曲时间将SOAP XML传递给SharePoint Web服务并捕获响应.在此之后,我然后拉响应文件来解析它的错误.如果发现错误,我会通过电子邮件向一组支持用户发送电子邮件通知他们错误.到目前为止它看起来运作得相当好.

示例代码如下:

DATA _NULL_;
x "cd /prg/SOAP_Request";  /*Navigate to where my XML is stored */
x "curl -X POST -k --negotiate -u 'MyUsername':MyPassword --digest --ntlm -H ""SOAPAction: ""http://schemas.microsoft.com/sharepoint/soap/UpdateListItems"" "" -H ""Content-Type: text/xml; charset=UTF-8"" -d @request_&CLIENTID._&Exets..xml  http://Shrpnt/sites/IT/_vti_bin/Lists.asmx > /prg/SOAP_Response/response_&CLIENTID._&Exets..xml"; /* issue the CURL command */
x=sleep(20,1); /* Have SAS sleep for 20 seconds to allow CURL to process */
run;

(为了测试CURL命令,我使用Putty来确保我可以成功发出HTTP POST并接收/捕获响应.一旦完成,我转换代码,以便它可以动态地提取已保存的XML使用相同的方法文件并保存响应.

希望这可以帮助遇到这种情况的每个人.我现在可以与SAS交互并驱动SharePoint列表!

网友评论