edit.submit時にapiで取得した情報がレコードに反映されない

以下コードを設定しております。

前提として以下のコード以外にedit.showのapiで別の値を設定してreturnしています。

そのあとにsubmint時に以下の通り値を設定していますが組織2~4に取得したユーザ情報が反映されません。

 

意図としてはedit.showで取得した値をもとにedit.submitでapiにて値を取得したいため上記のような処理にしております。

お手数ですがご教示いただけないでしょうか。

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

/*
* 回答の条件によって別フィールドの表示/非表示を切り替えるサンプルプログラム
*/
(function() {
    “use strict”;

    //レコードの追加、編集、詳細画面で適用する
    var events = [
        ‘app.record.create.submit’,
        ‘app.record.edit.submit’,
        ‘app.record.index.edit.submit’,
        ];

    kintone.events.on(events, function(event) {

        var record = event.record;
        
        
    if(record[‘氏名’][‘value’]==“”){
        alert(“氏名が入力されていません。”)
        return false;
    }else{
        
        record[‘氏名_文字’][‘value’]=record[‘年度’][‘value’]+record[‘氏名’][‘value’][0][‘name’]
    }
        
    if(record[‘所属’][‘value’]==“”){
        alert(“所属が入力されていません。”)
        return false;
    }else{
        
        record[‘所属_文字’][‘value’]=record[‘所属’][‘value’][0][‘name’]
    }
        
        //初期化
    record[‘2階層’][‘value’]=[];
     record[‘2階層_代表事務’][‘value’]=[];
    record[‘3階層’][‘value’]=[];
    record[‘4階層’][‘value’]=[];

      if(record[‘所属’][‘value’].length==0){
        return event;
      }
       
      if(!record[‘職種’][‘value’]){
        return event;
      }
       
      //ユーザからユーザ名を設定
          if(record[‘氏名’][‘value’]==“”){
        alert(“氏名が入力されていません。”)
        return false;
    }else{
        
        record[‘氏名_文字’][‘value’]=record[‘年度’][‘value’]+record[‘氏名’][‘value’][0][‘name’]
    }
        
    if(record[‘所属’][‘value’]==“”){
        alert(“所属が入力されていません。”)
        return false;
    }else{
        
        record[‘所属_文字’][‘value’]=record[‘所属’][‘value’][0][‘name’]
    }

  // var nendo = record[‘年度’].value;
    // var hyoukasuruhito = record[‘評価する人’].value[0].code;
    var kyoten = record[“所属”].value[0].code;
    var user =record[“氏名”].value; //tanka
    var jimu=record[‘職種’][‘value’];
    
    var params = {
      ‘app’: 823,
      ‘query’: ‘拠点コード in ("’ + kyoten + ‘") order by $id asc limit 1’
    };
    
    kintone.api(‘/k/v1/records’, ‘GET’, params, function (resp) {
      if (resp[‘records’].length >= 1) {
        //  console.log(resp2[‘records’][0][‘拠点’].value[0].code);
        // var setRecord = kintone.app.record.get();
        

    //階層に評価者が含まれる場合、自分の階層および下位階層をクリア tanaka
    
            if(resp[‘records’][0][‘4階層’].value.some( a => a.name === user[0].name)){
          record[‘2階層’][‘value’]=[];
          record[‘2階層_代表事務’][‘value’]=[];
          record[‘3階層’][‘value’]=[];
          record[‘4階層’][‘value’]=[];
        }else if(resp[‘records’][0][‘3階層’].value.some( a => a.name === user[0].name)){
          record[‘4階層’]=resp[‘records’][0][‘4階層’];
          record[‘3階層’][‘value’]=[];
          record[‘2階層’][‘value’]=[];
          record[‘2階層_代表事務’][‘value’]=[];
        }else if(resp[‘records’][0][‘2階層’].value.some( a => a.name === user[0].name)){
          record[‘4階層’]=resp[‘records’][0][‘4階層’];
          record[‘3階層’] = resp[‘records’][0][‘3階層’];
          record[‘2階層’][‘value’]=[];
          record[‘2階層_代表事務’][‘value’]=[];
        }else{
          record[‘2階層’]=resp[‘records’][0][‘2階層’];
          record[‘3階層’] = resp[‘records’][0][‘3階層’];
          record[‘4階層’] = resp[‘records’][0][‘4階層’];
          
          if(jimu==‘事務職’){
            record[‘2階層_代表事務’]=resp[‘records’][0][‘2階層_代表事務’];
          }else{
            record[‘2階層_代表事務’][‘value’]=[];
          }
        }
        // if(resp[‘records’][0][‘4階層’].value.some( a => a.name === user[0].name)){
        //   setRecord[‘record’][‘2階層’][‘value’]=[];
        //   setRecord[‘record’][‘2階層_代表事務’][‘value’]=[];
        //   setRecord[‘record’][‘3階層’][‘value’]=[];
        //   setRecord[‘record’][‘4階層’][‘value’]=[];
        // }else if(resp[‘records’][0][‘3階層’].value.some( a => a.name === user[0].name)){
        //   setRecord[‘record’][‘4階層’]=resp[‘records’][0][‘4階層’];
        //   setRecord[‘record’][‘3階層’][‘value’]=[];
        //   setRecord[‘record’][‘2階層’][‘value’]=[];
        //   setRecord[‘record’][‘2階層_代表事務’][‘value’]=[];
        // }else if(resp[‘records’][0][‘2階層’].value.some( a => a.name === user[0].name)){
        //   setRecord[‘record’][‘4階層’]=resp[‘records’][0][‘4階層’];
        //   setRecord[‘record’][‘3階層’] = resp[‘records’][0][‘3階層’];
        //   setRecord[‘record’][‘2階層’][‘value’]=[];
        //   setRecord[‘record’][‘2階層_代表事務’][‘value’]=[];
        // }else{
        //   setRecord[‘record’][‘2階層’]=resp[‘records’][0][‘2階層’];
        //   setRecord[‘record’][‘3階層’] = resp[‘records’][0][‘3階層’];
        //   setRecord[‘record’][‘4階層’] = resp[‘records’][0][‘4階層’];
          
        //   if(jimu==‘事務職’){
        //     setRecord[‘record’][‘2階層_代表事務’]=resp[‘records’][0][‘2階層_代表事務’];
        //   }else{
        //     setRecord[‘record’][‘2階層_代表事務’][‘value’]=[];
        //   }
        // }
        // kintone.app.record.set(setRecord);

      
        
    }else{

            event.error = “【目標管理者が取得できません。人事課にご連絡ください。】”;
    }
    
            
    // if( record[‘3階層’][‘value’].indexOf(user)){
    //     record[‘3階層’][‘value’]=[];
    // record[‘4階層’][‘value’]=[];
    // }
    // if( record[‘4階層’][‘value’].indexOf(user)){
    // record[‘4階層’][‘value’]=[];
    // }

    
    //     if(setRecord[‘record’][‘4階層’].value.some( a => a.name === user[0].name)){
    //       setRecord[‘record’][‘4階層’]=[];
      
    // }
    });
    

      console.log(events);
  return event;
    
    
  });

})();

