2018.05.23
DataSpider Cloudを使ってSalesforceからExcel帳票を作ってみました!コードサンプル付き!
みなさま、こんにちは。
テラスカイ西日本の張です。
今更感満載なテーマになってしまって大変恐縮ですが、業務現場では「Excel帳票」からなかなか離れられないのも現実ではないかと思います。ハイスピードかつ低コストでお客様にシステムを提供するのを大前提として、敢えてこのブログを書きました。
テラスカイ西日本の張です。
今更感満載なテーマになってしまって大変恐縮ですが、業務現場では「Excel帳票」からなかなか離れられないのも現実ではないかと思います。ハイスピードかつ低コストでお客様にシステムを提供するのを大前提として、敢えてこのブログを書きました。
ある案件において見積書をExcelで作成することになりました。 その際の要件として、
- Excelテンプレートを使って帳票を作成します。
- Salesforceからリアルタイムで見積データを抽出し、抽出結果をExcelテンプレートの決まったセルに書き込みます。
- Salesforce画面から直接Excel帳票ファイルをダウンロードします。
- Excel帳票ファイルをSalesforceに自動で保存します。
実現する方法はいろいろありますが、コスト、拡張性と保守性を考慮し、下記の案を採用しました。
- Salesforce画面にExcel帳票作成とダウンロードするインターフェース(Lightning Experience クイックアクション)を用意します。
- ドラッグアンドドロップの操作だけでExcel帳票の作成ができるため、帳票の作成はDataSpider Cloudに任せます。
- DataSpider CloudのHTTPトリガを利用し、SalesforceからExcel帳票作成処理を起動します。
- DataSpider Cloudから作成されたExcel帳票を直接Salesforce Filesにアップロードします。
これからもう少し詳しく紹介したいと思います。少しでも皆様のお役に立てば幸いです。
システム構成
- オペレーターが見積詳細画面にある「見積ダウンロード」ボタンをクリックして、帳票作成を依頼します。裏でDataSpider CloudのHTTPトリガが起動されます。
- DataSpider Cloud側のHTTPトリガより帳票作成処理を起動します。
- 見積Record Idを持って見積オブジェクトからExcel帳票に必要な項目を検索し、事前に用意したExcelテンプレートに検索結果を書き込みます。
- Excel帳票ファイルをSalesforce Filesにアップロードし、アップロードの結果としてContent Version Idを取得します。
- HTTPトリガを呼び出した結果として、Content Version Idを返します。Salesforce画面からアップロードされたExcel帳票ファイルをダウンロードできます。
DataSpider Cloud側の処理
Excel帳票の作成
まず事前に用意されたExcelテンプレートをコピーします。次にSalesforceから見積データを検索して、検索結果をExcelファイルに書き込みます。
Excelへの書き込みは「セル指定書き込み」アダプタを利用します。ご覧のとおり、セルアドレスやフォマット等を直接指定できるため、テンプレートはどんな形でも問題なく値をセットできます。
Excel帳票のアップロード
帳票ファイルのアップロード処理はSalesforce データ書き込み(INSERT)アダプタを利用します。
バージョンデータ項目に作成されたExcel帳票のフルパスを指定するだけでファイルをSalesforceにアップロードできます。(Base64項目入力形式に「ファイルパス」を選ぶ必要があります)
HTTPトリガ
HTTPトリガーは、指定したURLに対しHTTPクライアントからリクエストを送ることで、スクリプトを実行する機能です。
詳細は下記をご参照ください。
https://doc.dataspidercloud.com/v1/help/ja/trigger/http_trigger.html
詳細は下記をご参照ください。
https://doc.dataspidercloud.com/v1/help/ja/trigger/http_trigger.html
まず、HTTPトリガを登録します。
レスポンスのContent-Typeの設定値はhtml、xml、json、csvなど数種類ありますが、Content Version IDをそのままレスポンスとして返すため、「text/plain」を指定します。
レスポンスのContent-Typeの設定値はhtml、xml、json、csvなど数種類ありますが、Content Version IDをそのままレスポンスとして返すため、「text/plain」を指定します。
トリガの実行ユーザや、サービスを設定します。
スクリプトの引数の値に「${trigger.inputData}をセットします。
スクリプトの出力の値に「${trigger.outputData}をセットします。
スクリプトの引数の値に「${trigger.inputData}をセットします。
スクリプトの出力の値に「${trigger.outputData}をセットします。
次に外部から上記のHTTPトリガを起動するため、連携サーバの一覧から対象サーバを選んで、下記のような設定を行います。設定を追加するには「+」ボタンをクリックします。
Salesforce側の処理
Lightning Componentの作成
ユーザインターフェースはLightning Experienceを採用しました。Lightning Experience ではJavaScript ボタンがサポートされていないため、専用のLightning Component を作りました。
<aura:component controller="ProjectDetailDownload" implements="flexipage:availableForRecordHome,force:hasRecordId,force:lightningQuickAction" access="global" > <aura:attribute name="recordId" type="String" /> <aura:attribute name="contentVersionId" type="String" /> <aura:handler name="init" value="{!this}" action="{!c.init}" /> <aura:handler name="change" value="{!v.contentVersionId}" action="{!c.showDownload}"/> <div aura:id="download_block"> <ui:message severity="info" closable="true"> 見積書を作成しました。 </ui:message> <a href="{!'/sfc/servlet.shepherd/version/download/'+ v.contentVersionId}" target="_self"> <lightning:icon iconName="utility:download" size="small"/>ダウンロード </a> </div> </aura:component>
ProjectDetailDownload.cmp
({ init : function(component, event) { var downloadBlock = component.find("download_block"); $A.util.toggleClass(downloadBlock, "toggle"); var action = component.get("c.download"); console.log("redordId = " + component.get("v.recordId")); action.setParams({"projectDetailId": component.get("v.recordId")}); action.setCallback(this, function(response){ var urlEvent = $A.get("e.force:navigateToURL"); component.set("v.contentVersionId", response.getReturnValue()); console.log("contentVersionId = " + response.getReturnValue()); }); $A.enqueueAction(action); }, showDownload : function(component, event) { var downloadBlock = component.find("download_block"); $A.util.toggleClass(downloadBlock, "toggle"); }, })
ProjectDetailDownloadController.js
.THIS.toggle { display: none; }
ProjectDetailDownload.css
global class ProjectDetailDownload { @AuraEnabled webService static String download(String projectDetailId) { try { String accessUrl = 'https://www.XXXXXXXX.xxx/ws/trigger/seamecprojectdetail?cid=a0G10000003lcwkEAA&sid=10017'; String authorizationHeader = 'BASIC XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; String contentVersionId = null; Http http = new Http(); HttpRequest request = new HttpRequest(); request.setHeader('Authorization', authorizationHeader); request.setEndpoint(accessUrl + '&projectDetailSfId=' + projectDetailId); request.setMethod('GET'); HttpResponse response = http.send(request); if (response.getStatusCode() == 200) { contentVersionId = response.getBody(); } return contentVersionId; } catch(exception ex) { System.debug('error: '+ex); return null; } } }
ProjectDetailDownload.cls
クイックアクションの定義
上記のLightning Component を起動するクイックアクション「見積書ダウンロード」を定義します。
更に見積オブジェクトのページレイアウトに、見積書ダウンロードクイックアクションを追加します。
動作確認
Excel帳票のサンプルは下記になります。
終わりに
以上、Excel帳票の作成とダウンロードの一連の実装方法をご紹介しました。DataSpider Cloudの力を発揮しつつ、シンプルなコードでお客様のご要望を実現することができました。特に帳票のレイアウトが変更になった場合、プログラムを改修せず、DataSpider Cloud側の設定を変更するだけで済むので、拡張性と保守性も向上できたではないかと思います。
45 件