新規投稿
フォローする

kintoneのレコード一覧画面からレコードを編集したい

kintoneアプリのレコード一覧画面が表示された時に

レコードAの値をレコードBにコピーして登録するプログラムを書いております。

 

現在エラーは特に出ていないのですが、レコードの詳細を見てもレコードBは空のままです。

下記のソースについて間違っている所や抜けている箇所が無いか見て頂けますと幸いです。

 

     // レコード詳細画面、
     kintone.events.on(["app.record.index.show"], (event) => {
         
        let records = event.records;
        let recNum = records.length;
        
        let appId = kintone.app.getId();
        
        console.log(records);
        for(let i = 0; i < recNum; i++) {
            let recs = records[i].$id.value;
            // レコード更新のパラメータ設定
            const body = {
              app: Number(appId),
              id: Number(recs),
              record: {
                社員番号: {
                  value: records[i].社員番号_sub.value,
                  lookup: true
                },
              }, 
            };
            
            return kintone.api(kintone.api.url('/k/v1/record.json', true), 'PUT', body, function(resp) {
                 // success
                 console.log(resp);
            }, function(error) {
                 // error
                 console.log(body);
                 console.log(error);
            });
        }//for終了タグ
        
     });

0

6件のコメント

Avatar
村濱一樹

コンソールにエラーがでてないということですが、APIのパラメーターなどがわるい場合もありますので、ぜひこちらを参考に通信内容をみてみてください。

(また、お書きいただいている方法ですと1件1件処理して最大100件の通信が行われるように見受けられ、少し効率がわるいので一括での更新をおすすめします

 

0
Avatar
Yuki Minamitani

suzuki 様
恐らく、REST API部分でreturn してしまっているため、forがループしないのかと思われます。

繰り返しされたいのでした、REST APIの部分を再帰関数を作成するか、上記の村濱一樹様が言われているようにまとめて処理されるならbulkRequestでされるのがよろしいかと思われます。

またご質問等ございましたら、お答えできるかと思いますので、よろしくお願いいたします。

追記:
申し訳ございません、bulkRequestを使わずとも、PUTするレコードが100件以下でしたら、REST APIのURL部分をrecordsにすることで対応できました。
誤った回答をしてしまったので追記させて頂いております。

Yuki Minamitaniにより編集されました
0
Avatar
suzuki

村濱一樹様 Yuki Minamitani

アドバイス頂きありがとうございます。

頂いた内容を確認して対応してみたいと思います。

また不明点が出てきましたらこちらでご質問させて頂きますので、その際はよろしくお願いいたします。

0
Avatar
suzuki

村濱一樹様 Yuki Minamitani

1点質問させてください。

一括での更新も見させていただいたのですが、id部分を変数で動的に変更して登録をしたい場合は下記の記述の場合どのあたりにfor文を入れればよろしいでしょうか。

 

const url = 'https://{subdomain}.cybozu.com/k/v1/records.json';
const body = {
  'app': kintone.app.getId(),
  'records': [
    {
      'id': 1001,
      'record': {
        '文字列__1行': {
          'value': 'ABC'
        }
      }
    },
    {
      'id': ★ここを動的に変えたい★,
      'record': {
        '文字列__1行': {
          'value': 'ABC'
        }
      }
    }
  ],
  // CSRF TOKEN: kintone上からAPI(POST, PUT, DELETE)を実行する場合に設定する必要あり
  '__REQUEST_TOKEN__': kintone.getRequestToken()
};

const xhr = new XMLHttpRequest();
xhr.open('PUT', url);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = () => {
  if (xhr.status === 200) {
    // success
    console.log(JSON.parse(xhr.responseText));
  } else {
    // error
    console.log(JSON.parse(xhr.responseText));
  }
};
xhr.send(JSON.stringify(body));

0
Avatar
Yuki Minamitani

suzuki 様

動的に変えたいのは、一回の処理でforを使って動的に変えたいのか、次回のイベント発火時に処理したいのかどちらでしょうか?

されたいこと予想して書いてみましたが、このような形が好ましいかと思われます。

kintone.events.on(["app.record.index.show"], (event) => {
  let records = event.records;
  let recNum = records.length;
  let appId = kintone.app.getId();
  let recs;

  let body = {
      app: appId,
      records: []
  };

  for (let i = 0; i < recNum; i++) {
      recs = records[i].$id.value;
      body.records.push(
          {
              id: Number(recs),
              record: {
                  社員番号: {
                      value: records[i].社員番号_sub.value,
                      lookup: true
                  },
              },
          }
      )
    }

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

 

0
Avatar
suzuki

Yuki Minamitani様

アドバイス頂きありがとうございます。

頂いた内容は無事に出来たのですが、ちょっとトラブルが発生してしまい、やり方を変える事になりました。

formbridgeで下記のjsを読み込んでいるのですが、updateがうまくいきません。こちらのソースは何か不備などありますでしょうか。

 

(function() {
  "use strict";

fb.events.form.submit = [function(setlookup) {
    const { KintoneRestAPIClient } = require('@kintone/rest-api-client');
    // クライアントの作成
    const client = new KintoneRestAPIClient({
      baseUrl: 'https://ドメイン.cybozu.com/',
      auth: {
        apiToken:['APIトークン']
      }
    });
    
    // リクエストパラメータの設定
    const APP_ID = 1;
    const RECORD_ID = 1;
    const params = {
     //アプリID
      app: APP_ID,
      id: RECORD_ID,
      record :{
        '社員番号':{value: setlookup.record.社員番号.value},
        '役職':{value: setlookup.record.役職.value},
        '部署':{value: setlookup.record.部署.value},
    }
    };

    // レコードの取得
    const addrecord = async(params)=>{
        let record;
        record = await client.record.updateRecord(params);
        return record
    }
    addrecord(params)

}];
  
})();

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