別フィールドへ自動入力

質問ばかりすみません。

特定のフィールドデータがある条件だと、別フィールドに自動で特定の文字を入力させたいです。

具体的には、’納期’が空欄だと、’異常’というフィールドに「未入力」と自動的に文字が入るようにしたいです。

今後’異常’フィールドには他の文字も表示させたいと思っています。

いろいろと参考にしてコードを書いてみましたが、いまいちピンと来ず。案の定正常に動作しませんでした。

(function() {
   “use strict”;
   var events =[‘app.record.create.show’,‘app.record.edit.show’,‘app.record.index.show’,'app.record.edit.change.'納期,'app.record.create.change.'納期,‘app.record.index.edit.change.納期’];
   kintone.events.on(events, function(event) {
       var record = event.record;
       var nouki = kintone.app.getFieldElements(‘納期’);
       var ijou = kintone.app.getFieldElements(‘異常’);
       var moji = [“未入力”];
      
       for (var i = 0; i < nouki.length; i++) {
           //レコード情報を取得
           var record = event.records[i];
          
           if (record[‘納期’][‘value’] === “” ) {
           event.record[‘異常’][‘value’] = moji[i];
       }
       return event;
   });
})();

恐らく変な部分ばかりだと思いますが、どなたかお力を貸していただきたいです。

natsuki さん

値を変える場合はイベントオブジェクトを利用したほうが効率がいいです。

イベントオブジェクトについてはこちらのページのeventオブジェクトの項目をご覧ください。

処理については以下のコードをご覧ください。同時に説明も記述しておきます。

(function() {
   "use strict";

// 今回の処理の場合、changeイベントではなく、submitイベントが適切かと思います。
// create.show edit.show などがある場合、最初は必ず未入力と入力されるため、削りましたが、その処理が必要な場合付け加えてください
// また、index.show でフィールドの値を書き換える場合 REST API を使用しないと書き換えられないので、今回は不要となります。

   var events =['app.record.edit.submit','app.record.create.submit','app.record.index.edit.submit'];
   kintone.events.on(events, function(event) {
       var record = event.record;

var nouki = record.納期.value;
var ijou = record.異常.value;

// 文字列を設定する場合配列として値を持たないでも大丈夫です。

var moji = "未入力";

// 配列ではない場合 for文ではなくても、代入できるようになります。
           
//感嘆符(!)を使うとそのフィールドが未入力かどうかの確認が簡単になります。
// くわしくは[こちら](/hc/ja/articles/201718170--%E5%B0%8F%E6%8A%80-undefined-%E3%81%A8-%E7%A9%BA%E6%96%87%E5%AD%97%E3%81%AE%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%81%AA-if-%E6%96%87%E5%88%A4%E5%AE%9A)をどうぞ

       if (!record['納期']['value']) {
        event.record['異常']['value'] = moji;
       }
       return event;
   });
})();

すいません、developer network のコード部分が黒くなる仕様に変わったことに気づかず

説明の中にリンクを張ってしまいました。

感嘆符(!)の説明はこちらです。

しぶい 様

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

丁寧にコードまで教えていただき大変助かりました。無事「未入力」という文字が表示されました。教えてくださったおかげです。

大変恐縮なのですが、改めてもう1つ質問があります。ご回答いただけますでしょうか。

後からレコードを編集し、「納期」フィールドに値を入力したら、「未入力」の文字が消えるようにしたいのです。

何卒よろしくお願いいたします。

>>>>>

すみません。

ifのあとにelse { record[‘異常’][‘value’] = “”

と書いたらうまくいきました。何度も申し訳ございません。

しぶい 様

お世話になっております。先日は質問に答えていただきありがとうございました。

今更で大変申し訳ないのですが、お尋ねしてもよろしいでしょうか。

教えていただいた上記のコードでうまくいったのですが、やはり一覧画面上で更新したいです。

REST APIを使用すれば書き換えられるということでしょうか。

そのやり方を教えていただきたいです。

よろしくお願いいたします。

 

natsuki さん

index.show で REST API の更新(PUT)を扱うときの、一番簡単な例となります。

(function() {
"use strict";

kintone.events.on("app.record.index.show", function(event) {

var body = {
"app": 1,
"id": 1,
"record": {
"文字列__1行": {
"value": "ABC"
}
}
};

kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
});
})();

アプリID 1、レコード番号 1 の フィールドコードが “文字列__1行” のフィールドを

一覧画面が開くたびに更新します。

一括更新などもできますので、詳しい仕様などは、こちらのページにあるので、ご覧ください。

どうしてもわからなくなった場合はまたこのコミュニティをご活用ください。

しぶい 様

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

お礼が遅くなってしまいすみません。

上記を参考に1件更新、全件更新のやり方は分かるようになりました。

しかし、この投稿の最初の質問で教えていただいたカスタマイズがどうやってもindex.showでは適応されず。

教えていただいた更新(PUT)のプログラムifで条件をを設定すればできるのではないかと思いましたが、そもそもその考えが正解なのか、ifで定義するなら、何行目に記述するのか、教えていただいてもよろしいでしょうか。

重ね重ね質問ばかりで申し訳ございません。

大変恐縮ですがよろしくお願いいたします。

 

natsuki さん

現状だと自分の予想になるのですが、

varevents =["app.record.edit.submit","app.record.create.submit","app.record.index.edit.submit",&nbsp;"app.record.index.show"];

の様に、index.show もイベントにひとまとめにしてるのではないでしょうか。

index.show ではeventオブジェクトのプロパティが event.record ではなく、event.records になります。

そのため、ほかのイベントでは定番の 

varrecord = event.record;

が使えなくなり、記述するなら

var records = event.records;
// 変数名が records なのは定番だからです。任意のものなのでお好きに決めてください。

の様になります。

各イベントの eventオブジェクトのプロパティは各ページに記載されていますので、ご確認ください。

index.showはこちらのページに、ほかのイベントを見たい場合にはこちらのページにイベント一覧が記載されていますので、よかったらどうぞ。

また、index.show と ほかのイベントではプロパティ名が違うので、

そのままひとまとめにしていると、"そんなプロパティないよ"ってエラーが吐かれて、そこで処理が止まってしまいますので、

(function() {
    "use strict";

     var events =["app.record.edit.submit","app.record.create.submit","app.record.index.edit.submit", "app.record.index.show"];

    kintone.events.on(events, function(event) {
var record = event.record
    });
})();

現状こうなっている場合は

(function() {
    "use strict";

    var events =["app.record.edit.submit","app.record.create.submit","app.record.index.edit.submit"];

    kintone.events.on(events, function(event) {
        var record = event.record;

        return event;
    });

    kintone.events.on( "app.record.index.show", function(event) {
        var records = event.records;

        return event;
    });
})();

このように、変更してみてください。

ちょっと長くなってしまってますが、普段あまりプログラムを書かない方にはわかりづらいとこがあるので最後にそこだけ説明します。

先ほど紹介したページにも詳細がありますが、index.showでレコードをとる場合、プロパティである、recordsは配列になります。

kintone の一覧画面で見えているフィールドの情報がrecordsに全て入ってますので。

なので、そのまま

(function() {
    "use strict";
    kintone.events.on( "app.record.index.show", function(event) {
        var records = event.records;

varnouki = record.納期.value;

        return event;
    });
})();

と記述するとエラーになるので

(function() {
    "use strict";
    kintone.events.on( "app.record.index.show", function(event) {
        var records = event.records;

for(var i = 0; i < record.length; i++) {
varnouki = record[i].納期.value;
}

        return event;
    });
})();

というような形で、for分の中で処理をしてください。

その中で、条件指定してPUTすればできると思います。

 

しぶい 様

お世話になっております。

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

まさにご指摘の通りの間違いをしておりました。

コードまで書いてくださって…!ありがとうございます。

JavaScriptの勉強を始めたばかりで、よく分からないまま進んできてしまったので勉強になります。

今後ともお願いいたします。