使用 SOAP/XML API 从 SharePoint 外部更新 SharePoint Online 项目

Updating SharePoint Online items using SOAP/XML API from outside of SharePoint

我们需要从外部公司的 SharePoint 之外的独立应用程序更新 (CRUD) SharePoint Online 列表项。

此应用程序使用 Soap/XML 调用来调用 SP。

(外部)应用程序已经能够毫无问题地连接和更新本地 SharePoint 2010 列表,但现在我们正在迁移到 SharePoint Online。

外部应用程序可以连接并查看列表项,但当我们尝试更新列表中的项时总是会抛出错误在 SharePoint Online 上

这是(编辑过的)Soap 请求正文和响应:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.microsoft.com/sharepoint/soap/">
   <soapenv:Header/>
   <soapenv:Body>
      <soap:UpdateListItems>
         <soap:listName>XXXXXX GUID</soap:listName>
         <soap:updates>
            <Batch OnError="Continue" ListVersion="1" ViewName="XXX GUID CUT">
   <Method ID="1" Cmd="Update">
      <Field Name="ID">1002</Field>
      <Field Name="Received">1</Field>
      <Field Name="COMSBarcode">RL101150</Field>
      <Field Name="DateReceived">2020-03-03</Field>
      <Field Name="ReceivedBy">andras boros</Field>
      <Field Name="DefectsFaults" />
      <Field Name="Description">This is Box 20/1</Field>
   </Method>
   <Method ID="2" Cmd="Update">
      <Field Name="ID">1003</Field>
      <Field Name="Received">1</Field>
      <Field Name="COMSBarcode">RL101151</Field>
      <Field Name="DateReceived">2020-03-03</Field>
      <Field Name="ReceivedBy">andras boros</Field>
      <Field Name="DefectsFaults" />
      <Field Name="Description">This is Box 20/2</Field>
   </Method>
   <Method ID="3" Cmd="Update">
      <Field Name="ID">1004</Field>
      <Field Name="Received">1</Field>
      <Field Name="COMSBarcode">RL101152</Field>
      <Field Name="DateReceived">2020-03-03</Field>
      <Field Name="ReceivedBy">andras boros</Field>
      <Field Name="DefectsFaults" />
      <Field Name="Description">This is Box20/3</Field>
   </Method>
</Batch>
         </soap:updates>
      </soap:UpdateListItems>
   </soapenv:Body>
</soapenv:Envelope>
4:02
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <UpdateListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
         <UpdateListItemsResult>
            <Results>
               <Result ID="1,Update">
                  <ErrorCode>0x81020026</ErrorCode>
                  <ErrorText>The list that is referenced here no longer exists.</ErrorText>
                  <z:row ows_Title="I changed it online (Andras Boros)" ows_T_x002d_Code="X91" ows_BoxNo="20.0000000000000" 
                  {TL:DR}
                  ows_SMTotalFileCount="1002;#0" xmlns:z="#RowsetSchema"/>
               </Result>
               {TL:DR}
             </Results>
            </UpdateListItemsResult>
        </UpdateListItemsResponse>
    </Body>
</soap:envelope/>

是否可以从完全不同的域中的独立 Web 应用程序更新 SharePoint Online 列表项?

以及我们将如何处理身份验证。

如有任何帮助,我们将不胜感激。

问题是因为 URL 和 WSDL 是针对顶级站点 SharePoint,而不是特定的子站点。

我们提供子站点后 url/wsdl 外部应用程序开始正常工作

创建对 Lists.asmx Web 服务的 Web 引用时,如果您尝试引用错误的子站点,则会抛出错误“The List That is Referenced Here no Longer Exists”。

“如果您的站点 URL 是 http://my_share_point_site, the list.asmx can be found at http://my_share_point_site/sites/main/_vti_bin/lists.asmx?WSDL 并使用该 URL 来引用 API,那么某些事情可能会起作用。

当我们尝试更新在某些 sub_site 下找到的列表时,您的更新将默默地失败。您必须参考 http://my_share_point_site/sites/main/sub_site/_vti_bin/lists.asmx?WSDL 才能更新您的列表。"

这是一篇关于此问题的博客 post: SharePoint: The List That is Referenced Here no Longer Exists

这是一个关于在 SharePoint Online 中调用 lists.asmx 的线程,我们也发现它很有帮助: How to call (_vti_bin) SOAP web service in SharePoint Online 2013 from dot net web application

此外,在 SharePoint Online 之外,建议使用 SharePoint Online CSOM 而不是 Lists.asmx,Lists.asmx 是主要用于 SharePoint 2010 的旧方法:

How To Read Various Objects Using SharePoint Online Client Side Object Model (CSOM)

Complete basic operations using SharePoint client library code