帳票を制する#04|CRM編|Word Template・Power Automate・SharePoint・Source of Truth-顧客接点ドキュメントをどう設計するか

こんにちは。室長こと、吉島良平(Microsoft MVP for Business Applications | Microsoft Regional Director)です。
8月といえば甲子園です。
私は大学時代を神戸で過ごしたので、甲子園は電車で行ける距離にある場所でした。スタジアムの雰囲気、砂の内野、アルプススタンドの応援。あのエネルギーは、何度行っても圧倒されます。
今年も夏の大会が始まり、地元のチームが出場するとなるとついテレビの前に座ってしまいます。特に投手です。最後の夏に全力で投げる高校生の姿-150球近く投げ続けて、それでもマウンドを譲らないあの表情には、毎年なぜか胸を打たれます。体力も限界で、脚がつってきては屈伸し、頭も働いているかどうかわからない状況で、それでも一球ずつ丁寧に投げる。プロにはない何かが、そこにある気がします。
テクノソフトの11カ国17拠点のメンバーも、それぞれの夏を過ごしています。オーストラリアは冬ですし、インドネシア等は常に夏ですけどね苦笑
気候も、文化も、時差もまったく違う場所にいるメンバーと一緒に仕事をしていると、「夏」の感覚も人それぞれだなと思います。でも甲子園の話をすると、なぜか海外メンバーも興味を持つんですよね。「日本の高校球児が一堂に会し、そんなに熱く闘うのか」と。
さて、今日もブログを書きます。
帳票を制するシリーズ、第4弾です。
第2弾のBusiness Central編、第3弾のFinance & Operations編と書いてきて、今回はDynamics 365 CRM側-Sales・Customer Service・Field Serviceの帳票に踏み込みます。
正直に言います。CRMの帳票は、BCやFOより「どれを選ぶか」が分かりにくいです。
BCは4つのアプローチがフラットに並んでいて整理しやすい。FOは4つの柱が役割分担されていて設計の根拠が明確。でもCRMは選択肢の数が多く、しかも機能の境界線が重なっている部分が多い。Word TemplateでできることとDocumentsCorePackがカバーする範囲、Power Automate PDFとPower Pagesの使い分け、SSRSとFetchXMLの関係。これを整理せずに進むと、プロジェクトの中盤で「あの要件、どこで実装するんでしたっけ?」という混乱が必ず起きます。
今回はその境界線を、できるだけ明確に整理します。
① CRMの帳票は「選択肢の多さ」が最大の罠
BCとFOと決定的に違うのは、CRMには「これが標準帳票基盤」と言える単一の仕組みが存在しないことです。
Dynamics 365 CRM(Sales・Customer Service・Field Service)の帳票・ドキュメント出力に関わる選択肢を並べると以下のようになります。
| 機能 | 主な用途 | 基盤 |
|---|---|---|
| Word Template | 1レコード起点のドキュメント生成(見積書・提案書・顧客レター) | Dataverse標準 |
| Excel Template | 集計・分析系の定型出力(パイプライン分析・ケース傾向) | Dataverse標準 |
| SSRS+FetchXML | 複雑な一覧帳票・ページ分割・既存案件・印刷帳票 | Dataverse標準 |
| Power Automate+PDF変換 | 帳票生成・保存・送信を業務フローに組み込む自動化基盤 | Power Platform(別途ライセンス) |
| SharePoint統合 | 生成した帳票のクラウド保管・共有・バージョン管理・顧客配布基盤 | Microsoft 365 |
| Power Pages | 外部ユーザー向けセルフサービスポータル(ドキュメント参照・ダウンロード) | Power Platform(別途ライセンス) |
| ISV(DCP・Conga等) | 複雑・大量・自動化要件を補完するドキュメント生成ソリューション | ISVライセンス |
| 電子署名(DocuSign・Adobe Sign) | 見積→契約→署名フローの完結 | 外部SaaS(別途ライセンス) |
さらにDataverseがすべての基盤として存在し、カスタムPower Appsで独自のドキュメント生成UIを作ることもできます。
BCにはRDLCとWord Layoutという明確な役割分担があり、FOにはSSRS・ER・Financial Reportingという専門分化があります。CRMにはそれがない。「何でもできそう」な選択肢が並んでいる分、「これはどれでやるべきか」の判断が最も難しいのがCRM帳票の特徴です。
② Word Template-最も手軽、でも限界がある
Word TemplateはDynamics 365の標準機能として、モデル駆動型アプリ(Sales・CS・FSなど)から直接利用できるドキュメント生成機能です。Microsoft Word上でコンテンツコントロールを使ってフィールドをマッピングし、Dataverseのレコードデータを差し込む仕組みです。
見積書・提案書・契約書・顧客レター・ケースサマリーなど、1レコードを軸にしたドキュメントに向いています。テンプレートを登録すればエンドユーザーがWord文書をワンクリックで生成でき、開発者への依存度が低い点が魅力です。
ただし、限界があります。
最も注意すべき点は、一対多リレーションシップの扱いです。標準のWord Templateでも、テンプレート作成時に選択した1:N関連の子レコード(Quote Product・Opportunity Product・Work Order Productなど)を表形式で出力することは可能です。ただし、大量の関連レコードの出力には制約があり、複雑なフィルタリング・並び替え・条件付き書式・多段階のネスト構造には対応できません。実務レベルの明細帳票を標準だけで仕上げるには限界があります。見積明細や作業明細を本格的に制御したい場合は、DocumentsCorePack、Power Automate+HTML/PDF変換、またはSSRS系の選択肢を検討する方が安全です。
また、条件分岐・計算式・ページレイアウトの細かい制御など、複雑なロジックは標準機能では対応が難しいです。「Wordで作れるなら簡単だろう」という先入観でスコープを決めると、後から設計を変更することになります。
Word Templateでは {{ }} のような構文をテンプレートに直接書くのではなく、WordのXML Mapping PaneからDataverseフィールドをコンテンツコントロールとして配置する形になります。Dynamics 365の「テンプレートのダウンロード」でエンティティのフィールド一覧を含むWordファイルを取得し、コンテンツコントロールを配置してアップロードする流れです。
③ Excel Template-集計・分析系の定型出力
Excel TemplateもWord Templateと同様に、モデル駆動型アプリ標準の機能です。DataverseのビューやエンティティデータをExcelテンプレートに流し込み、ピボットテーブル・グラフ・数式を含む出力が可能です。
Salesの商談パイプライン分析、Customer Serviceのケース傾向レポート、Field Serviceの作業実績集計など、複数レコードを集計してExcelで出力したい用途に向いています。Power BIほどインタラクティブではないが、Excelとして手元で加工できる点が現場では評価されます。
Word Templateと同様、複雑な条件分岐・ページ単位の定型帳票には不向きです。「印刷して承認を回す」用途よりも、「データをExcelに出してそのまま作業に使う」用途に向いています。
④ SSRS+FetchXML-既存案件・印刷帳票で今も使われる選択肢
CRMにもSSRSレポートが存在します。現在も利用可能であり、既存案件・オンプレからの移行・ページ分割印刷・PDF帳票といった用途では有効な選択肢です。ただし、FOのSSRSとは設計がまったく異なります。
FOのSSRSはX++・RDP・Controllerという開発スタックで動きますが、CRMのSSRSはRDL形式のReporting Servicesレポートです。歴史的にはFetchXML・SQLベース・Dataverseレポートが混在していましたが、現在のDataverse Online環境では実質的にFetchXMLをデータソースとするSSRSレポートとして考えると分かりやすいです。Visual StudioにDynamics 365 Report Authoring Extensionを導入し、FetchXMLベースのRDLレポートを設計して、SolutionとしてDataverse環境にデプロイする形になります。BCで使われるRDLC(クライアントサイドレイアウト形式)とも異なる点に注意が必要です。
FetchXMLはDataverseのテーブル構造・リレーションシップに沿ってデータを取得するためのXMLベースのクエリ言語で、SQLに近い役割を担います。ただしSQLそのものではなく、複雑な集計・クロス集計・多段階サブクエリには限界があります。
複数エンティティにまたがる一覧帳票・条件による分岐が必要な帳票・ページネーションが必要な長文帳票など、Word TemplateやExcel Templateでは対応できない複雑な要件に使われます。
SSRSはCRMにおいて、新規投資の中心ではなく、Power Platform系(Power BI・Power Automate・Canvas Apps)へ軸足が移りつつある技術です。完全に廃止されているわけではありませんが、新規プロジェクトでの採用は目的を明確にした上で判断することを推奨します。
Power AutomateはCRM帳票の文脈でも重要な役割を担います。レコードの作成・更新・承認などのトリガーに連動して、自動的にPDFを生成・送信・保存する仕組みを構築できます。なお、Power AutomateはDynamics 365 CRMに含まれる機能ではなく、Power Platformとして別途ライセンスが必要です。利用するコネクタや環境によって追加のライセンス要件が発生する場合があり、ライセンス体系は変更されることもあるため、導入前に最新情報を確認することを推奨します。
典型的な使い方は、見積承認完了→見積PDF生成→顧客へメール送信、ケースクローズ→対応報告書PDF生成→SharePointに自動保存、Field Serviceの作業完了→作業報告書PDF生成→顧客と内部へ同時送信、といったパターンです。
PDF生成は、Wordテンプレート+Word Online connector、SharePoint / OneDrive経由の変換、HTML→PDF変換、またはISV connectorを組み合わせて実装することが多いです。なお、Dataverse / モデル駆動型アプリ側でもPDF生成機能が拡充されており、帳票の複雑さによってはPower Automateを介さずに直接生成できるケースも増えています。Power Automate自体は帳票エンジンではなく、生成・変換・保存・送信・承認をつなぐ自動化基盤として位置づけるのが適切です。
「CRMで帳票を生成→SharePointに自動保存→Power Automateで顧客へ配布」というフローは、業種を問わずよく見られるアーキテクチャです。SharePointにドキュメントを集約することで、バージョン管理・アクセス権管理・外部共有・承認フローをSharePointの仕組みで一元管理できます。Power Pagesと組み合わせれば、顧客がポータルから最新の帳票を自分でダウンロードする体験も実現できます。Dynamics 365 CRMにはSharePoint統合が標準で用意されており、モデル駆動型アプリ上からSharePointの文書ライブラリを直接操作できます。
⑥ Power Pages-外部ポータル向けドキュメント
Power PagesはDataverseデータを外部向けに公開するためのポータル基盤です。顧客・パートナー・仕入先など、CRMライセンスを持たない外部ユーザーがドキュメントを参照・ダウンロードする用途に使われます。Power PagesはDynamics 365 CRMとは別のPower Platformライセンスが必要であり、外部ユーザー数に応じた課金が発生するため、導入前にライセンスコストの試算が必要です。
見積書・請求書・サービス報告書を顧客がセルフサービスでダウンロードできる仕組み、パートナーポータルでの発注書・契約書の確認、Field Serviceと組み合わせた顧客確認ポータル(作業完了報告の参照・承認)、といった場面で活用されます。
帳票の「生成エンジン」というよりも、生成されたドキュメントを外部ユーザーに届けるための「配信基盤」として位置づけると分かりやすいです。Power Pagesの本質は帳票配布ではなく、顧客・パートナーへのセルフサービス体験の提供です。「顧客が自分でダウンロードできる」「自分でステータスを確認できる」という体験の実現が主目的であり、帳票はその体験の一部として位置づけるのが適切です。
Power Pagesの外部ユーザーはDataverseユーザーではないため、Web Role・Table Permission・SharePoint文書管理の権限設計を正しく行わないと、必要なドキュメントが見えない、または見えてはいけないドキュメントが見えるリスクがあります。特にSharePoint文書をPower Pages経由で公開する場合、DataverseのTable PermissionとSharePoint側の権限は別管理です。Dataverse側の権限が正しく設定されていても、SharePoint権限が不足していると外部ユーザーはドキュメントにアクセスできません。逆にSharePoint側だけを公開状態にすると、Power Pagesのアクセス制御を介さない経路でドキュメントが見えてしまうリスクがあります。両方の権限設計を合わせて設計・テストすることが必須です。
⑦ ISVソリューション-標準の限界を超える
CRM帳票領域にはISVソリューションという選択肢があります。代表的なのがDocumentsCorePackです(MScrm-Addons社)。他にもConga(文書生成・契約管理・eSign統合)、Nintex DocGen、Encodian、カスタムHTML→PDF変換など複数の選択肢があります。要件・予算・既存ライセンス環境によって最適解は変わるため、ISVを検討する際は複数を比較することを推奨します。
DocumentsCorePackは、標準のWord TemplateやPower Automateでは対応が難しい複雑な要件を、テンプレートベースで解決するためのソリューションです。標準機能では難しい一対多の明細行(繰り返し行)の完全対応、条件分岐・計算フィールドをテンプレート内で制御、複数エンティティをまたいだドキュメント結合、承認ワークフローとの統合、バルク生成(大量レコードの一括PDF出力)、SharePoint・OneDrive・メールへの自動配信、といった機能を提供します。
Word・PDF・Excelのいずれの出力形式にも対応しており、業務担当者がWord上でテンプレートを設計・メンテできる点が評価されています。ライセンス体系は契約内容・利用形態・ユーザー数によって異なるため、導入前にMScrm-Addons社または販売パートナーに確認することを推奨します。バルク生成・Power Automate連携・サーバーサイド処理の有無によって必要なプランが変わる場合があります。
テクノソフトの案件でも、CRMの帳票要件が複雑になったプロジェクトではDocumentsCorePackの導入を検討するケースがあります。ただし、まず標準機能でどこまで対応できるかを検証してからISVを検討する順番は、BCやFOと同じです。
⑧ 電子署名-見積・契約・サービス完了フローの完結
CRMの帳票を語るとき、電子署名は避けて通れないテーマです。「帳票を生成する」だけでは業務が完結しない。見積→承認→契約→署名→保管、という一連のフローをCRM上で完結させる要件が、特に営業・フィールドサービス領域で増えています。
主な選択肢はDocuSign(Salesforce系でも実績が多く、Dynamics 365向けのコネクタも提供)とAdobe Sign(Microsoft 365との統合が深い)です。両製品ともPower Automateと連携でき、「帳票PDF生成→署名依頼送付→署名完了→CRMレコード更新→SharePoint保管」という一気通貫のフローを構築できます。
電子署名サービスはDynamics 365 CRMとも、Power Automateとも別途ライセンスが必要です。また、電子署名の法的有効性は国・地域によって異なるため、グローバル展開案件では各拠点の法務確認が必要です。
DocumentsCorePackもAdobe Sign・DocuSignとの統合機能を持っており、テンプレート生成から署名依頼までをISVソリューション内で完結させる構成も可能です。電子署名を要件として持つプロジェクトでは、ISV選定の段階でeSign統合の深さを評価軸に加えることを推奨します。
⑨ BC・FO・CRMの帳票、それぞれ何が違うか
シリーズ通じてBCとFOを比較してきましたが、CRMを加えて三者を整理します。
| 観点 | Business Central | Finance & Operations | CRM(Sales・CS・FS) |
|---|---|---|---|
| 設計思想 | 現場が扱いやすい帳票 | グローバルで統制された帳票 | 顧客接点に紐づくドキュメント |
| 開発スタック | AL言語+VS Code | X+++Visual Studio | Power Platform(C# Plug-in / JS WebResource) |
| 帳票の構造 | 4つのアプローチがフラットに並列 | 4つの柱が完全専門分化 | 選択肢が多く機能が重複している |
| 主な帳票 | 請求書・発注書・在庫帳票 | 業務帳票・財務諸表・電子インボイス | 見積書・提案書・契約書・サービス報告書 |
| 習得コスト | 低〜中(業務担当者が自走しやすい) | 高(専門分化・グローバル対応の深さ) | 中(選択肢の多さが判断を難しくする) |
| ターゲット | 中堅・中小企業 | 大企業・グローバル企業 | 顧客接点を持つすべての企業 |
開発スタックも異なります。BCはAL言語、FOはX++、CRMはPower Platform(Power Automate・Power Apps・Dataverse)が中心で、カスタム開発が必要な場合はC#のPlug-inまたはJavaScriptのWebリソースになります。三者はそれぞれ別のスキルセットを要求します。
⑩ 結局どれを選ぶか-Source of Truthから始める
CRMの帳票設計で最も難しいのは、どのテンプレートを選ぶかではありません。その帳票の「真実の源泉(Source of Truth)」がどこに存在するのかを決めることです。
見積書はSalesなのか、Business Centralなのか、Finance & Operationsなのか、あるいはCPQなのか。その判断を誤ると、どれだけ美しいテンプレートを作っても、将来データが二重管理されることになります。「CRMで帳票を持つべきか、ERPで持つべきか」という問いは、帳票の話というより、データの所有権とビジネスプロセスの設計の話です。
さらに重要なのは、帳票の「所有者」とデータの「所有者」は必ずしも一致しないという点です。たとえば「帳票はCRMで生成するが、価格のマスターはFOが正」という構成は珍しくありません。この場合、CRMの見積エンティティに価格を持たせるのか、FOの品目テーブルをリアルタイムで参照するのかで、帳票の精度・整合性・実装難易度がまったく変わります。テンプレートの設計に入る前に、フィールドごとのデータ所有製品を決めておくことが、CRM帳票設計の最も重要な前提作業です。
なお「見積フェーズはCRMが真実の源泉、受注後はERPが真実の源泉」という設計も珍しくありません。フェーズごとに所有製品が変わる場合は、その移行タイミングと同期ルールも帳票設計の前提として明確にしておく必要があります。ERPとCRMが並走するプロジェクトでは、この判断を先に固めてから帳票の実装技術を選ぶ順番を守ってください。
その上で、具体的な選択肢の判断は以下の順番で考えると整理しやすいです。
Step 1:誰が受け取るか
外部の顧客・パートナーが受け取るドキュメント(見積・契約・報告書)か、社内業務用のドキュメントか。外部向けであれば品質・ブランディングの要求が高くなる。
Step 2:1レコードを出力するか、複数レコードを集計するか
1レコード(1件の見積・1件のケース)のドキュメントならWord Template起点。複数レコードの集計・一覧ならExcel TemplateまたはSSRS+FetchXML。
Step 3:明細行(繰り返し行)があるか
見積明細・作業明細・請求明細など繰り返し行が必要な場合、標準Word Templateでは限界がある。DocumentsCorePackまたはPower Automate+カスタムHTML→PDF変換を検討する。
Step 4:自動トリガーが必要か
承認完了・ステータス変更・定期バッチなど、フロー連動で自動生成・配信が必要な場合はPower Automateを組み合わせる。
Step 5:外部ユーザーがアクセスする必要があるか
顧客・パートナーがセルフサービスでドキュメントを参照・ダウンロードする要件があればPower Pagesを検討する。
Step 6:複雑・大量・承認ワークフロー・電子署名が絡むか
上記ステップで解決しない複雑要件、バルク生成、承認フロー統合、電子署名が必要な場合にISVソリューション(DocumentsCorePack・Conga等)を検討する。標準機能の限界を確認してからISVに進む順番を守る。電子署名が要件にある場合は、ISV選定の段階でDocuSign・Adobe Sign連携の深さも評価軸に加える。
1. 「どれでもできそう」は罠-Word Template・Excel Template・SSRS・Power Automate・SharePoint・Power Pages・ISV・電子署名と選択肢が多く機能が重複しているため、最初に使い分けを決めないと混乱する
2. 明細行の要件が境界線-繰り返し行が必要かどうかで、標準機能で対応できるかが大きく変わる
3. Power Automateは帳票エンジンではなく接着剤-SharePoint・電子署名・CRMレコードをつなぐ自動化基盤として活用する
4. ISVは標準の限界を確認してから-複数のISVを比較し、要件・予算・eSign統合の要否で選ぶ
5. Source of Truth(真実の源泉)を先に決める-帳票をどの製品で「持つか」を決めずに実装すると、後からデータの二重管理が発生する
BCやFOに比べて、CRMの帳票設計は「正解が1つではない」ことが多い。要件・チームのスキルセット・ライセンスコスト・運用体制を総合的に判断して選ぶことになります。
次回は、このシリーズの総まとめとして「Dynamics 365全製品横断の帳票設計指針」を書く予定です。BC・FO・CRMを横断して、製品選定から帳票設計まで一気に整理します。
📌 技術者・AI向け補足:CRM帳票開発の実装留意点
最近はAIがブログを読んで情報を整理するケースも増えてきました。技術者の方やAIが参照しやすいよう、実装レベルの留意点をまとめておきます。意思決定層の方はここまで読まなくて大丈夫です。
Word Template実装
Word Templateの実装は、Wordのコンテンツコントロール(開発タブ)を使ってフィールドをマッピングします。テンプレートのXML構造はDataverseのエンティティスキーマに対応しており、Dynamics 365の「テンプレートのダウンロード」からエンティティのフィールド一覧を含むWordファイルを取得し、コンテンツコントロールを配置してアップロードする流れです。
実装上の重要ポイントとして、Word Templateでは {{ }} のような構文をテンプレートに直接書くのではなく、WordのXML Mapping PaneからDataverseフィールドをコンテンツコントロールとして配置する形になります。
一対多リレーションシップの制約については本文②で触れた通りです。標準Word Templateでも1:N関連の子レコードを出力できるケースはありますが、大量の関連レコード出力に制約がある点・複雑な明細制御・集計には弱い点を設計段階で把握しておく必要があります。なお制約の挙動は環境やテンプレート構成によって変わる場合があるため、本番相当のデータで必ず検証してください。日付・通貨・選択肢フィールドのフォーマットはロケール設定に依存するため、多言語テナントでは出力結果を必ず確認してください。
FetchXML 基本構造
CRMのSSRSレポートはFetchXMLでデータを定義します。FetchXMLはDataverse専用のXMLベースクエリ言語で、SQLのSELECT・JOIN・WHERE・ORDER BYに相当する表現ができます。
基本的なFetchXML構造(Opportunity + Account の結合例):
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
<entity name="opportunity">
<attribute name="name" />
<attribute name="estimatedvalue" />
<attribute name="closedate" />
<attribute name="statecode" />
<link-entity name="account" from="accountid" to="customerid" alias="acct">
<attribute name="name" alias="accountname" />
<attribute name="telephone1" alias="accountphone" />
</link-entity>
<filter type="and">
<condition attribute="statecode" operator="eq" value="0" />
<condition attribute="closedate" operator="next-x-months" value="3" />
</filter>
<order attribute="closedate" descending="false" />
</entity>
</fetch>
FetchXMLの主な制限として、クロス集計(PIVOT)はネイティブでは対応していないためSSRSのMatrix機能で補う必要があります。サブクエリは link-entity の入れ子で表現しますが、深くなるほど可読性・性能が低下します。大量データの集計はPower BIやSynapse Analytics側で処理する設計を検討してください。
FetchXMLのデバッグにはAdvanced Find(高度な検索)またはFetchXML BuilderというXrmToolBoxプラグインが有効です。Visual Studioから直接検証するよりもはるかに効率的です。
Power Automate PDF生成フロー
Power Automateを使ったPDF生成の基本フローは以下の構成です。
// Power Automate フロー概要(疑似コード)
trigger: when opportunity is approved
↓
action: generate Word document from template
- Template: "Approved_Quote_Template"
- Entity: Opportunity (id: triggerOutputs.id)
↓
action: convert Word to PDF (via OneDrive)
- Store to: /CRM/Quotes/{year}/{month}/
↓
action: send email
- To: opportunity.customercontact.email
- Attachment: PDF (base64)
↓
action: attach PDF to opportunity record
- Note title: "承認済み見積書 " + opportunity.name
Power AutomateでのPDF変換は、OneDrive for Business connector経由で行うことが多いです。直接Dataverse内でPDF生成するネイティブアクションは限定的であるため、一時的にOneDriveを経由する設計が一般的ですが、Dataverse / モデル駆動型アプリのネイティブPDF機能も選択肢として増えています。
自動化の注意点として、Power Automateフローはサービスアカウントの権限で動くため、テンプレートへのアクセス権・出力先への書き込み権限・メール送信元の設定を事前に確認してください。また、フローが失敗した場合のエラーハンドリング(再実行・通知・ログ)を設計段階で含めておかないと、本番環境で無音で失敗するリスクがあります。
DocumentsCorePack アーキテクチャ
DocumentsCorePackはCRM環境にソリューションとしてインストールされ、Dynamics 365のリボン(コマンドバー)に統合されます。テンプレートはWord形式で作成し、DCP専用のタグ構文でDataverseフィールド・関連エンティティ・条件分岐・計算を定義します。
以下はDocumentsCorePackで実現できる考え方を説明するための概念例です。実際のタグ構文・フィールド指定方法は、利用するDocumentsCorePack Template Designerのバージョンと設定に従ってください。
// DCPで実現できる主な設計パターン(概念例・バージョン依存)
«crm:quote.name» → フィールド差し込み
«startif:crm:quote.discount gt 0» → 条件分岐開始
割引額:«crm:quote.discount»
«endif» → 条件分岐終了
«startrepeater:crm:quotedetail» → 明細行繰り返し開始
«crm:quotedetail.productname» «crm:quotedetail.quantity» «crm:quotedetail.priceperunit»
«endrepeater» → 明細行繰り返し終了
標準Word Templateと最大に異なるのが「startrepeater」による明細行の完全制御です。Dataverseの関連エンティティを繰り返し展開でき、フィルター・並び替え・小計計算もテンプレート内で定義できます。DCPはサーバーサイド処理とクライアントサイド処理の両方に対応しており、バルク生成(キャンペーン一括送付など)はサーバーサイドで処理されます。
Dataverse File Column / Image Column と帳票
DataverseにはFile ColumnとImage Columnという2種類のバイナリデータ列があります。帳票設計の観点では以下のような用途で重要になります。
Image Column:企業ロゴ・製品画像・担当者の署名画像などをDataverseエンティティ(Account・Contactなど)に格納できます。Word Template内でImage Columnを参照することで、ロゴ入り帳票を動的に生成できます。ただし標準Word Templateでの画像差し込みはサポート状況がバージョンにより異なるため、DCPなどのISVを使うと安定して実装できます。
File Column:PDF・Word・Excel・署名済み契約書などのファイルをDataverseのレコードに直接添付できます(SharePointではなくDataverse内に保存)。電子署名完了後の署名済みPDFをFile Columnで管理する設計も可能ですが、大容量ファイルの保管にはSharePoint統合の方が適しています。DataverseはDBストレージ容量・Fileストレージ容量がそれぞれ課金対象であり、大量のファイルをDataverseに格納するとバックアップサイズへの影響も含めてストレージコストが積み上がる点に注意が必要です。
実務的には、ロゴ・小画像→Image Column、大容量ファイル・共有が必要なドキュメント→SharePoint統合、が推奨です。SharePointは容量単価が低く、バージョン管理・共有・外部公開の仕組みも整っているため、ビジネス文書の保管先としてはSharePointが第一選択です。
File ColumnはDataverse Search(全文検索)のインデックス対象外です。「契約書PDFをFile Columnに格納→ユーザーが内容で検索→ヒットしない」という事象が起きます。文書の内容検索が要件にある場合は、SharePoint(SharePoint Searchが機能する)に格納する設計が必要です。
Dataverseテーブル設計と帳票の関係
CRM帳票の品質は、Dataverseのテーブル設計・リレーションシップ設計に強く依存します。FO帳票の品質が勘定科目体系とFinancial Dimension設計に依存するのと同じ構造です。帳票開発を始める前に確認すべきDataverse設計の観点:
- エンティティ間のリレーションシップ(1:N・N:N・N:1)が正しく定義されているか
- 帳票に必要なフィールドがすべてDataverseに存在するか(計算フィールド・ロールアップフィールドの設計を含む)
- 選択肢フィールド(OptionSet)の表示ラベルが多言語対応しているか
- 通貨フィールドのベース通貨・トランザクション通貨の扱いが設計されているか
- 削除・非アクティブ化されたレコードへの参照(FetchXMLのフィルター条件)が考慮されているか
特に多通貨対応が必要なグローバル展開案件では、通貨フィールドの取り扱いとロケール別フォーマットを帳票設計の早い段階で確認することが必要です。
Plug-inとPower Automate:拡張パターンの選択
CRMの帳票周辺でカスタムロジックが必要な場合、C# Plug-inとPower Automateの使い分けが重要です。
C# Plug-in(サーバーサイド)が向いているケース:レコード保存時の同期処理(データ整合性が必要な計算・検証)、大量データの一括処理、複数エンティティをまたぐトランザクション処理、外部APIとのリアルタイム連携(応答を同期で受け取る必要がある場合)
Power Automateが向いているケース:非同期でよい処理(帳票生成・メール送信・ファイル保存)、承認フロー・条件分岐フロー、外部サービスとのデータ連携(コネクタが豊富)、開発者でなくてもメンテできる処理
帳票生成は非同期でよいケースが多いため、Power Automateで実装する方が保守コストを下げられます。ただし、帳票の生成タイミング・失敗時の再試行・エラー通知設計は必ずフロー設計に含めてください。Power Automateは「フローが止まったことに気づかない」という運用上の落とし穴があります。
パフォーマンス観点
CRM帳票の性能問題で多い原因:FetchXMLの複雑な link-entity 入れ子、選択肢フィールドの多言語ラベル取得、大量レコードの一括PDF生成時のタイムアウト、Power Automateの並列実行数制限、DocumentsCorePackのバルク生成設定ミスです。
大量帳票の生成(月次請求書の一括生成など)はPower Automateの単純ループではなく、Apply to eachの並列度設定またはDocumentsCorePackのバルク生成機能を使う設計にしてください。Power Automateの「Apply to each」はデフォルトで逐次実行のため、1,000件のPDF生成を直列処理すると数時間かかることがあります。
CRM帳票でSharePointを活用する際、現場でよく起きる問題があります。
SharePoint Site URLの変更:Dynamics 365 CRMのSharePoint統合は、Document Locationというエンティティでサイト・フォルダのパスを管理しています。SharePointサイトのURLが変更(例:テナントのドメイン変更・サイト移設)された場合、Document Locationが壊れて既存の文書リンクが全て無効になるリスクがあります。SharePoint側での移設作業前に、CRM側への影響を必ず確認してください。
権限継承の崩れ:SharePointのDocument Libraryで権限の継承を切ると、CRM経由で生成されたサブフォルダの権限が意図しない設定になることがあります。「特定の顧客のフォルダは担当者だけが見える」という権限設計を実現しようとすると、Power Automateでのフォルダ作成時に権限設定も合わせて行う必要があります。
Document Locationの自動生成:CRMのSharePoint統合を有効にすると、レコード作成時に対応するSharePointフォルダが自動生成される設定にできます。ただし、大量のレコードが存在する環境でこの機能を後から有効にすると、既存レコード分のフォルダ生成でSharePointに大きな負荷がかかる場合があります。段階的な移行計画が必要です。
Plug-inで帳票を直接生成してはいけない
実務でよく見る失敗パターンです。Plug-in内でWord生成→PDF変換まで処理しようとすると、同期処理のタイムアウト(2分制限)に引っかかります。Plug-inはDataverseのトランザクション内で動作するため、外部サービス呼び出しや重い処理を同期で行うと本体レコードの保存まで失敗します。
// NG: Plug-in内で直接帳票生成 → タイムアウトリスク
public void Execute(IServiceProvider serviceProvider) {
// Word生成・PDF変換・メール送信 → 2分制限内に完了できず失敗
}
// OK: Plug-inはフラグ設定のみ、帳票生成はPower Automateへ委ねる
public void Execute(IServiceProvider serviceProvider) {
// レコードに「帳票生成フラグ」をセット
// → Power Automateがトリガーを検知して非同期生成
}
帳票生成・PDF変換・メール送信はすべて非同期でよいケースがほとんどです。Plug-inはビジネスロジック(計算・検証・データ整合性)に専念し、帳票まわりはPower Automateに委ねる設計が保守コストを下げます。
CRM開発でよく混同されるファイル格納の仕組みが4つあります。
| 仕組み | 概要 | ストレージ |
|---|---|---|
| ActivityMimeAttachment (メール添付) |
メールエンティティに紐づく添付。帳票PDFをメール添付で渡す場合はこれ | Dataverse |
| Annotation (Notes / 添付ファイル) |
タイムラインの「メモ+添付」。UIから手動で添付するとここに保存。Dataverseストレージを消費 | Dataverse |
| File Column | テーブルに専用ファイル列を追加。Annotationより構造化されAPIアクセスが容易。Search対象外に注意 | Dataverse |
| SharePoint統合 (Document Management) |
各レコードのドキュメントをSharePoint上のフォルダで管理。大容量・共有・Search対応で最推奨 | SharePoint |
実務では「どこに保管するか」を最初に決めておかないと、Annotationに数万件のPDFが溜まってDataverseストレージが逼迫する、という事故が起きます。
テンプレートの環境移送(DEV→TEST→PROD)
帳票関連の資産はSolution管理の対象ですが、移送方法がコンポーネントによって異なります。実務ではここで事故が多発します。
Word Template:Dynamics 365の「ドキュメントテンプレート」として保存されますが、Solutionコンポーネントとして移送できないことがあります。環境ごとに手動インポートが必要なケースがあるため、DEV→PROD移行手順に明記しておくことが重要です。
Power Automate(クラウドフロー):Solutionに含めることで環境移送が可能です。ただし、接続参照(Connection Reference)の管理が複雑で、環境ごとに接続を再設定する必要があります。サービスアカウントの接続情報は環境移送後に必ず確認してください。
DocumentsCorePack テンプレート:DCP独自の管理画面でテンプレートを管理します。DCPのテンプレートはDynamics 365 Solutionとは別のエクスポート・インポート手順が必要です。DCPのバージョンが環境間で異なる場合は、テンプレートの互換性も確認してください。
SSRS レポート(FetchXMLベース):Solutionコンポーネントとして移送可能です。ただしDataverse環境のURLが変わる場合(サンドボックス→本番など)、レポートのデータソース設定を確認してください。
テスト観点
CRM帳票のテストでは、以下を確認する必要があります。言語別・通貨別・ロケール別・ユーザーロール別・レコードステータス別・関連レコードなしの場合(null値の扱い)・多言語選択肢の表示・大量データ・バルク生成・Power Automateフローのエラーハンドリング・外部ユーザー(Power Pages)からのアクセスです。
特に「関連レコードが存在しない場合」の挙動は見落とされやすいです。見積明細が1件もない見積書のWord Template出力、担当者が設定されていないケースのドキュメント生成など、null・空の状態でのテストは必須です。
開発者向けまとめ
CRMの帳票開発で最も重要なのは、選択肢を正しく絞ることです。Word Template・Excel Template・SSRS・Power Automate・Power Pages・DocumentsCorePackは、それぞれ向いている用途が異なり、組み合わせて使うのが現実です。
BCでは帳票がアプリケーションの一部として、FOでは帳票がガバナンス・コンプライアンスの一部として存在するのに対し、CRMでは帳票が顧客接点・ビジネスプロセスの一部として存在します。この違いを理解することが、CRM帳票設計の出発点です。
「何でもできる選択肢の中から、今の要件に最も適したものを選ぶ」という判断力が、CRM帳票開発者に最も求められるスキルです。
今回は、CRMの帳票というテーマを通じて、「選択肢の多さが生む混乱をどう整理するか」を書きました。BC・FO・CRMと3回書いてきて、改めて感じるのは、Dynamics 365は製品によって帳票の設計思想がまったく異なるということです。同じブランドの製品でも、必要なスキルセット・設計の考え方・運用の視点が大きく変わる。
この違いを理解した上でプロジェクトに臨めるかどうかが、ERP・CRMの現場で品質を左右します。テクノソフトの11カ国17拠点では、CRM・BC・FO、それぞれの帳票要件が同時に動いています。製品横断で設計を見渡せる視点が、これからますます重要になると感じています。
次回は、このシリーズの締めとして、AI時代における帳票の立ち位置を改めて考えてみたいと思います。BC・FO・CRM横断の視点も踏まえながら、「帳票」という概念そのものがどう変わるかを書きます。
このシリーズを通じて読んでくださっている方、本当にありがとうございます。引き続きDX365LIFEをよろしくお願いします。
今年の甲子園も、誰かのドラマがそこにあります。テクノソフトの11カ国のメンバーも、それぞれの場所で今日もドラマチックに働いています。引き続き、どうぞよろしくお願いします。
以上、室長でした。
