共享点文档位置端点真正返回的是什么?

时间:2019-04-09 18:09:35

标签: sharepoint dynamics-crm onenote-api

我正在尝试获取链接到组织的CRM帐户的OneNote笔记本信息。每个帐户都有一个为它创建的OneNote书籍,可以在CRM内部进行访问。

据我了解,如果我要求位置类型为1,则可以使用SharePointDocumentLocation端点(在此处:https://docs.microsoft.com/en-us/dynamics365/customer-engagement/web-api/sharepointdocumentlocation?view=dynamics-ce-odata-9)来获取特定文件的位置。

但是,SharePointDocumentLocationId和SiteCollectionId似乎没有指向我公司网站上的任何内容。我应该在别处获取数据吗?

我开始搜索公司的SharePoint结构,以查看是否可以获取有关这些文档可能位于何处的任何提示。我最初的邮递员请求(使站点脱离根站点)没有显示托管我们的CRM文档的站点(sites / crmdocs)。我最终能够找到该笔记本的存储位置,但是尝试将OneNote笔记本存储在此处会返回错误,因为我们在那里有20,000多个笔记本,因此无法全部获取。据我所知,如果我有想要的特定ID,我就能得到笔记本。

一旦我获取了CRM信息,我就会尝试发送如下请求:

https://graph.microsoft.com/v1.0/sites/ {myCompanyUrl},{siteCollectionId},{sharepointDocumentLocationId} / onenote / notebooks /

SiteCollectionId和SharePointDocumentLocationId来自我的CRM SharePointDocumentLocation请求

我收到的错误是:

The requested site was not found. Please check that the site is still accessible.

1 个答案:

答案 0 :(得分:0)

假设您的环境正在使用现成的共享点网站和共享点文档位置层次结构,则可以使用以下链接结构访问One Note文件:

[SharePointAbsoluteUrl]/[EntityLogicalName]/[RelativeUrl]_[RegardingObjectId]/[RelativeUrl]
  1. 如何获取[SharePointAbsoluteUrl]

查询共享点文档位置实际上是不够的,因为Dynamics 365将此信息存储在另一个称为共享点站点的实体中。这是获取它的方法:

        var query = new QueryExpression("sharepointsite")
        {
            ColumnSet = new ColumnSet("absoluteurl")
        };
        query.Criteria.AddCondition("IsDefault", ConditionOperator.Equal, true);
        var entityCollection = _service.RetrieveMultiple(query);

        var absoluteUrl = entityCollection[0].Attributes["absoluteurl"];

在Web API中,它等效于:

GET https://[Your Org]/api/data/v9.0/sharepointsites?$select=absoluteurl&$filter=isdefault%20eq%20true

只能有一个默认的共享点站点,因此此查询将返回一条记录。

  1. 如何获得其余零件:

获取具有专用于OneNote集成的位置类型的共享点文档位置:

        var query = new QueryExpression("sharepointdocumentlocation")
        {
            ColumnSet = new ColumnSet("regardingobjectid", "relativeurl")
        };
        query.Criteria.AddCondition("locationtype", ConditionOperator.Equal, 1);

        var entityCollection = _service.RetrieveMultiple(query);

在Web API中,它等效于以下get请求,请不要忘记在HTTP Request Headers中添加add 首选项:odata.include-annotations =“ *” ,以便它获取查找lookupologicname字段:

GET https://[Your Org]/api/data/v9.0/sharepointdocumentlocations?$select=relativeurl,_regardingobjectid_value&$filter=locationtype%20eq%201

此查询可以返回许多记录,出于解释目的,我仅在下面的示例中使用第一个记录。

[EntityLogicalName]将是您的((EntityReference)entityCollection[0].Attributes["regardingobjectid"]).LogicalName; 在Web Api中,您的value._regardingobjectid_value@Microsoft.Dynamics.CRM.lookuplogicalname值。

[RelativeUrl]将是您的entityCollection[0].Attributes["relativeurl"]; 在Web Api中,您的value.relativeurl值。

[RegardingObjectId]可以使用此表达式((EntityReference)entityCollection[0].Attributes["regardingobjectid"]).Id.ToString().Replace("-", "").ToUpper();获得 在Web Api中,id将是您的_regardingobjectid_value值,并且您必须删除破折号并将其转换为大写字母,而不用使用任何语言。

您应该以https://mycompany.sharepoint.com/account/A Datum Fabrication_A56B3F4B1BE7E6118101E0071B6AF231/A Datum Fabrication这样的URL结尾