submitイベントでAPIを使う場合、成功時のコールバック関数に続きの処理を記載するのではなく、then()で繋いでevent.recordを書き換える形のPromiseが必要です(Promiseを使用しないとAPI処理の完了より先にレコードの保存処理が実行されるので、待つ処理が必要です)。

kintoneにおけるPromiseの書き方の基本が参考になるかと思います。

mls-hashimotoさん

なるほど。やはりPromiseが必要なのですね。

教えていただいた方法にて以下のように記載を変更しました。

その際に添付のように404のエラーが発生するようになりました。

まだ考慮ができていない箇所がありますでしょうか。

なおParamについては設定されていることを確認済みです。

/*
 * 回答の条件によって別フィールドの表示/非表示を切り替えるサンプルプログラム
 */
(function () {
  "use strict";

  //tanaka_start
  //レコードの追加、編集、詳細画面で適用する
  // var events = ['app.record.create.change.所属_目標管理者取得用',
  //               'app.record.edit.change.所属_目標管理者取得用',
  //               'app.record.create.change.評価する人',
  //               'app.record.edit.change.評価する人',
  //               'app.record.create.change.職種役職',
  //               'app.record.edit.change.職種役職'               
  //               ];
  
  //edit時に取得した値をもとに管理者を取得する
      var events = [
        'app.record.create.submit',
        'app.record.edit.submit',
        'app.record.index.edit.submit',
        ];
  // kintone.events.on(events, function (event) { 
    kintone.events.on(events, async (event) => {
    var record = event.record;
    
        //初期化
      record['2階層']['value']=[];
        record['2階層_代表事務']['value']=[];
      record['3階層']['value']=[];
      record['4階層']['value']=[];

       if(!record['所属']['value']){
         return event;
       }
       
             if(!record['職種']['value']){
         return event;
       }
       
             if(!record['氏名']['value']){
         return event;
       }
       
           var jimu=record['職種']['value'];
    
  // var nendo = record['年度'].value;
    // var hyoukasuruhito = record['評価する人'].value[0].code;
    var kyoten = record["所属"].value[0].code;
    var user =record["氏名"].value; //tankaa
    var params = {
      'app': 823,
      'query': '拠点コード in ("' + kyoten + '") order by $id asc limit 1'
    };
    
    // 商品アプリからデータ(レコードID: 1) を取得する
    const resp = await kintone.api(kintone.api.url('/k/v1/record', true), 'GET', params);

    // kintone.api('/k/v1/records', 'GET', params, function (resp) {
      if (resp['records'].length >= 1) {
        //  console.log(resp2['records'][0]['拠点'].value[0].code);
        var setRecord = kintone.app.record.get();
        //階層に評価者が含まれる場合、自分の階層および下位階層をクリア tanaka
        if(resp['records'][0]['4階層'].value.some( a => a.name === user[0].name)){
          setRecord['record']['2階層']['value']=[];
          setRecord['record']['2階層_代表事務']['value']=[];
          setRecord['record']['3階層']['value']=[];
          setRecord['record']['4階層']['value']=[];
        }else if(resp['records'][0]['3階層'].value.some( a => a.name === user[0].name)){
          setRecord['record']['4階層']=resp['records'][0]['4階層'];
          setRecord['record']['3階層']['value']=[];
          setRecord['record']['2階層']['value']=[];
          setRecord['record']['2階層_代表事務']['value']=[];
        }else if(resp['records'][0]['2階層'].value.some( a => a.name === user[0].name)){
          setRecord['record']['4階層']=resp['records'][0]['4階層'];
          setRecord['record']['3階層'] = resp['records'][0]['3階層'];
          setRecord['record']['2階層']['value']=[];
          setRecord['record']['2階層_代表事務']['value']=[];
        }else{
          setRecord['record']['2階層']=resp['records'][0]['2階層'];
          setRecord['record']['3階層'] = resp['records'][0]['3階層'];
          setRecord['record']['4階層'] = resp['records'][0]['4階層'];
          
          if(jimu=='事務職'){
            setRecord['record']['2階層_代表事務']=resp['records'][0]['2階層_代表事務'];
          }else{
            setRecord['record']['2階層_代表事務']['value']=[];
          }
        }

        kintone.app.record.set(setRecord);
    }else{

            event.error = "【目標管理者が取得できません。人事課にご連絡ください。】";
    }
    // });
  });
  console.log(events);
  return event;
})();

takokichi さま

kintone.api.url('/k/v1/record', true)

kintone.api.url('/k/v1/records', true)

クエリを設定してレコードの取得を行う場合、取得するレコードが1件でも複数選択であるrecordsが必要です。エラーはレコードの1件取得(record)を実行しようとして、リクエストボディに必要なレコードidがない旨ですね。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。