新規投稿
フォローする

PUTサブテーブルデータ更新ができない

背景・実現したいこと

別アプリの在庫情報(テーブル)を取得し、在庫のプラスマイナスを行い、

別アプリに結果を返す(データ更新)を行いたいと考えております。

 

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

まずは入庫からテストを行っているところなのですが、

PUTの部分が正しく動作していないと思っております。

ただ、エラーのコンソールも反応しない為、どんなエラーなのかわからない状態です。

PUT部分の表記が正しくないのでしょうか。

 

利用したソースコード

(function() {
  'use strict';
  
  // レコードkを更新する関数
  const putRecord = function(upAppID, upAppRe, upTableValue){
    
    const params = {
      app: upAppID, // アップするレアプリID
      id: upAppRe, // アップするレコード
      record: {
        '倉庫内在庫一覧':{
          value: upTableValue
        }
      }
    };
    
    return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', params).then(function(resp){
      console.log(resp);
        window.alert('更新更新しました');
      }).catch(function(resp2){
        //Error
        console.log(resp2);
      });
    
  };
  
  
  // 保存ボタンを押したら
  const events = [
    'app.record.create.submit'
  ];
  
  kintone.events.on(events, function(event) {
    
    // 在庫が反映済みだったら
    if (event.record['在庫反映'].value == '反映済み'){
      return event;
    }
    
    // 在庫一覧のデータを取得
    const cTableValue = event.record['倉庫内在庫一覧'].value;
    var zaiko = 0;
    var gaitou_flag = 0;
    var count = 0;
    
    
    const targetAppId = kintone.app.getLookupTargetAppId('倉庫ID');
    const targetRecordId = event.record['倉庫レコード番号'].value;
    
    const body = {
      app: targetAppId,
      id: targetRecordId,
    };
    
    
    kintone.api(kintone.api.url('/k/v1/record', true), 'GET', body, function(resp){

      // 状態毎で処理を分ける
      switch(event.record['状態'].value){
        case "入庫":
          
                    var results = resp.record['倉庫内在庫一覧'].value.map(function(cT){
            if (cT.value['商品コード'].value == event.record['該当商品コード'].value){
              cT.value['在庫'].value = Number(cT.value['在庫'].value) + Number(event.record['入庫重量'].value);
              gaitou_flag = 1; // フラグ建てる
            }
            
            return cT;
            
          });
          
          resp.record['倉庫内在庫一覧'].value = results;
          putRecord(targetAppId, targetRecordId, resp.record['倉庫内在庫一覧'].value);
          
          // 該当
          if (gaitou_flag == 1){
            
          }
          
          break;
        case "出庫":
          break;
        case "倉庫間移動":
          break;
      }
      
    });
    
    return event;
    
  });
})();
0

2件のコメント

Avatar
rex0220

この書き方だと非同期の kintone.api(~ の実行結果を待たずに、return event; が実行され詳細画面に画面遷移します。

kintoneにおけるPromiseの書き方の基本 にいろいろ非同期処理の対応方法について記載があります。

ページ内の「正しい例」のコードが参考になると思います。

0
Avatar
ひさしい

>rex0220 様

コメントいただき、ありがとうございます。

業務の合間合間で試行錯誤してようやく非同期処理の対応ができました。

Promiseの記述はまだ怪しい部分がございますが、

いただきました書き方を参考に出庫部分などの構築してまいります。

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

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