JavaScriptを使用してWordテンプレートをダウンロードする
こんにちは。
今回は、JavaScriptを使用してWordテンプレートをダウンロードする方法をご紹介します。
なお紹介にあたり、以下のサイトのQ&Aを参考にさせていただきました。
stackoverflow.com
WordテンプレートをダウンロードするためのJavaScript
通常、Wordテンプレートを出力する際はコマンドバーから登録されているWordテンプレートをクリックするという手順を踏みますが、以下のfunctionをイベントトリガーやhtmlのボタンから呼び出せば、直接Wordテンプレートのダウンロードが行えます。function DownloadWordTemplate () { // 定数定義(ここの変数に情報をセットしてください) var entityTypeCode = 1061; var templateId = "a1b2c3d4-e5f6-g7h8-0123-a123b456c789"; var templateType = 9940; var fileName = "テスト.docx"; var entityId = new Array(); entityId.push(Xrm.Page.data.entity.getId()); // Wordテンプレート出力処理 Xrm.Page.ui.clearFormNotification("docerror"); var path = Xrm.Page.context.getClientUrl() + "/_grid/print/print_data.aspx"; var req = new XMLHttpRequest(); req.open("POST", path, true); req.responseType = "arraybuffer"; req.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); req.setRequestHeader("Accept-Language", "en-US,en;q=0.8"); req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.onreadystatechange = function () { if (this.readyState == 4) { req.onreadystatechange = null; if (this.status >= 200 && this.status <= 299) { var mimeType = (2 === 2) ? "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; var blob = new Blob([req.response], { type: mimeType }); var dlodURL = URL.createObjectURL(blob); var a = document.createElement("a"); if (navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, fileName); } else { document.body.appendChild(a); a.style = "display: none"; a.href = dloadurl; a.download = fileName; a.click(); URL.revokeObjectURL(dlodURL); } } } }; var formData = "exportType=MergeWordTemplate&selectedRecords=" + encodeURIComponent(JSON.stringify(entityid)) + "&associatedentitytypecode=" + entityTypeCode + "&TemplateId=" + templateId + "&templatetype=" + templateType; req.send(formData); }
定数定義の解説
entityTypeCode
エンティティコード(etc)を指定します。画面を開いている状態であれば、ハードコーディングするより以下のコードで取得した方がよいと思います。
Xrm.Page.context.getQueryStringParameters().etc;
templateId
出力したいWordテンプレートのGUIDを指定します。GUIDがわからない場合は、documenttemplateのFetchXMLを作成してSOAP通信すればidを取得できます。
もっと簡単に取得したい場合は、F12開発者ツールのDOM Explorerで出力したいWordテンプレートのリンクを指定するとその親の<li>タグ内のidの末尾にGUIDが表示されていますので、そちらで取得できます。
例:id="new_test|NoRelationship|Form|Mscrm.Form.new_test.WordTemplates.Menu.Wordテンプレート.Controls.a1b2c3d4-e5f6-g7h8-0123-a123b456c789"
templateType
出力したいWordテンプレートのタイプを指定します。ここでは『9940』としておりますが、個人用テンプレートの場合は『9941』を指定します。