商談のサブフォームのレコードを見積書の商品情報に移行するスクリプトを解説(参照は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は、商品タブ内にあるサブフォームの項目を表します。
あと、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項目名。
あと、よく使う書き方だけで、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")});
//連想配列 "キー":"値".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;
ざっくり書きましたが、こんな感じです。。CRMのサブフォームをこのように利用するのは非常に面白いですよね。。。
あと、サブフォームの項目を取得する方法なんかも勉強できてよかったです!