スマートフォンのレコードタイトルで複数の内容を表示する方法

はじめまして。
本日は、スマートフォンからレコードを追加した際にレコード一覧に複数の内容を表示できる方法を
教えて頂きたく投稿致しました。

私なりに試行錯誤を致しましたが思い通りの結果にならず困っております。
下記に詳細を記載致しましたのでアドバイス頂けますと幸いです。
皆様のお力添えをよろしくお願い致します。

 

まず、私の失敗談を書かせて頂きます。

スマートフォンのレコード一覧にはレコードタイトルが表示されるため
「スマホ表示用(文字列)」をレコードタイトルに設定いたしました。
そして、「スマホ表示用」の中に
「氏名(文字列)」「作業内容(ドロップダウン)」「開始時間(時刻)」「終了時間(時刻)」
が入るようJavaScriptで設定いたしました。
下記が使用したJavaScript(スマートフォン用)でございます。

 

(function(){
    kintone.events.on([‘mobile.app.record.create.submit’,‘mobile.app.record.edit.submit’],function(event){

        var record = event[‘record’];
        var 氏名 = record[‘氏名’][‘value’];
        var 作業内容データ = record[‘作業内容データ’][‘value’];
        var 開始時間 = record[‘開始時間’][‘value’];
        var 終了時間 = record[‘終了時間’][‘value’];

        //それぞれの項目を結合して、スマホ表示用フォームへセットする。
        record[‘スマホ表示用’][‘value’] = 氏名 + " " + 作業内容データ + " " + 開始時間 + " " + 終了時間;
        return event;

    });
})()

 

PC用で上記と同様の設定をしたところ、パソコンでレコード追加した際は設定通りにいくのですが
スマートフォンでレコード追加した際は設定通りにいかず困っている状態でございます。
スマートフォンからレコード追加をした際は、保存時に上記の処理が行われないため、
レコード一覧にレコードタイトル(=「スマホ表示用」)ではなく、
レコード番号が表示されてしまいます。

『PC/スマートフォン 早見表』を拝見したところ
「レコード追加画面の保存実行前のイベント」がスマートフォンは対応していないと記載されておりましたので
それが原因なのでしょうか?

■『PC/スマートフォン 早見表』
https://cybozudev.zendesk.com/hc/ja/articles/202738940-PC-%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%95%E3%82%A9%E3%83%B3-%E6%97%A9%E8%A6%8B%E8%A1%A8

もしくは、JavaScriptのmobileと入力した位置が間違っているのでしょうか?

それでは、皆様のお力添えをよろしくお願い致します。

大西智子さん
cstapの瀧ヶ平です。

おっしゃっている通り、スマートフォンではレコード追加画面の保存実行前イベントが対応していない為JavaScriptが動作していないものと思われます。

代替案としては、

  1. レコード詳細画面の表示時イベントでレコード上のスマートフォン表示用のフィールドが実際のフィールドの内容を結合したものと一致しているかを調べる。
  2. 一致していない場合にREST APIによってレコードを更新する
  3. 更新が成功した場合に画面を更新する。

というようなJavaScriptを適用するのが良いかと思います。

瀧ヶ平さん

お世話になっております。
大西です。
取り急ぎお返事させて頂きます。

お返事頂き誠にありがとうございます。
瀧ヶ平さんからお教え頂きました案を試してみたいと思います。

瀧ヶ平さん

お世話になっております。
大西です。

瀧ヶ平さんから頂いた案を元に
下記のJavaScriptを設定いたしましたが機能しない状態でございます。

間違っているところ・アドバイス等お教え頂けますと幸いです。
よろしくお願い致します。

