自動採番における条件設定

こんにちは。

自動採番をしたいのですが、プログラミング初心者で困っています。

途中まではできたのですが、途中で採番できなくなりました。

以下の内容で、アドバイスをいただきたく、どうぞよろしくお願い致します。

 

背景・実現したいこと

薬品の在庫をKintoneを用いて管理したいと考えております。

薬品情報を入力したレコードの追加と編集画面保存時、薬品番号が空欄の場合に、

保管棚&棚の段数&連番 となる番号採番をしたいと思っております。

なお、下記コードの保管棚や保管棚板のフィールドは、文字列で自動計算を設定しています。

 

エラー情報 (開発者ツールのコンソール)

レコードの保存時、コンソールにエラーは表示されないのですが、

番号が付与されず、薬品番号は空欄のままです。

 

レコードの新規保存時では、正常に採番できたのですが、

編集画面保存時、薬品番号が空欄の場合、という2点を追加すると採番できなくなりました。

if(record[‘薬品番号’].value ===“”)の部分です。

何が原因かわからず、困っております。

 

利用したソースコード

(function() {

 'use strict';

 // レコード追加、編集画面保存時
 var events = ['app.record.create.submit', 'app.record.edit.submit'];
 kintone.events.on(events, function(event) {
 
   var record = event.record;
 
 if(record['薬品番号'].value ===""){

  var body = {
   'app': event.appId,
   'query': '保管棚 in ("' + record.保管棚.value + '") and 保管棚段 in ("' + record.保管棚段.value + '") order by 番号 desc limit 1',
   'fields': ['薬品番号', '番号']
  };

  return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(resp) {

   if (resp.records.length == 0) {
    // 採番(1番目)
    record.番号.value = 1;
    record.薬品番号.value = record.保管棚.value + '-' + record.保管棚段.value + '01';
   } else {
    // 採番(2番目以降)
    var myId = Number(resp.records[0].番号.value) + 1;
    var newId = ("00" + myId).slice(-2);
    record.番号.value = myId;
    record.薬品番号.value = record.保管棚.value + '-' + record.保管棚段.value + newId;
   }
  });
  }
  else {}
return event;
 });

})();

if(record[‘薬品番号’].value ===“”)

ですが、この書き方ですと、「厳密に空欄か」という比較になります。
実際には、厳密の空欄の場合 “” と、未入力の undefined の両方の可能性があるので、空欄チェック(nullチェック)はゆるい比較が良いと思います。

if(!record[‘薬品番号’].value)

このように論理否定演算子 ! を使うことでチェックできます。
(ただしこれは数値の0もひっかかってしまうのでそこだけ注意です)

 

村濱様、ご返答ありがとうございます。

if(!record[‘薬品番号’].value)に置き換えました。

しかしながら、薬品番号は空欄のままでした。(エラーも出ていません。)

 

どこでプログラムが止まっているか確認するため、アラートメッセージを設定しました。

結果、下記のようにプログラミングの最後の方に設定してもメッセージが表示されることを確認しました。

これまではメッセージが表示されていなかったので、if(!record[‘薬品番号’].value)に書き換えることで前進することができました。

ありがとうございます。

 

if文が動いていることは確認できたのですが、

なぜ、薬品番号は空欄のままのか原因がわかりません。

アドバイスをいただけると嬉しいです。

僕のコメントはif文が動作したないことだけに言及したコメントでした。

> なぜ、薬品番号は空欄のままのか原因がわかりません。

これは、下記がどうさしない、という意味であってますか?

> record.薬品番号.value = record.保管棚.value + ‘-’ + record.保管棚段.value + ‘01’;
> record.薬品番号.value = record.保管棚.value + ‘-’ + record.保管棚段.value + newId;

直後に return event; してないので反映されてないように思えますね。
下記のような感じです。

kintoneにおけるPromiseの書き方の基本

 

 

村濱様、アドバイスありがとうございます。

return eventを追加することで無事に動きました。

とても助かりました。

ありがとうございました。