最新消息:ww12345678 的部落格重装上线,希望大家继续支持。

将SharePoint Online与Dynamics AX旧版应用程序集成 / Integrate SharePoint Online with Dynamics AX Legacy Application

网络文摘 William 2031浏览 0评论
SharePoint Online is a wide spread solution for collaboration. Actual versions of Dynamics AX / 365 provide great integration capabilities and for all other purpose there exists the SharePoint Online Client API. However, legacy applications may not support the required libraries or .NET framework versions to use the SharePoint Online Client API. One way to overcome this issue is to utilize the REST API and communicate via HTTP. Here you can find a step by step guide how to provide an external application access to SharePoint Online via an App: http://www.ktskumar.com/2017/01/access-sharepoint-online-using-postman/

Register an App in SharePoint Online

The first thing you need to do is register an App in SharePoint Online. Open the registration site in a browser: .SharePoint.com/_layouts/15/appregnew.aspx">.SharePoint.com/_layouts/15/appregnew.aspx">https://<sitename>.SharePoint.com/_layouts/15/appregnew.aspx . In my case I’m using a sub site, therefore my URL would look like this: https://insideax.sharepoint.com/sites/development/_layouts/15/appregnew.aspx .Use the form to generate a client ID and a secret code. Provide any title you like. Set the domain to localhost and redirection URL to https://localhost image

Set Permissions for the App

Open the following URL in a Browser: https://insideax.sharepoint.com/sites/development/_layouts/15/AppInv.aspx . Use the Client ID to lookup the created App. In the free text form add the required permissions e.g. access a list. You can find the syntax here: https://www.sumitagrawal.io/sharepoint-add-in-permission-xml-cheatsheet/ If you need access to more than one list, you have to repeat this step. In my case I only need access to one list. The XML Permission Code looks like this:
<AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Read" /> </AppPermissionRequests>
Click the Create button, this will forward you to a form where you can choose which list can be accessed by the app. image

SharePoint Online Tenant ID

To find the Tenant ID open the following URL in your Browser .sharepoint.com/_layouts/15/appprincipals.aspx">.sharepoint.com/_layouts/15/appprincipals.aspx">https://<sitename>.sharepoint.com/_layouts/15/appprincipals.aspx Since I’m using a sub site my URL looks like this https://insideax.sharepoint.com/sites/development/_layouts/15/appprincipals.aspx . There you can find the Tenant ID image

Create a Token

To interact with SharePoint Online you need to generate a token.This is done by sending an HTTP POST requiest with client ID, secret, and desired resource to SharePoint Online. Here is the Code in X++ written in Ax 2009.
str clientID = "<YOUR_CLIENT_APP_ID>"; str secret = "<YOUR_SECRET>"; str tenant = "<YOUR_TENANT>"; str ctx = "00000003-0000-0ff1-ce00-000000000000"; //i.e. SharePoint str sp = "<YOUR_SITE>.sharepoint.com"; str listName = "<NAME_OF_YOUR_LIST>"; // e.g. Customers str listUrl = .sharepoint.com/_api/web/lists/GetByTitle(‚"+listName+"‘)/items">.sharepoint.com/">.sharepoint.com/_api/web/lists/GetByTitle(‚"+listName+"‘)/items">https://<YOUR_SITE>.sharepoint.com/ _api/web/lists/GetByTitle(‚"+listName+"‘)/items; str url = "https://accounts.accesscontrol.windows.net/" +tenant+"/tokens/OAuth/2"; System.Net.WebClient cl = new System.Net.WebClient(); System.Net.WebHeaderCollection headers = new System.Net.WebHeaderCollection(); System.Collections.Specialized.NameValueCollection body = new System.Collections.Specialized.NameValueCollection(); System.Byte[] response; System.Text.Encoding enc = System.Text.Encoding::get_UTF8(); System.String responseText; str xppResponse; int indexOf; int start; int totalLength; int length; str token; ; headers.Add("Content-Type","application/x-www-form-urlencoded"); body.Add("grant_type","client_credentials"); body.Add("client_id",clientID+"@"+tenant); body.Add("client_secret",secret); body.Add("resource",ctx+"/"+sp+"@"+tenant); cl.set_Headers(headers); response = cl.UploadValues(url,"POST",body); responseText = enc.GetString(response); // cut token out of response text indexOf = responseText.IndexOf("access_token"); start = indexOf + 15; totalLength = responseText.get_Length(); length = totalLength – start – 2; xppResponse = responseText; token = responseText.Substring(start,length);  

Query List Elements

The token has a valid timestamp measured in Unix Ticks. So it might be good idea to store the token in a parameter table and only request a new one if it is or will expire soon. However, in this example I go on and query the Customer List.
// .. Code from above cl = new System.Net.WebClient(); headers = new System.Net.WebHeaderCollection(); headers.Add("Accept","application/atom+xml"); headers.Add("Authorization","Bearer "+token); cl.set_Headers(headers); body.Clear(); url = listUrl; responseText = cl.DownloadString(listUrl); xppResponse = responseText; info(xppResponse);
  In this case the response type is an XML. You may parse the XML and only view e.g. the Title Tag or any other fields your are interested in. Here is the Infolog of the complete XML response from the SharePoint Online List. image
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址