新規投稿
フォローする

kintoneAPIについて

kintoneアプリでフィールド値変更時イベントや保存実行前イベントはあると思うのですが、一覧画面でフィールドを変更し保存した際にどのフィールドが変更されたか取得できるのでしょうか?
特定のラジオボタンが変更され保存された場合のみにある処理をしたいとおもっております。
何かいい解決策はありませんでしょうか?
よろしくお願いいたします。

0

6件のコメント

Avatar
斎藤 栄

竹中さん
ラジカルブリッジの斎藤です。

まず、レコード一覧画面におけるフィールド値変更時イベントや保存実行前イベントについては以下をご参照ください。

■レコード一覧画面のフィールド値変更時イベント
https://cybozudev.zendesk.com/hc/ja/articles/201941964-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88#step4

■レコード一覧画面の「保存ボタン」クリック時イベント
https://cybozudev.zendesk.com/hc/ja/articles/201941964-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88#step2

で、「特定のラジオボタンが変更され保存された場合のみにある処理をしたい」についてですが、例えば、フィールド値変更時イベントで、特定のラジオボタンが変更された際に、そのことがわかるように任意のフィールドに何か記録しておき、保存実行前イベントでは、その記録がある場合にのみなんらかの処理を行う、というような流れになるでしょうか。

尚、任意のフィールドはシステムが使うだけのもので、人に見えてもしょうがないものなので、グループパーツの中に入れてしまって、そのグループ内のフィールドを表示しない設定にしておくことで、隠しフィールドのような感じにできます。私はよく使う手法です。

いかがでしょうか?

0
Avatar
竹中

斉藤様

ご回答ありがとうございます。

フィールド値変更時イベントでラジオボタンが変更された際にフィールドに値を記録し、保存実行前イベントで処理を行おうと思っているのですが保存ボタンを押下すると「レコードを再読み込みしてください。編集中に、ほかのユーザーがレコードを更新しました。」というエラーがでて登録できませんでした。
以下のような形で作成しているのですが、何かうまくできる方法はないでしょうか?

//orderAgree変更時イベント
kintone.events.on( 'app.record.index.edit.change.orderAgree', function (event) {
var rec = event.record;
if( rec['orderAgree']['value'] == "発注済" ){
// orderMailKbnでメール送信 = 'on'
var objParam = {};
objParam['app'] = kintone.app.getId(); // アプリ番号
objParam['id'] = rec['レコード番号']['value']; // レコード番号
objParam['record'] = {};
objParam['record']['orderMailKbn'] = {}; // 発注確認
objParam['record']['orderMailKbn']['value'] = 'on';
}else {
// orderMailKbnでメール送信 = ''
var objParam = {};
objParam['app'] = kintone.app.getId(); // アプリ番号
objParam['id'] = rec['レコード番号']['value']; // レコード番号
objParam['record'] = {};
objParam['record']['orderMailKbn'] = {}; // 発注確認
objParam['record']['orderMailKbn']['value'] = '';

    }
    // 同期リクエストでのデータ登録
    var appUrl = kintone.api.url('/k/guest/7/v1/record');
    var token = kintone.getRequestToken(); // CSRFトークンの取得
    objParam["__REQUEST_TOKEN__"] = token;

    var xmlHttp = new XMLHttpRequest(); // 同期リクエストを行う
    xmlHttp.open('PUT', appUrl, false);
    xmlHttp.setRequestHeader('Content-Type', 'application/json');
    xmlHttp.setRequestHeader('X-Requested-With','XMLHttpRequest');
    xmlHttp.send(JSON.stringify(objParam));
    if (xmlHttp.status == 200){ //(登録成功後の処理)
        alert('status:' + xmlHttp.status + ':' + '成功');
    } else {
        alert('status:' + xmlHttp.status + ':' + 'エラー');
    }
});

//レコード一覧画面の「保存ボタン」クリック時イベント
kintone.events.on( 'app.record.index.edit.submit', function (event) {
    var rec = event.record;
    if( rec['orderMailKbn']['value'] == 'on' ) {
        alert( rec['orderMailKbn']['value'] );


    }
});
0
Avatar
斎藤 栄

「記録」という言葉が悪かったかもしれません。。
orderAgree変更時イベントにおいて、XMLHttpRequestで実際に更新処理をしてしまうのではなくて、あくまでその編集中画面の中で、フィールドに値を格納しておくという意味でした。
以下のコードでいかがでしょうか?(実際には試していません)

//orderAgree変更時イベント
kintone.events.on( 'app.record.index.edit.change.orderAgree', function (event) {
var rec = event.record;
if( rec['orderAgree']['value'] == "発注済" ){
// orderMailKbnでメール送信 = 'on'
rec['orderMailKbn']['value'] = 'on';
} else {
// orderMailKbnでメール送信 = ''
rec['orderMailKbn']['value'] = '';
}
return event;
});

レコード一覧画面の「保存ボタン」クリック時イベント
の方はそのままのコードで良いのではないかと思います。

0
Avatar
竹中

斉藤様

始めは教えて頂いた方法で作成していたのですが、保存時にうまく任意のフィールドの値が更新されておらず、XMLHttpRequestでの更新処理をしておりました。
原因は、return event;がぬけていたようです。return event;を追加したらうまくいきました。

いつもご回答頂きありがとうございます。
とても助かっております。
また何かありましたらご質問させていただくと思いますので何卒宜しくお願い致します。

0
Avatar
斎藤 栄

解決できたようで何よりです。
また何かありましたら質問いただければと思います。

0
Avatar
斎藤 栄

補足致します。

尚、任意のフィールドはシステムが使うだけのもので、人に見えてもしょうがない
ものなので、グループパーツの中に入れてしまって、そのグループ内のフィールド
を表示しない設定にしておくことで、隠しフィールドのような感じにできます。
私はよく使う手法です。

7月頃のアップデートで、フィールド自体の表示・非表示を設定できるようになりましたので、グループパーツの中に入れておくというような姑息な方法を使わなくても普通に非表示にしておけばOKでした。

失礼しました。

0
サインインしてコメントを残してください。