LINQPad 用 Dynamics CRM Web API ドライバーが公開されました!

みなさん、こんにちは。

今日は先日公開された、LINQPad 4 および LINQPad 5 用 Dynamics CRM Web API ドライバーを紹介します。

https://crmlinqpadwebapi.codeplex.com/

LINQPad とは

LINQPad (https://www.linqpad.net/) は LINQ クエリを様々なデータソースに対して
実行できる、開発者向けのツールです。また、LINQ クエリだけでなく C#/F#/VB
ステートメントやコードブロックを実行する機能持っています。一部の機能は
無償で提供されていますが、IntelliSense やデバッグ機能は有償となっています。

本 ドライバーで行えること

本 ドライバーは以下の機能を提供します。

- Dynamics CRM 組織に対する LINQ クエリーの実行
- Web API Action と Function の実行
- Dynamics CRM Online の場合、Azure AD への登録

尚、本ドライバーは Dynamics CRM 2016 設置型、Dynamics CRM 2016 IFD、および
Dynaimcs CRM Online 2016 Update 以降でのみ利用が可能です。

ドライバーのインストール

1. LINQPad がインストールされていない場合、https://www.linqpad.net/ よりダウン
ロードしてインストールしてください

2. https://crmlinqpadwebapi.codeplex.com/ へブラウザで接続して、download
ボタンより CRMLinqPadDriverWebAPI.lpx ファイルをダウンロードします。

3. LINQPad を開いて、画面左上の Add connection リンクをクリックします。

image

4. 開いた画面で View more drivers… ボタンをクリックします。

image

5. 次の画面で Browse ボタンをクリックします。

6. ダウンロードした CRMLinqPadDriverWebAPI.lpx を選択して “Open” をクリックします。

image

事前準備

本ドライバーを利用するにあたり、利用方法によって事前に準備が必要となります。

[設置型]
設置型の場合は特別な準備は必要ありません。

[IFD]
IFD を利用している場合、Windows Server 2012 R2 AD FS またはそれ以降の AD FS に
対して、アプリケーションを登録する必要があります。

1. AD FS サーバーに管理者権限でログインします。

2. PowerShell を起動して、以下のコマンド実行してアプリケーションを登録します。
※ GUID と名前は任意のものをご利用ください。RedirectUri はドライバー側で埋め
混んでいるため、変更しないでください。

> Add-AdfsClient -ClientId 5ee98d47-38d1-4db5-b5c2-9a60f88c0076 -Name "CRM For Linqpad" -RedirectUri https://localhost/linqpad

3. 登録した ClientId は後程利用するため、控えておきます。

[オンラインの場合]
オンライン環境でもアプリケーションの登録が必要となりますが、Dynamics CRM
オンラインが登録されている Azure AD に対して権限を持っている場合には、事前の
作業は必要ありません。もし権限がない場合は、管理者の方にアプリケーションを
登録してもらうか、異なる Azure AD テナントにアプリケーションを登録して頂き、
ClientId を取得してください。異なる Azure AD に登録した ClientId を利用する場合、
セキュリティ上の理由により都度ログインおよびコンセントの同意が必要となります。

アプリケーションの登録については以下の記事をご覧ください。

チュートリアル: Azure Active Directory に CRM アプリを登録する

この際、RedirectUri は https://localhost/linqpad をご利用ください。

ドライバーの利用

ドライバーの利用はも Dynamics CRM の環境によって一部異なります。

1. データコンテキストの選択画面で Dynamics CRM Web API Linq Pad Driver を選択して
Next をクリックします。

image

2. IFD の場合やオンライン環境で既にアプリケーションを登録している場合、
“Register to Azure AD automatically” チェックを外して、ClientId を入力します。

image

3. “Login to CRM” ボタンをクリックして、任意の組織のログインします。
この際、設置型の場合は 「On-premises」を選択し、認証方法として
「Active Directory」を選択し、IFD の場合は「Internet Facing Deployment」
を選択します。オンライン環境の場合は「Office 365」を選択してください。

image

4. オンライン環境を選択した場合で、ClientId を渡さない場合には、ドライバー
がアプリケーションを自動登録します。その際、権限が足りなければ認証の
ダイアログが表示されます。Azure AD に対する管理権限があるユーザーで
ログインします。

image

5. アプリケーションの登録後、メタデータを取得します。完了するまで待機します。
この際、IFD 環境の場合、またはオンライン環境でコンセントを利用する場合は
ユーザー認証画面が出ますので、Dynamics CRM にログインしたユーザー情報を
指定します。

image

6. ダウンロードが完了したら、“Exit” ボタンをクリックします。スキーマ解析
が完了すると、以下のようにエンティティが表示されます。

image

LINQ クエリの実行

1. まずクエリウィンドウ右上にある Connection タブから、作成した接続を
選択します。複数の接続がある場合は適切なものを選択してください。

image

2. 以下のように LINQ クエリを入力します。

image

3. Play” ボタンをクリックするか F5 キーを押下して実行します。この際
IFD 環境の場合は、ユーザー認証の画面が出ますので、ログインします。

4. 結果の右側にある SQL タブを選択すると、実際にリクエストを送った
Web API のアドレスが表示されます。

image

ナビゲーションの利用

ナビゲーションクエリを利用する場合、ByKey 関数を使用します。

1. 以下のように LINQ クエリを入力します。レコードの ID は既存の
取引先企業のものを指定してください。

image

2. クエリを実行して結果を表示します。

image

SQL タブに表示される URL は以下のようになります。

https://crm2016training8.crm7.dynamics.com//api/data/v8.0.1.79/accounts(69e3ec47-60d5-e511-80e3-c4346bc4ef3c)/contact\_customer\_accounts?$select=fullname

Unbound Function の実行

Unbound Function を実行するには、以下の手順で操作します。

1. ”Language” を “C# Statement” に変更します。

image

2. 以下のコードを入力して、WhoAmI Function を実行します。

image

3. 処理を実行して結果を確認します。

image

SQL タブに表示される URL は以下のようになります。

https://crm2016training8.crm7.dynamics.com//api/data/v8.0.1.79/WhoAmI()

Bound Function の実行

Bound Function を実行するには、以下の手順で操作します。

1. 以下のコードを入力します。ユーザーの ID は上記 WhoAmI で取得したものと
差し替えます。

image

2. 処理を実行して結果を確認します。

image

SQL タブに表示される URL は以下のようになります。

https://crm2016training8.crm7.dynamics.com//api/data/v8.0.1.79/systemusers(8dd78a80-c930-490a-bf06-64e57804b276)/Microsoft.Dynamics.CRM.RetrieveUserPrivileges()

Actions

Action も Function と同様に機能します。

今後の予定

今回提供されるドライバーはオープンソースとして提供されているため、必要に
応じて自分で書き換えることもできますが、是非フィードバックも送ってください。
フィードバックは日本語でも英語でも結構です。

- 中村 憲一郎

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります