キンコミ kintone user community

みんなの投稿

2021/07/16 13:13

こんにちは、kintone歴1年半の辻川です。

kintoneとメールワイズ連携プラグインを組み合わせたアプリケーションを作成中です。

アドレス帳アプリのラジオボタン値で、メールワイズテンプレートを自動切替させたいのですが、具体的にどうすれば良いのか分かりません。いいアイディアがありましたらご教示お願いします。

ラジオボタン1の時、メールワイズテンプレート1を自動選択
ラジオボタン2の時、メールワイズテンプレート2を自動選択
ラジオボタン3の時、メールワイズテンプレート3を自動選択
合計6つのテンプレートを切替る。手動切替は可能だが、自動化したい。

別のアイディアとして、メールワイズテンプレートは1つだけにし、アドレス帳アプリで選択したラジオボタンの値を、引数のような形で、メールワイズテンプレートアプリに伝え、その値で、テンプレートの件名、本文を切り替えれば良い気もしますが、具体的にどうすれば実現できるのか良い案が浮かびません?
アドレス帳アプリにはレコードが数100件あり、メールワイズテンプレートのレコードは1つだけなので、ルックアップは使えないと思います。

アドレス帳アプリのラジオボタン値をメールワイズテンプレートアプリに引数うのような形で伝える。

その値でメールワイズテンプレートの件名、本文を切り替える

何か良い案がありましたらご教示ください。よろしくお願いします。

2件のコメント (新着順)
koichi
開発
2021/07/19 11:59

辻川さん
こんにちは。

添付画像の動きで合っていますか?
この動きでしたら、以下のような処理でできそうです。

(function() {

    'use strict';

    var events = ['app.record.detail.show'];
    kintone.events.on(events, function(event) {

        var record = event.record;

        var intervalId = setInterval(function() {
            // [メールを作成する]ボタンが表示された場合
            if (document.getElementById('mailwisePlugin-creating-mail-button')) {

                // テンプレートドロップダウンを切り替える
                var el = document.getElementById('mailwisePlugin-template-dropdown');
                if (el.options.length > 1) {
                    for (var i = 0; i < el.options.length; i++) {
                        if (el.options[i].textContent == record.テンプレート.value) {
                            el.options[i].selected = true;
                        }
                    }
                    clearInterval(intervalId);
                }

            }
        }, 100);

    });

})();

辻川
2021/07/21 13:29

koichiさん、

コメントありがとうございます。
添付画像の動きは合っています。

ただJavascriptコードが十分に理解できません。
document.getElementById('mailwisePlugin-creating-mail-button')は、
アドレス帳のラジオボタンのフィールドコードとどのように関連付けられているのでしょうか?

また、document.getElementById('mailwisePlugin-template-dropdown')は、
テンプレートアプリのテンプレート名のフィールドコードとどのように関連付けられているのでしょうか?

例えばアドレス帳アプリのラジオボタンのフィールドコードが radiobutton、
テンプレートアプリのテンプレート名のフィールドコードが templateの場合、

koichiさんご提案のアプリを動かせるには、radiobutton、templateをJSコードの中にどう盛り込めば良いのでしょうか?

koichi
開発
2021/07/21 14:17

辻川さん
説明が不足しておりました。

document.getElementById('mailwisePlugin-creating-mail-button')
→「メールを作成する」ボタンの要素ID
document.getElementById('mailwisePlugin-template-dropdown')
→テンプレート選択ドロップダウンの要素ID
※上記2点は、プラグイン内部で定義されているため、ここでは無視してください。

―――――本題―――――
アドレス帳アプリのラジオボタンのフィールドコード「radiobutton」であれば、
record.テンプレート.value
→record.radiobutton.value に書き換えてください。

テンプレートアプリのフィールドコードは使用しません。
その代わり、ラジオボタン「radiobutton」の選択肢が各テンプレート名と一致するようにしてください。

辻川
2021/07/21 17:55

koichiさん、

ありがとうございます。無事、希望通りの動きしてくれました。とても嬉しいです。

ところで、今回はメールワイズプラグインでしたが、別のプラグイン(例えば、SendGrid kintone plugin)では、

document.getElementById('mailwisePlugin-creating-mail-button')
→「メールを作成する」ボタンの要素ID
document.getElementById('mailwisePlugin-template-dropdown')
→テンプレート選択ドロップダウンの要素ID

この2つの要素IDは異なると思いますが、単純に mailwise ⇒ sendgrid と変更すれば良いのでしょうか?

koichi
開発
2021/07/26 22:56

