サブテーブルの文字列に値を挿入できない

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

サブテーブルの「ユーザー選択(ID)」と「文字列(氏名)」に値を挿入したいのですが、

「文字列」のみ値が入りません。

また、2行目以降は挿入され、1行目の文字列フィールドのみ値が入らない状況です。

チェンジイベントは動作しております。

エラーなどもなく、どこが原因かわかりません。

知恵をお貸しください。よろしくお願いいたします。

(function () {
  'use strict';
  var events = ['app.record.create.show'];
  // 作成時の営業所取得
  kintone.events.on(events, function (event) {
    var user = kintone.getLoginUser()['name'] === 'mionix';
    kintone.app.record.setFieldShown('ID', user);
    var UserCode = kintone.getLoginUser()['code']; // ログイン名を取得
    var path = '/v1/user/organizations';
    var data = {
      code: UserCode
    };
    kintone.api(path, 'GET', data, function (resp) {
      var record = kintone.app.record.get(); // レコード情報を取得
      record['record']['営業所']['value'] = resp['organizationTitles'][0]['organization']['name']; // フィールドコードが「組織」のフィールドに取得した組織名をセット
      kintone.app.record.set(record); // レコード情報をセット
    }, function (resp) {
      var errmsg = '所属組織取得時にエラーが発生しました。';
      if (resp.message !== undefined) {
        errmsg += '' + resp.message;
      }
      alert(errmsg);
    });
  });
  // 作成時と編集時のユーザー挿入
  var events3 = ['app.record.create.show', 'app.record.create.change.営業所', 'app.record.edit.change.営業所'];
  // 本番では営業所が多数あるためswihch文を使用しています
  kintone.events.on(events3, function (event) {
    var record = event.record;
    switch (record['営業所']['value']) {
    case 'A営業所':
      var newRow1 = createValue_(['aaa'], 'aaa', '', '', '', '', '', '', '');
      event.record.健康チェック.value = [
        newRow1
      ];
      break;
    }
    return event;
  });

  function createValue_(ID, 氏名, 体温, 咳, のどの痛み, 鼻水, 倦怠感, 息苦しさ, 同居人) {
    return {
      'value': {
        'ID': {
          'type': 'USER_SELECT',
          'value': [{
            'code': ID
          }]
        },
        '氏名': {
          'type': 'SINGLE_LINE_TEXT',
          'value': 氏名
        },
        '体温': {
          'type': 'NUMBER',
          'value': 体温
        },
        '咳': {
          "type": "DROP_DOWN",
          "value": 咳
        },
        'のどの痛み': {
          "type": "DROP_DOWN",
          "value": のどの痛み
        },
        '鼻水': {
          "type": "DROP_DOWN",
          "value": 鼻水
        },
        '倦怠感': {
          "type": "DROP_DOWN",
          "value": 倦怠感
        },
        '息苦しさ': {
          "type": "DROP_DOWN",
          "value": 息苦しさ
        },
        '同居人': {
          "type": "DROP_DOWN",
          "value": 同居人
        }
      }
    };
  }
})();

僕の考え違いならすいません。

  • 「2行目以降は挿入され、1行目の文字列フィールドのみ値が入らない状況」
  • 提示されているコードは質問のために切り出したもので実際に利用されているのは別

という上記の前提であれば、もしかすると1行目はkintoneがデフォルトで追加している行ではありませんか?
(言い換えると、1行目はコードで挿入したものではなく、2行目からがコードで挿入したものになっている)

テーブルは、画面上はデフォルトで最初かならず1行追加される仕様になっています。
その際、テーブルの各列のデフォルト値が入ります。なので、実際起きている状況をまとめると

  • コードから挿入していると思っていたが1行目に限ってはkintoneがデフォルトで挿入しているものだった
      - その際、IDフィールドはフォームのデフォルトで設定しているユーザーがはいっている
      - なので「コードは動作していてIDだけが入り氏名が入らないのはなぜ?」という勘違いがおきた。
  • 挿入のためのコード自体は問題ないので2行目以降は追加できている

上記はあくまで僕の推測なので間違っていたらすいません。

村濱一樹 様

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

記載通りの前提内容で間違いありません。

しかし、本番環境でもほぼ同じコードで同じ現象が起きております。

  – - その際、IDフィールドはフォームのデフォルトで設定しているユーザーがはいっている

ユーザー選択(ID)の初期値は設定しておらず、指定したコード通りのIDが出力されています。

https://developer.cybozu.io/hc/ja/articles/202796890-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E8%BF%BD%E5%8A%A0%E6%99%82%E3%81%AB%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%B8%E5%88%9D%E6%9C%9F%E5%80%A4%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B-

上記記事を参考にしたのですが、一行目から反映するといった解釈で合ってますでしょうか。

お手数ですが、よろしくお願いいたします。

テーブルに関するところ以外の箇所を見て、ようやくやりたいことが理解できました。

  1. ログインユーザーの所属組織を取得する
  2. 条件によって営業所フィールドの値が変わる
  3. 今回だと営業所フィールドが「A営業所」になるとテーブルに自動でデータを挿入したい

1,2の前提があって3の箇所でうまくデータがはいらない、とお見受けします。

3に問題があると疑われておりますが、もしかすると、実際は1,2の段階に問題があるかもです。
create.showのときのイベントでAPIでデータを取得し、kintone.app.record.set(record)でデータを反映させてますが、ちゃんとpromiseで同期処理を行えば僕の場合はうまく動作しました。具体的には下記のように修正しました。

kintone.api(path,'GET', data,function (resp) {varrecord = kintone.app.record.get();// レコード情報を取得record['record']['営業所']['value'] = resp['organizationTitles'][0]['organization']['name'];// フィールドコードが「組織」のフィールドに取得した組織名をセットkintone.app.record.set(record);// レコード情報をセット},function (resp) {varerrmsg ='所属組織取得時にエラーが発生しました。';if(resp.message !==undefined) {
        errmsg +=''+ resp.message;
      }
      alert(errmsg);
    });

return kintone.api(path, 'GET', data).then(function(resp) {
event.record['営業所']['value'] = resp['organizationTitles'][0]['organization']['name']; // フィールドコードが「組織」のフィールドに取得した組織名をセット
return event;
}).catch(function(resp) {
var errmsg = '所属組織取得時にエラーが発生しました。';
if (resp.message !== undefined) {
errmsg += '' + resp.message;
}
alert(errmsg);
})

Promiseについては下記を確認ください。
https://developer.cybozu.io/hc/ja/articles/360023047852-kintoneにおけるPromiseの書き方の基本

 

あくまで僕の環境でうごいただけなので、他にも問題はあるかもしれませんが、、、。

 

これでもだめなら、1,2のステップを除外し3の箇所がおかしくないかだけ確認するなど問題を細かくしていくとなにかわかるとおもいます。

村濱一樹

ご教示頂きありがとうございます。

説明が不足しており、申し訳ありませんでした。

ご提示頂いた内容に変更したところ、思い通りの動作ができました。

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