(function() {

    “use strict”;

    var eventName = [“mobile.app.record.detail.show”];
    // 追加画面、編集画面の表示後イベント
    kintone.events.on(eventName, function(event) {

        var record = event[‘record’];
        var 氏名 = record[‘氏名’][‘value’];
        var 作業内容データ = record[‘作業内容データ’][‘value’];
        var 開始時間 = record[‘開始時間’][‘value’];
        var 終了時間 = record[‘終了時間’][‘value’];

        //それぞれの項目を結合して、スマホ表示用フォームへセットする。
        var レコードタイトル = 氏名 + " " + 作業内容データ + " " + 開始時間 + " " + 終了時間;

        if (record[‘スマホ表示用’][‘value’] === レコードタイトル) {
            alert(‘タイトル一致’);
        } else {
            alert(‘タイトル不一致’);
            var params = {
                “app”: 841, // アプリID
                “id”: record[‘レコード番号’][‘value’],
                “record”: {
                    “スマホ表示用”: {
                        “value”: レコードタイトル
                    }
                }
            };
            kintone.mobile.api(‘/k/v1/record’, ‘PUT’, params).then(function(resp) {
                alert(“更新しました”);
                location.reload();
            }, function(error) {
                alert(“更新エラー”);
            });
        }
        return event;
    });

})();

大西さん

おそらくREST API でのレコード更新に必要なレコードIDが間違っているため更新処理が行えていないのかと思います。(レコード番号フィールドはアプリコード+IDの形式で与えられるため)

なのでレコードIDはレコード番号フィールドからとるのではなく、

kintone.app.record.getId()

から取得すれば解決するかと思います。

瀧ヶ平さん

お世話になっております。
大西です。

アドバイス頂き誠にありがとうございます。
頂いたAPIにmobileを追加し、下記内容で設定してみたのですが機能しない状態でございます。

間違いがございましたらご指導お願い致します。
お手数お掛け致しますがよろしくお願い致します。

 

(function() {

    “use strict”;

    var eventName = [“mobile.app.record.detail.show”];
    // 追加画面、編集画面の表示後イベント
    kintone.events.on(eventName, function(event) {

        var record = event[‘record’];
        var 氏名 = record[‘氏名’][‘value’];
        var 作業内容データ = record[‘作業内容データ’][‘value’];
        var 開始時間 = record[‘開始時間’][‘value’];
        var 終了時間 = record[‘終了時間’][‘value’];

        //それぞれの項目を結合して、スマホ表示用フォームへセットする。
        var レコードタイトル = 氏名 + " " + 作業内容データ + " " + 開始時間 + " " + 終了時間;

        if (record[‘スマホ表示用’][‘value’] === レコードタイトル) {
            alert(‘タイトル一致’);
        } else {
            alert(‘タイトル不一致’);
            var params = {
                “app”: 841, // アプリID
                “id”: kintone.mobile.app.record.getId(),
                “record”: {
                    “スマホ表示用”: {
                        “value”: レコードタイトル
                    }
                }
            };
            kintone.mobile.api(‘/k/v1/record’, ‘PUT’, params).then(function(resp) {
                alert(“更新しました”);
                location.reload();
            }, function(error) {
                alert(“更新エラー”);
            });
        }
        return event;
    });

})();

大西さん

すいません。先ほどの関数はモバイル対応していなかったようです。

なのでrecord[$id][value]を用いてidを取得すれば動作するかと思います。

瀧ヶ平さん

いつもお世話になっております。
大西でございます。

瀧ヶ平さんのアドバイスの元、record[‘$id’][‘value’]を用いて
idを取得しようと試みましたがうまくいきませんでした。

また、下記の動作まで至らない現状でございます。

kintone.mobile.api(‘/k/v1/record’, ‘PUT’, params).then(function(resp) {
    alert(“更新しました”);
    location.reload();
}, function(error) {
    alert(“更新エラー”);
});

何が原因かまったく分からない状態ですので、ご教授頂けますと幸いです。
よろしくお願い致します。

大西さん

kintone.apiメソッドはモバイル版でもkintone.apiのまま使えるようなので、mobileを削除して試してみてください。
おそらくそこが間違っているのかと思います。

 

瀧ヶ平さんへ

いつもお世話になっております。
大西です。

誠にありがとうございます!!!
瀧ヶ平さんのおかげで設定することができました!!!