辻川さん
ご返信遅くなりすみません。SendGridを確認するのに時間を要しておりました。

※使っているプラグインが異なっていたらすみません。

結論から申し上げると、書き方が異なります。
プラグインにより生成されるドロップダウンのidが異なるためです。

idの違いについては、添付画像をご参照ください。
赤枠部分がそれぞれのドロップダウンのHTML要素です。
idなどが異なることが分かります。



以下、SendGridバージョンです。

var intervalId = setInterval(function() {
    // テンプレートドロップダウンが表示された場合
    if (document.getElementById('temp_select')) {  // ★メールワイズと異なります

        // テンプレートドロップダウンを切り替える
        var el = document.getElementById('temp_select');  // ★メールワイズと異なります
        if (el.options.length > 0) { // ★メールワイズと異なります
            for (var i = 0; i < el.options.length; i++) {
                if (el.options[i].textContent == record.テンプレート.value) {
                    el.options[i].selected = true;
                }
            }
            clearInterval(intervalId);
        }

    }
}, 100);
辻川
2021/07/29 13:11

koichiさん、

SendGridプラグインで期待通りの動作することを確認できました、時間をかけ検討してただきありがとうございます。
実は、メールワイズ、SendGrid pluginの他にTiS社のGmail pluginでも同じ課題をかかえています。koichiさんのコメントを参考に、TiS社のGmail pluginの中のconfig.htmlを調べたところ、 というコードを見つけました。
それで koichさんのコードを以下のように書き替え、動作確認したのですが、全く無反応でした。もちろん record.テンプレート.valueのテンプレートは実際のフィールドコードに合わせてあります。何か不備があるのだと思いますが見当が付きません。アドバイスよろしくお願いします。

   var intervalId = setInterval(function() {
        // [メールを作成する]ボタンが表示された場合
        if (document.getElementById('templatename')) {  ← Gmail plugin用に変更

            // テンプレートドロップダウンを切り替える
            var el = document.getElementById('templatename');  ← Gmail plugin用に変更
            if (el.options.length > 1) {
                for (var i = 0; i < el.options.length; i++) {
                    if (el.options[i].textContent == record.テンプレート.value) {  ← テンプレートは実施のアプリに合わせた
                        el.options[i].selected = true;
                    }
                }
                clearInterval(intervalId);
            }

        }
    }, 100);
koichi
開発
2021/07/29 15:14

辻川さん

SendGridでも動作できたようで安心しました。

さて、configの方は、プラグイン設定画面を定義するコードとなっております。
Chromeのデベロッパーツールなどで、実際の画面を開いた際のHTMLをご確認いただくことをおすすめします。

実際には、「template-gmail」というidが付いておりました。
というわけで、以下コードです。

(function() {

    'use strict';

    var events = ['app.record.detail.show'];
    kintone.events.on(events, function(event) {

        var record = event.record;

        const target = document.getElementsByClassName('gaia-argoui-app-toolbar-statusmenu')[0];
        // ノードに変化があれば実行
        const observer = new MutationObserver(function() {
            var el = document.getElementById('template-gmail');
            if (el && el.options.length > 0) {
                for (var i = 0; i < el.options.length; i++) {
                    if (el.options[i].textContent.trim() == record.テンプレート.value) {
                        el.options[i].selected = true;
                    }
                }
            }
        });
        const config = { childList: true }; // 監視を指定するオプション
        observer.observe(target, config);       // 監視開始

    });

})();

丸々変わりました。
このプラグインでは、レコード詳細画面を開いた際に、ドロップダウンが2度描画されます。
レコードを編集→保存とすると、ドロップダウンが一度消えて、再描画されることが分かります。
今までのコードは初回描画時に処理が終了するため、2度めの描画に対応するようにしました。

また、「el.options[i].textContent.trim()」もポイントです。
テンプレート名の選択肢の前後に空白が入るようで、これをtrim()で除外した上、ラジオボタンの値と比較しています。

辻川
2021/07/29 20:06

koichiさん、

Gmail pluginへの対応、ありがとうございます。期待通り動いてくれました。とても嬉しいです。

Chromeのデベロッパーツールで template-gmail は見つかりましたが、これを使ってjsコードを書くのは私にはハードルが高すぎます。

いずれにしても、メールワイズ、SendGrid、Gmail pluginの3つのメールシステムを便利に使えるようになり助かりました。今後、色々なkintoneアプリを作っていく中で有効活用させていただきます。

色々お世話になり、本当にありがとうございました。

辻川

koichi
開発
2021/07/30 10:55

辻川さん

ご確認いただきありがとうございます。
無事動作いただけたようで何よりです。

