1. TOP
  2. Zohoクリエーター
  3. Deluge Script
  4. Zoho CRMの見積書からZohoインボイスの請求書へカスタムボタンでデータ移行の方法。

Zoho CRMの見積書からZohoインボイスの請求書へカスタムボタンでデータ移行の方法。

Deluge Script

|

商談タブをより使いやすく!

Zoho CRM(以下「CRM」)の商談タブが実務でちゃんと使えていないことに気が付き、2週間ほどかけて、カスタマイズすることにしました。
詳細は以下の内容となります。

商談=>見積書=>請求書(Zohoインボイス)。

image20230531

今回のカスタマイズのポイント。

  • 1.商談タブのサブフォームの項目を見積書タブに移動(カスタムボタン)
  • 2.商談タブのサブフォームの合計(カスタム項目)を商談タブの「総計」に反映(ワークフロー)
  • 3.見積書タブのスターテス変更で、連絡先タブから住所データを挿入(ワークフロー)。
  • 4.見積書のデータをZohoインボイスの請求書に移動(カスタムボタン)

1の商談タブのサブフォームを、見積書タブに移動する「カスタムボタン」は実装していたのですが、実務ではまったく使っていませんでした。今回は、それを実務で使えるよう、さらにカスタマイズをしてみました。

1.商談タブのサブフォームを見積書タブに移動する「カスタムボタン」。

商談タブのサブフォームを見積書タブに移動するカスタムボタンの詳細はこちらとなります。Zoho Japan Communityに書かれていた内容ですが、1商談でN商品という内容で、総計に加えて、粗利益や、税込み、税抜きなどを算出するようにしてみました。

スクリーンショット 2023-05-31 23.59.12

複数商品を一つの商談で管理し、その後、レポートなどで、リアルタイムで当月の粗利益を把握したい時に有効な手段となります。

2.商談タブのサブフォームの合計を「総計」に自動で反映。

前回は、ここまでで終わっていたのですが、上記で表示した合計(サブフォームでカスタマイズでつくった項目)の値を、商談タブのデフォルト項目である「総計」に「ワークフロールール」を使って自動で反映してみました。これだけで、ぐっと、商談タブのサブフォームを利用する機会が増えました。
スクリーンショット 2023-06-01 0.06.35

Deluge Scriptはこんな感じ。

dealRecord = zoho.crm.getRecordById("Deals",dID);
subform_Ammount = dealRecord.get("field4");
info subform_Ammount;
Deal_Ammount = dealRecord.get("field36");
map = Map();
map.put("Amount",subform_Ammount);
updateResponse = zoho.crm.updateRecord("Deals",dID,map);
info updateResponse;
dIDは、商談タブのIDを紐づけてください。あとカスタマイズした項目は、設定>API>API名で確認ができます。

CRMとインボイスはデフォルトでも連携は可能だが、、

Zoho CRMとインボイスは、デフォルトでも連携が可能となります。デフォルトの連携は、商談のステージを変更すると、自動でインボイスの見積書が作られるのですが、その時の商品名が、商談の名前だったりするため、あまり利用していませんでした。しかし今回のカスタマイズでは、CRMの商品タブと、インボイスの商品と、連絡先と顧客が一致する内容となります。

3.見積書タブのスターテス変更で、連絡先タブから住所データを挿入。

従来までは、Zohoインボイスの見積書から請求書にデータ変換をしていましたが、今回のカスマイズで、CRMの見積書タブからインボイスの請求書に移行することにしました(詳細は後述します)。そのため、CRMの見積書タブを利用するにあたり、連絡先の住所データをステータス変更(カスタムフロー)により、自動で挿入するスクリプトを作成しました。スクリプトの考え方は以下となります。

  • 1.顧客IDを取得。
  • 2.1から連絡先の住所データを取得、
  • 3.getRelatedRecords()関数から連絡先に関連タブで紐づいている見積書レコードのidを取得。
  • 4.updateRecord()関数で、見積書タブの住所項目に連絡先の住所を更新。

Deluge Scriptはこんな感じ。

contactRecords = zoho.crm.getRecordById("Contacts",cID);
prefecture = contactRecords.get("Mailing_State");
city = contactRecords.get("Mailing_City");
street = contactRecords.get("Mailing_Street");
zip = contactRecords.get("Mailing_Zip");
estimateRecords = zoho.crm.getRelatedRecords("Quotes","Contacts",cID);
for each  task in estimateRecords
{
	response = invokeurl
	[
		url :"https://www.zohoapis.com/crm/v3/Quotes/" + task.get("id")
		type :GET
		connection:"*******"
	];
	estimateID = response.get("data").get("0").get("Quoted_Items").get("0").get("Parent_Id").get("id");
	info estimateID;
	QuotesUpdate = Map();
	QuotesUpdate.put("Billing_Street",street);
	QuotesUpdate.put("Billing_City",city);
	QuotesUpdate.put("Billing_State",prefecture);
	QuotesUpdate.put("Billing_Code",zip);
	update = zoho.crm.updateRecord("Quotes",estimateID,QuotesUpdate);
	info update;
}
コネクション(connection)のスコープは、Zoho CRM Quotesを参照するようにしてください。

4.見積書タブからZohoインボイスの請求書へ。

商談タブから見積書タブへ移行せず、そのまま商談タブからZohoインボイスの見積書、またはZohoインボイスの請求書に移行するという考え方もありますが、弊社は上記のように、見積書タブ(CRM)を一旦経由した後、Zohoインボイスの請求書タブへ移行することにしました。

理由は、当月の売上見込のデータを一旦、見積書タブに移して、タブ単体からでも概算を把握したかったという経緯からです。もちろん、商談タブのフィルターを使えば、同じような仕様が可能なのですが、個人的にフィルターをあまり使わないというのも背景にあり、このような仕様にしてみました。また、運用している内に変わるかもしれません。。

カスタムボタンで転送。

スクリーンショット 2023-06-01 0.22.56

Deluge Scriptは結構、大変でした。。

Deluge Scriptは結構、時間がかかりました。。特に、CRMの見積書タブのAPI名が、JSONで出力した時の値の名前と違った点が結構、ハマりました。。今後「ノンプログラマーでもできるDeluge Script講座」みたいなサービスを展開しようと計画中ですが、基本的な移行するスクリプトの考え方は以下となります。

  • 1.CRMの見積書タブの項目をとる。
  • 2.CRMの連絡先タブから、インボイスの顧客のレコードがあるかを調べて紐付ける、なければ顧客(インボイス)を新規作成。
  • 3.2の連絡先同様に、CRM商品もインボイスの商品にあるかを調べて、紐付ける。
  • 4.1の見積書タブのサブフォーム(商品・価格・数量など)をリストに入れ、ループさせる。

スクリプトはこんな感じ。

スクリーンショット 2023-06-01 0.34.42

CRMの見積書タブのAPI名は、JSONで確認することをおすすめします。”Product_Details”は見積書の商品、数量、金額などを表示させるサブフォームの項目名ですが、、API名には表示されていません。。

最後に、

Zohoラボでは、Deluge Scriptを使ったカスタマイズも随時、承っております。ビジネスをより快適に、無駄なく、作業効率をあげられたい方は、いつでもご連絡ください。ご連絡はこちらからどうぞ

Deluge Scriptを使ったコンサルティングや、業務効率のご支援もさせて頂いております。是非、お気軽にご連絡ください。