サンプル: Windows 8 デスクトップ modern SOAP アプリ

 

公開日: 2016年11月

対象: Dynamics CRM 2015

このサンプル コードは、Microsoft Dynamics CRM 2015 および Microsoft Dynamics CRM Online 2015 更新プログラム 向けです。 このサンプル コードは、ダウンロード パッケージの次の場所にあります。

SampleCode\CS\ModernAndMobileApps\ModernSoapApp

Microsoft Dynamics CRM SDK パッケージをダウンロードします。

要件

このサンプルには、Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication および Microsoft.IdentityModel.Clients.ActiveDirectory NuGet パッケージが必要です。 インターネットに接続している場合、プロジェクトのソリューションをロードするとき、これらのパッケージが自動的にダウンロードされインストールされます。

この SDK で提供するサンプル コードを実行するために必要な要件については、「サンプルとヘルパー コードの使用」を参照してください。

使用例

Windows 8 サンプル アプリケーションのメイン画面

サンプル アプリのタイル ユーザー インターフェイス

このサンプルは、SDK アセンブリにリンクしなくても組織の Web サービスへ要求を送信できる、Windows 8.1 のデスクトップ モダン アプリケーションの作成方法を示します。 このサンプルでは、Microsoft Azure の Active Directory 認証ライブラリ (ADAL) と SOAP プロトコルを使用します。 また、サンプルは、実行時の OAuth エンドポイント URL 取得を実行します。

7 つのタイルがメイン アプリケーション ページに表示される中で、取引先企業とタスクのタイルのみがイベント ハンドラー コードに接続されます。 残りのタイルは単なるプレースホルダーです。

このコード例は、Microsoft Dynamics CRM Online サーバーと架空の組織で使用するように構成されていますが、IFD サーバーでも使用できます。

完全なサンプルの主要なセクションだけを示したコード スニペットをこのトピックで後述します。

次のコード スニペットは、組織の Web サービスでユーザーを認証する方法を示しています。

このコードが機能するには、最初に、サポートされる ID プロバイダー (AD FS または Microsoft Azure Active Directory) でアプリケーションを登録する必要があります。 次に、コード内の _clientID と CrmServiceUrl の変数値を設定する必要があります。 クライアント ID の値はアプリケーション登録時に定義されました。 アプリケーションの登録の詳細については、「チュートリアル: Active Directory で CRM アプリを登録する」を参照してください。

次のコード スニペットは、HTTP 要求で SOAP コードを使用して、組織の Web サービスからエンティティ レコードを取得する方法を示しています。 認証アクセス トークンは認証ヘッダーに配置されます。


using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace ModernSoapApp
{
    public static class HttpRequestBuilder
    {
        /// <summary>
        /// Retrieve entity record data from the organization web service. 
        /// </summary>
        /// <param name="accessToken">The web service authentication access token.</param>
        /// <param name="Columns">The entity attributes to retrieve.</param>
        /// <param name="entity">The target entity for which the data should be retreived.</param>
        /// <returns>Response from the web service.</returns>
        /// <remarks>Builds a SOAP HTTP request using passed parameters and sends the request to the server.</remarks>
        public static async Task<string> RetrieveMultiple(string accessToken, string[] Columns, string entity)
        {
            // Build a list of entity attributes to retrieve as a string.
            string columnsSet = string.Empty;
            foreach (string Column in Columns)
            {
                columnsSet += "<b:string>" + Column + "</b:string>";
            }

            // Default SOAP envelope string. This XML code was obtained using the SOAPLogger tool.
            string xmlSOAP =
             @"<s:Envelope xmlns:s='https://schemas.xmlsoap.org/soap/envelope/'>
                <s:Body>
                  <RetrieveMultiple xmlns='https://schemas.microsoft.com/xrm/2011/Contracts/Services' xmlns:i='http://www.w3.org/2001/XMLSchema-instance'>
                    <query i:type='a:QueryExpression' xmlns:a='https://schemas.microsoft.com/xrm/2011/Contracts'><a:ColumnSet>
                    <a:AllColumns>false</a:AllColumns><a:Columns xmlns:b='https://schemas.microsoft.com/2003/10/Serialization/Arrays'>" + columnsSet +
                   @"</a:Columns></a:ColumnSet><a:Criteria><a:Conditions /><a:FilterOperator>And</a:FilterOperator><a:Filters /></a:Criteria>
                    <a:Distinct>false</a:Distinct><a:EntityName>" + entity + @"</a:EntityName><a:LinkEntities /><a:Orders />
                    <a:PageInfo><a:Count>0</a:Count><a:PageNumber>0</a:PageNumber><a:PagingCookie i:nil='true' />
                    <a:ReturnTotalRecordCount>false</a:ReturnTotalRecordCount>
                    </a:PageInfo><a:NoLock>false</a:NoLock></query>
                  </RetrieveMultiple>
                </s:Body>
              </s:Envelope>";

            // The URL for the SOAP endpoint of the organization web service.
            string url = CurrentEnvironment.CrmServiceUrl + "/XRMServices/2011/Organization.svc/web";

            // Use the RetrieveMultiple CRM message as the SOAP action.
            string SOAPAction = "https://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/RetrieveMultiple";

            // Create a new HTTP request.
            HttpClient httpClient = new HttpClient();

            // Set the HTTP authorization header using the access token.
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);

            // Finish setting up the HTTP request.
            HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, url);
            req.Headers.Add("SOAPAction", SOAPAction);
            req.Method = HttpMethod.Post;
            req.Content = new StringContent(xmlSOAP);
            req.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("text/xml; charset=utf-8");

            // Send the request asychronously and wait for the response.
            HttpResponseMessage response;
            response = await httpClient.SendAsync(req);
            var responseBodyAsText = await response.Content.ReadAsStringAsync();

            return responseBodyAsText;
        }
    }
}

SDK ダウンロードの SOAPLogger ツール プロバイダーを使用して、組織の要求に対する SOAP コードを取得できます。SOAPLogger ツールの使用方法の詳細については、「チュートリアル: JavaScript で最近のアプリの SOAP エンドポイントを使用する」を参照してください。

関連項目

モバイル アプリやモダン アプリを作成する
Web サービスでユーザーを認証する
サンプル: Windows 8 デスクトップ modern OData アプリ
Windows ストアの Azure 認証ライブラリ (AAL): 掘り下げた分析
Azure AD を使用した Windows ストア アプリケーションと REST Web サービスの保護 (プレビュー)
SOAP について

© 2017 Microsoft. All rights reserved. 著作権