Zoho CRMのレコードを、レコード制限なくFetchする「searchRecordsByPDC」を使ってみた。
Zohoクリエーター
やりたかったことは、シンプルにZoho CRMの連絡先のメール一覧を引っ張ってきたかった。
Zohoクリエーターで簡単なアプリケーションを作ろうと思った。シンプルに、Zoho CRMの連絡先タブのメール一覧を引っ張ってきて、クリエーターで入力した項目と合致したら、別の処理に移るというもの。Scriptで、レコード処理するというのが正直、分かるようで、よくわかっていない。。一般的にこういうのをするのは、サーバーサイドの言語なので、個人的にはかなりトリッキーだし、必然と制限ばかりになる。。
ほんで書いたのが、まずはこれ。
//CRMから連絡先タブのデータを取得 contactLists = zoho.crm.getRecords("Contacts"); for each contactList in contactLists { //連絡先タブのメール項目(Email)をとって、 zm = contactList.get("Email"); //クリエーター側のemail項目名と合致したら、 if (zm.equalsIgnoreCase(input.email)) { alert("すでに登録されています。"); } else { //ここで別の処理 } }
これは、項目単位で、動かすので、クリエーターのワークフローの「項目のアクション」で動かす。ようするに、JavaScriptで言うdocument.getElementById(‘ID名’);みたいなを書く必要がなく、ワークフローで「項目のアクション」>「個別項目」を選んでScriptを書く。
getRecords(“タブ名”)では、200件しかレコードとれない。。
考えたのは、getRecords()でFetchして、for eachで回して、データを一件ずつ取って、クリエーターのレコードと合致したら、というのを作ったみた。
これの問題点は、CRMの200件までしか、とってこない。。。そんな200件でデータがとまる利用シーンって、「どんな時ですかー」って叫びそうになった。こんなメソッドどんな時つかうの??疑問符連発。。
それで、以下のメソッドがあるみたい。
searchRecordsByPDCは、項目の種類は決まっているが一応、全部レコードをFetch可能
//searchRecordsByPDC("CRMタブ名", "CRMタブ内項目名(これは決められている)", クリエーター側の項目) response = zoho.crm.searchRecordsByPDC("Contacts", "Email", input.email); //response変数の中にはすでに配列として入っているので、重複していることを確認するなら0以上 if (response.size() > 0) { //CRMの中にあり、重複していたら、「1」以上がかえる。。 alert(response.size()); } else { //ここで別の処理 }
searchRecordsByPDCは、デフォルトの項目かつZohoが決めた項目に限って無制限にレコードをとれるみたい。参照はこちら。今回は、連絡先タブのメールなんで、Contact>Emailで一応、取得可能。
また、変数に格納すると、配列として入っている。ここは便利。だから、for each{}とかでぐるっと回す必要がなく、第三引数のクリエーター側の項目名と同じものを見つけてくれる。そこから、size()というメソッドをつなげると、配列の数をカウントしてくれる。
しかし、何度やっても、CRMには入っていないメールアドレスをクリエーターで入力しても、必ず「1」が変える(ない場合は「0」のはず。。)
調べると、Email=>emailが正解。
response = zoho.crm.searchRecordsByPDC("Contacts", "email", input.email);
基本フィールドの項目って、頭文字って「大文字じゃありませんでしたかー」って、叫びそうになった(こちら参照)。ようするに、searchRecordByPDCで決められた項目は、頭文字が小文字。
今回のことで、考えて書くのは諦めた。毎回、メソッドごとに見て確認しないと駄目。
すごいうちわ的なScript言語。。利用者が圧倒的に少ないから、しかたがないかぁ。。
けど、本気で普及させたいなら、こういうのを一致させないと駄目。。利用者は増えない。