こちらこそ、メール連係は新たな発見がありましたので、ありがとうございました。

はじめは難しいかもしれませんが、もし興味がありましたら、jsのカスタマイズなども挑戦してみてください。
kintoneの活用の幅が益々広がりますよ。

辻川さん

kintoneとメールワイズ連携ですか。私自身メールワイズは利用していないのでわかりませんが、ラジオボタンの切り替えで動的に他フィールドの内容を変えるということであれば、JSカスタマイズなら可能です。

メールワイズのテンプレートの形式がわかりませんが、テキストデータになるのであればこんなやり方もありかもしれません。

JSカスタマイズは保守性の低下や属人化の問題もありますし、そもそも辻川さんのご希望の回答になっているかもわりませんので、あくまでご参考まで。

フィールドの入力不可をラジオボタンとチェックボックスで完全制御!

(function() {
  "use strict";

  var events1 = ['app.record.create.change.ラジオボタン', 'app.record.edit.change.ラジオボタン'];

  kintone.events.on(events1,function(event) {

    var record = event['record'];

    if (record['ラジオボタン']['value'] === "テンプレ1") {
      record['テンプレ']['value'] = "いつもお世話になっております。";
    } else {
      record['テンプレ']['value'] = "こんにちは!";
    }

    return event;
  });

})();

辻川
2021/07/18 18:01

西村さん、

コメントありがとうございます。
kintoneとメールワイズの連携では、kintoneアプリとして、アドレス帳アプリ(氏名、レコード毎にメールアドレス、その他のフィールドが異なる)とメールワイズテンプレートアプリの2つのアプリを組み合わせて使います。
メールワイズテンプレートアプリは、文字列1行のテーマ、文字列1行の件名、文字列1行の本分の3フィールドで作成し、レコード毎にテーマ、件名、本文が異なります。
現在、テンプレートアプリ上に8つのレコードを登録しています。アドレス帳アプリは数10件~数100件です。

アドレス帳アプリ上にラジオボタンで8種類切り替え、これに対応してテンプレートアプリの8件を自動的に切り替えるようにしたいのです。

1つのアプリ上であれば西村さんご提案の方法が使えると思いますが、2つのアプリに分かれているので、現在はラジオボタンに対応して、テンプレートのレコードを手動で切り替えています。

ラジオボタンが少なければ手動でも構わないのですが、8つもあると切り替えるのが面倒なので自動化したいと考えています。

辻川さん

なるほど。複数アプリの連携もJSカスタマイズのREST APIなどを駆使したら可能かもしれませんが、複数アプリの連携はそもそもkintoneの苦手な分野ですね。

辻川さんの内容がすべてイメージできているわけではありませんが、メールのテンプレートが8個というのもちょっと特殊かもしれませんね。

んー。アイデア的にはメールのテンプレート8個分をひとつにして読みこんでから利用者が不要なテンプレート部分を削除する、もしくは削除機能をJSカスタマイズするとかおもいつきますが。^^;

あとは連携する関連サービスとしては、krewData
https://kintone-sol.cybozu.co.jp/integrate/grapecity005.html

いろいろなカスタマイズをためすなら gusuku Customine
https://kintone-sol.cybozu.co.jp/integrate/r3002.html

などが頭には浮かびますが、ちょっとメールワイズがわからないと適切なアドバイスは、すみませんが思いつきません。。。

辻川
2021/07/19 09:00

西村さん、

コメントありがとうございます。
kintoneとメールとの組み合わせには、トヨクモ社のkMailer、サイボウズ社のMailwise、TiS社のGmail plugin、SendGrin社のkintone pluginなど色々あります。

基本的には、顧客の返信内容をテンプレート化し、顧客名、メールアドレス、その他を差し込み印刷して送信します。
そして、kintoneのフィルター機能で条件にあったテンプレートを使って一斉送信しているようです。

KMailerの講習会などに参加すると、テンプレートを100も200も用意しているという事例が紹介されていました。

今回は、アプリのラジオボタン選択でテンプレートを自動的に切替えることで、いちいちフィルターを使わなくても一斉送信できるのではないかと考えました。

実際にテンプレートが同じアプリ内にあれば、西村さんご提案の方法で切り替えることができると思います。
残念ながら、メールワイズでは別のアプリ上にテンプレートを用意します。← これは私がそう思っているだけで、実際は同じアプリ上に用意するやり方もあるのかも知れません。

テンプレートを自動切替したいという用途もあると思うので、メールワイズを提供しているサイボウズ社のサポートに問い合わせてみます。

コメントいただき、本当にありがとうございました。