Dynamics CRM 2011 レポート用フォーマットパラメーター

みなさん、こんにちは。

今回はカスタムレポートで活用できるフォーマットパラメーターを紹介します。
フォーマットパラメーターを利用すれば、日付のフォーマット等、ユーザーの
設定依存の値を、設定にそった形式で表示することが可能になります。

サンプルレポートの準備

1.  SQL Server Business Intelligence Development Studio (BIDS) を
起動して、新規のプロジェクトを作成します。

2. ビジネス インテリジェンス プロジェクトより、レポート サーバー プロジェクト
テンプレートを選択して、任意の名前で作成します。

image

3. 空のレポート サーバー プロジェクトが作成されますので、ソリューション
エクスプローラーよりレポートフォルダーを右クリックして、「新しいレポートの
追加」 をクリックします。

image

4. レポートウィザードが起動しますので、次へをクリックします。

5. データソースの型に Microsoft Dynamics CRM Fetch が存在するか確認します。
表示されない場合には、Microsoft Dynamics CRM 2011 Report Authoring 拡張が
インストールできていないので、インストールをしてください。

image

6. 接続文字列は ServerURL;OrganizationName;HomeRealmURL を指定します。
今回はオンラインの環境なので以下の文字列を指定しました。

https://crm5org93eae.crm5.dynamics.com;crm5org93eae

7. 資格情報をクリックして、接続に利用できるユーザー情報を入力します。

8. 次へをクリックします。

9. クエリのデザイン画面が表示されるので、「クエリ ビルダ」 をクリックします。

10. 以下の Fetch XML を入力して、「! 」 ボタンをクリックします。以下の Fetch XML は
営業案件一覧を取得するクエリです。

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="opportunity">
    <attribute name="name" />
    <attribute name="estimatedvalue" />
    <attribute name="estimatedclosedate" />
    <attribute name="statuscode" />
    <order attribute="estimatedclosedate" descending="false" />
  </entity>
</fetch>

11. 結果が正しければ OK をクリックします。

12. 次へをクリックします。

13. レポートのタイプではテーブルを選択して次へをクリックします。

14. 完了をクリックします。レポートが作成されます。

15. Dynamics CRM 2011 に Internet Explorer で接続します。

16. ワークプレース | レポートをクリックします。

17. リボンより新規ボタンをクリックして、レポートを作成します。

18. 既存のファイルを選択して、先ほど作成したレポートファイルを指定します。

19. 保存して閉じるをクリックしてレポートを作成します。

20. 作成されたレポートを実行すると、以下のように結果が出力されます。
estimatedclosedate はフォーマットされた値、estimatedclosedateValue は
データベースに保存されている日付の生データです。時間は UTC で保存されている
ため、日本の環境の場合、-9 時間の値が表示されます。

image

フォーマットの確認

次に Dynamics CRM ユーザーの形式設定を変更して、レポートがどのように
表示されるか確認してみましょう。

1. ファイルメニューより、オプションをクリックします。

image

2. 形式タブをクリックして、形式を 「日本語(日本)」 から 「英語(米国)」 に変更します。

image

3. OK をクリックした後、再度同じレポートを実行します。初めの日付欄は形式が日本の
yyyy/mm/dd から米国の mm/dd/yyyy になったことが確認できますが、生データである
estimatedclosedateValue は形式が変わりませんでした。

image

フォーマットの適用

次にレポートを修正して、生データもフォーマットを認識するようにしてみましょう。

1. Business Intelligence Development Studio に戻ります。

2. レポート データのパラメーターフォルダを右クリックして、パラメーターの追加を
クリックします。

image

3. 名前およびプロンプトに CRM_ShortDatePattern と入力して、OK をクリックします。

image

4. レポートのデザイン画面で、estimatedclosedateValue を右クリックし、テキスト
ボックスのプロパティをクリックします。

image

5. 左のメニューから番号をクリックして、ユーザー定義を選択します。

image

6. 数式アイコンをクリックして、先ほど作成したパラメーターを指定します。

image

7. OK で画面を閉じて、レポートを保存します。

8. Dynamics CRM 2011 のワークプレース | レポートに戻り、先ほど登録した
レポートの左のチェックボックスにチェックを入れます。

9. リボンの編集ボタンがクリックできるようになるので、編集をクリックします。

10. 保存したファイルを選択して、保存して閉じるをクリックします。

11. レポートが更新されたので再度実行してみます。以下のように生データを
表示している列でも、日付のフォーマットが採用され、mm/dd/yyyy 形式となりました。

image

時刻とタイムゾーン

上記のように、データベースの生データはパラメーターでフォーマットが適用された状態でも
時刻は UTC のままです。これをユーザー設定に基づいた時刻に変換するにはいくつかの
方法が考えられますが、環境によってニーズが違うため、ここでは参考になりそうな情報を提供します。

CRM_UserTimeZoneName パラメーター

上記のパラメーターを利用すると、ユーザーのタイムゾーンの名前が取得可能です。
日本時間の場合は 「Tokyo Standard Time」 という値が返ります。

UserSettings エンティティを利用

FetchXML でユーザーの設定を取得可能です。エンティティ名は UserSettings で
タイムゾーンに関連する列は timezone から始まります。例えば以下の Fetch XML を
利用すると、レポートを実行しているユーザーのタイムゾーン情報が取得できます。

<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
  <entity name="usersettings">
    <attribute name="timezonebias" />
    <attribute name="timezonecode" />
    <attribute name="timezonedaylightbias" />
    <attribute name="systemuserid" />
    <link-entity name="systemuser" from="systemuserid" to="systemuserid" alias="aa">
      <filter type="and">
        <condition attribute="fullname" operator="eq" value="@CRM_FullName" />
      </filter>
    </link-entity>
  </entity>
</fetch>

夏時間を考慮する必要はありますが、カスタムパラメーターを作成し、既定値としてこの
結果を渡すことで、ユーザーのタイムゾーンの差分の数値を取得できます。日本の場合は
UTC+9 のため、-540 が返ります。それと UTC の時刻を用いれば、適切な時間取得できます。

まとめ

今回の記事では、Fetch XML の結果としてフォーマットに対応したものと生データが
取得できることを紹介しました。取得したデータをそのまま表示する場合にはフォーマット
済みの列を利用することになりますが、データ取得後になにかしらの処理が必要な
場合には、生データを利用することになります。その場合にも用意されているフォーマット
パラメーターを利用することで、ユーザー設定に準拠したレポートを作成可能です。

参考: Use Parameter in Reports
https://msdn.microsoft.com/en-us/library/gg309583.aspx

- Dynamics CRM サポート 中村 憲一郎