新規投稿
フォローする

顧客Noで紐づいている複数アプリのルックアップフィールドの一括更新

顧客No(テキスト)を更新した際に、顧客Noに紐づいている他のアプリのルックアップフィールドに登録されている該当する複数レコードの顧客Noも一括で更新したいと考えています。

例:顧客管理アプリ.顧客No(文字列_1行) 13→T0001

意向チェックシートアプリ.顧客No(ルックアップ) 13→T0001

「複数アプリへのレコード一括処理」を見たり、他の投稿などもみながら、試行錯誤しましたが、どうにもうまくいきません。

https://developer.cybozu.io/hc/ja/articles/201941814-%E8%A4%87%E6%95%B0%E3%82%A2%E3%83%97%E3%83%AA%E3%81%B8%E3%81%AE%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E6%8B%AC%E5%87%A6%E7%90%86 

確認できたことは以下の通りです。

①bodyのrequests内が一つだと動作します。(下のコードの意向チェックシートの部分は単体でもエラーになりますが)

②意向チェックシートアプリの更新で、更新するレコードの指定をqueryではなくidで直接していすると動作する。(その場合でも、①の通り、顧客管理アプリの更新と合わせると動作しませんが)

③/k/v1/bulkRequestではなく、/k/v1/recordに代えて意向チェックシートのルックアップでない文字列_1行のフィールドの更新を試すと、queryで指定するとエラーとなるが、idで指定すると動作した。

④上記③において、更新フィールドをルックアップフィールドに変更すると、エラーとなった。

以上です。

おそらく多くの改善点が必要なような気がいたしますが、やりたいことは冒頭に記載している内容です。

そのため、それを実現できる他の方法やヒントなどもあればご教示いただけますと幸いです。

よろしくお願いします。

 

kintone.events.on([
  'app.record.edit.submit.success',
  'app.record.create.submit.success',
  'mobile.app.record.edit.submit.success',
  'mobile.app.record.create.submit.success'
],function(event) {
 //window.alert('はじめようkintone JavaScript API');
 
 var r = event.record;
 //console.log(r['顧客No'].value);
 var be =r.文字列__1行_更新前.value;//更新前の顧客No
 var af =r.文字列__1行_更新後.value;//更新後の顧客No
  
 var body = {
  'requests': [
    {//顧客管理
      'method': 'PUT',
      'api': '/k/v1/record.json',
      'payload': {
        'app': 3,
        'id': be,
        //'revision': 2,
        'record': {
          '顧客No': {
            'value': af
          }
        }
      }
    },
    {//意向チェックシート
      'method': 'PUT',
      'api': '/k/v1/record.json',
      'payload': {
        'app': 5,
        'query': 'ルックアップ_顧客No ="' + be + '"',
        //'revision': 2,
        //'id': 6,
        'record': {
          'ルックアップ_顧客No': {
            'value': af
          }
        }
      }
    }
  ]
};

kintone.api(kintone.api.url('/k/v1/bulkRequest', true), 'POST', body, function(resp) {
  // success
  console.log(resp);
}, function(error) {
  // error
  console.log(error);
});
 
/*
var body2 = {
  'app': 5,
  //'query': 'ルックアップ_顧客No ="' + be + '"',
  'id': 6,
  'record': {'ルックアップ_顧客No': {'value': af}}}
  kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body2, function(resp2) {
    console.log(resp2);
  })
*/
 }
 );//kintone.events.on終わり

 

 

0

4件のコメント

Avatar
村濱一樹

ご認識のとおり2つ目のものは、queryは使えないと思いますが、そうでなくても動かないとのことなので

 

> ①bodyのrequests内が一つだと動作します。(下のコードの意向チェックシートの部分は単体でもエラーになりますが)

 

エラー内容などを示していただくと僕も含め他の方も答えやすくなるかと思います。

参考

https://developer.cybozu.io/hc/ja/articles/207613916

https://developer.cybozu.io/hc/ja/articles/360038920252-kintoneカスタマイズの基本的なデバッグの流れを身につけよう

0
Avatar
栗栖 史匡

村濱様

 

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

またわかりづらい内容だったかも知れませんが、ご親切にありがとうございます。

エラー内容は、404NotFoundだったり、405BadRequestだったりしてて、

村濱様の内容によるとおそらく僕のやりたいことはできるはずだと思って、他にいろいろと試してみた結果、できました!

 

原因は、更新しようとしている対象のデータがなかったこと(404NotFound)や、ルックアップ項目を更新しようとしたときに、

更新後の値に紐づくルックアップ先レコードが存在しないエラー(405BadRequest)でした。

 

https://developer.cybozu.io/hc/ja/articles/204537310

の記事も参考にしておそらく僕の実現したい機能は出来上がりそうです。

ヒントを与えてくださりありがとうございました。

0
Avatar
村濱一樹

うまく動作しない勘所としては、単純にプログラムのコードが悪い他にも、APIでうまくパラメーターが指定されてないパターンもありますので(今回のように404や405も含め)、どこで失敗しているか見極めることができれば、今後とも素早く解決できると思います!

1
Avatar
栗栖 史匡

村濱様

それでエラーになることもあるんですね。AccessSQLと同じつもりだったので、とてもよい勉強になりました。

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

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