1. TOP
  2. Zoho CRM
  3. 商談のサブフォームのレコードを見積書の商品情報に移行するスクリプトを解説(参照はZoho Japan Community)。

商談のサブフォームのレコードを見積書の商品情報に移行するスクリプトを解説(参照はZoho Japan Community)。

Zoho CRM


商談タブにサブフォームを作って、見積書タブの商品情報にレコードを移行するスクリプト

先日、弊社のサポートを受けている方から、こんなスクリプトのかけますか?という依頼で、ちょっとデモ作ってみました。自身のメモも含めて書いてみたいと思います。

カスタム関数:商談のサブフォームにある商品から見積書を作成する方法

仕様の詳細はこちらを一度、確認してみてください。

これがサンプルのスクリプトです。

// 商談の情報の取得
resp = zoho.crm.getRecordById("Deals",pID);
subinfo = ifnull(resp.get("field5"),"");
// 事前準備 項目名の確認
info resp;
pdList = list();
// サブフォームの商品情報を見積書用に転記
for each  rec in subinfo
{
	mp = Map();
	mp.put("product",{"name":rec.get("prname").get("name"),"id":rec.get("prname").get("id")});
	mp.put("quantity",rec.get("prquantity"));
	mp.put("list_price",rec.get("prprice"));
	mp.put("net_total",rec.get("sum"));
	pdList.add(mp);
}
// 見積書データの作成
qMap = Map();
qMap.put("Product_Details",pdList);
qMap.put("Subject","見積書");
qMap.put("Contact_Name",cID);
qMap.put("Deal_Name",pID);
createResp = zoho.crm.createRecord("Quotes",qMap);
info createResp;

商談タブのIDと、商談タブ内のサブフォームのレコードを取得

// 商談の情報の取得
resp = zoho.crm.getRecordById("Deals",pID);
// 第2引数のpIDは、商品タブのIDです。
subinfo = ifnull(resp.get("field5"),"");
//field5は、商品タブ内にあるサブフォームの項目を表します。
商品タブにサブフォームを追加すると、API名には、サブフォーム名と、サブフォーム内の項目名があります。このfield15はサブフォーム名です。

あと、ifnull()ですが、以下のようです。

For NULL check, the simplified version of conditional IF is given below. If expression1 is NOT null, IFNULL() returns expression1 ; otherwise it returns expression2 .
= IFNULL( , )

ここの例では、resp.get(“field5”)の値がNULLなら、””(第2引数の空)を返すという条件分岐みたいです。。条件分岐を一行でかけてすごい。。

商談タブのサブフォームのレコードを、見積りタブに移行

// 事前準備 項目名の確認
info resp;
pdList = list();
// サブフォームの商品情報を見積書用に転記
for each  rec in subinfo
{
	mp = Map();
//productは、商品タブ名 商談タブの商品名を商品タブのルックアップにしている。
	mp.put("product",{"name":rec.get("prname").get("name"),"id":rec.get("prname").get("id")});
	mp.put("quantity",rec.get("prquantity"));
	mp.put("list_price",rec.get("prprice"));
	mp.put("net_total",rec.get("sum"));
	pdList.add(mp);
}

prname prquantity, prprice, sumは、商談タブのサブフォーム内にある項目API名

  • prname(商品名)
  • prquantity(数量)
  • prprice(単価)
  • sum(小計)

quantity(数量), list_price(販売価格), net_total(総額)は、おそらく見積書タブの商品情報のAPI項目名。

見積書タブのAPIには、商品情報の項目名(API)は表示されていなかった。

あと、よく使う書き方だけで、Map()とput()を一緒に使うのはこういう意味。
map().put(“key(the key to be inserted to the target map variable.”,”value(the value to be associate with given key in the target map variable)”)

商品タブのルックアップ項目との紐付け方法

mp.put("product",{"name":rec.get("prname").get("name"),"id":rec.get("prname").get("id")});
商品名は、テキストではなく、商品タブのルックアップなので、名前とIDの両方を紐付ける必要がある。
//連想配列 "キー":"値".get("キー")
{
"name":rec.get("prname").get("name"),
"id":rec.get("prname").get("id")
}

連想配列でget(“KEY”)を取り出している感じ。。連想配列の後にメソッドチェーンでつながるDeluge script独特の書き方。。

見積もりタブのレコードを新規作成

// 見積書データの作成
qMap = Map();
qMap.put("Product_Details",pdList);
//Product_Detailsは、見積書タブの商品情報のAPI名
qMap.put("Subject","見積書");
//Subjectは、見積書タブの件名
qMap.put("Contact_Name",cID);
//Contact_Nameは連絡先名。ただ、連絡先とのルックアップなので、cID(連絡先ID)
qMap.put("Deal_Name",pID);
//Deal_Nameは商談名。ただ、商談とのルックアップなので、pID(商談ID)

createResp = zoho.crm.createRecord("Quotes",qMap);
info createResp;
Product_Detailsは、おそらく見積書タブの商品情報のAPI名。ただ、APIには、Product_Detailsは表示されていない。

ざっくり書きましたが、こんな感じです。。CRMのサブフォームをこのように利用するのは非常に面白いですよね。。。
あと、サブフォームの項目を取得する方法なんかも勉強できてよかったです!