新規投稿
フォローする

マスタを間接的に更新するアプリ

実現したいこと

 マスタ更新アプリで入力した「新住所」をマスタの「住所」にセットして更新したい。

マスタ更新アプリは、ルックアップでマスタから「住所」を獲得し、旧住所のフィールドに表示し、

「新住所」を入力する仕様であある。

 

 エラー情報

マスタの「住所」が更新されない。

window.alertとして以下の内容が表示される。

 

利用したソースコード

(function() {
    'use strict';
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function (event){
 // 新住所を取得する
 var record = event.record;
 var updatedAt = record['新住所'].value;
 window.alert(updatedAt);
 var lookupvl = record['ルックアップ'].value;
 window.alert(lookupvl);
//                 
var body = {
  'app': (1) ,
  'updatekey': {
     'field' : '(生徒コード)' ,
     'value' : (lookupvl) ,
  },
  'record': {
    '住所': {
      'value': (updatedAt), 
    },
  }
}
kintone.api(kintone.api.url('/k/v1/record.jason', true), 'PUT', body, function(resp) {
  // success
  window.alert(resp);
}, function(error) {
  // error
  window.alert(error);
})})})();

 

試したこと

 

再現条件

  • 画面・イベント:詳細画面
  • カスタマイズに関連するフィールド(フィールド種類/フィールド名/フィールドコード):
  • 権限設定:
  • デバイス(PC or モバイル):PC
  • OS・ブラウザ:Windows10・edge
  • IP制限などネットワークに特殊なことがあれば:

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

0

19件のコメント

Avatar
あさが

こんばんは。

細かいところは確認していませんが、APIのURLが間違ってるようです。

kintone.api(kintone.api.url('/k/v1/record.jason', true), 'PUT', body, function(resp) {

jason → json ですね。

0
Avatar
溝淵恵美

こんにちは。

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

早速、修正し再実行いたしましたが、結果は同じものでした。

.jsonを削除して実行したところ、エラーではありましたが、window.alert(error)の内容が変化しました。

以下の表示です。

 

 

0
Avatar
あさが

こんにちは。

window.alert() の箇所を console.log() に置き換えたら、内容を確認できるかと思います。

その際、結果は開発者ツールのコンソールに表示されるのでご注意下さい。

コンソールについては以下をご覧下さい。

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

0
Avatar
溝淵恵美

ありがとうございます。ブラウザをchromeに変更し、コンソールに表示しました。

エラーの意味がよくわかりませんが、ご指摘いただけますでしょうか。よろしくお願いいたします。

0
Avatar
溝淵恵美

1つ前のコメントに加えて、以下の質問をさせていただいてもよろしいでしょうか。

PUTの説明に以下のリクエストヘッダが必要とありましたが、これが関連しているのでしょうか。

PUT /k/v1/record.json HTTP/1.1
Host: example.cybozu.com:443
X-Cybozu-Authorization: QWRtaW5pc3RyYXRvcjpjeWJvenU=
Authorization: Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
Content-Type: application/json

上記コードの設定が必要な場合のサンプル(*.js)があればと思うのですが・・・。
0
Avatar
あさが

こんにちは。

送っているデータがおかしい可能性がありますね。

コンソールに表示されているメッセージをクリックすると、隠れている部分が展開されてもう少し詳細なエラーメッセージを確認できる場合がありますので、確認してみてはいかがでしょうか。

パッと見た感じだと、JSON内にある()は不要そうです。

0
Avatar
溝淵恵美

お疲れ様です。

以下の詳細メッセージが表示されました。

リエストヘッダについて、ご教授おねがいできますか。

セッション認証には、「X-Requested-With」ヘッダーが必要です。"

0
Avatar
あさが

こんにちは。

JavaScript APIを使ってる場合、通常はそのエラーは出ないはずなんですよね・・・。

他に原因があるかもしれないので、最新のソースコードを貼って頂いて良いでしょうか?

0
Avatar
溝淵恵美

ご対応ありがとうございます。最新のソースコードです。

最後の()を削除すると、最初の2件のwindow.alertが表示されなくなったので、もどしました。

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

(function() {
    'use strict';  
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function (event){
 // 新住所を取得する
 var record = event.record;
 var updatedAt = record['新住所'].value;
 window.alert(updatedAt);
 var lookupvl = record['ルックアップ'].value;
 window.alert(lookupvl);
//                 
var body = {
  'app': 1,
    records :[
      {
        'updatekey': {

          'field' : '生徒コード' ,
          'value' : lookupvl ,
       },
       'record': {
         '住所': {
           'value': updatedAt , 
         },
      }
    
  },
]
};
//
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
  window.alert(lookupvl);
}, function(resp) {
  // error
  console.log(resp);
}
);
});
})();
0
Avatar
あさが

こんにちは。

実行しているAPIが「/k/v1/record」という事は、1レコードを更新されたいという事ですよね?

だとしたら、JSONのフォーマットが違ってそうです。(recordsの配列にはならない)

こんな感じでしょうか。

var body = {
'app': 1,
'updateKey': {
'field' : '生徒コード' ,
'value' : lookupvl ,
},
'record': {
'住所': {
'value': updatedAt ,
}
}
};
0
Avatar
溝淵恵美

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

1レコード更新にソースを置き換えて、再実行しましたが、エラーでした。ピンクの部分だけになりましたが・・・。

 

0
Avatar
溝淵恵美

お疲れ様です。

PUT (中略) 400 Bad Request とエラーメッセージが出力されていますが、

エラー概要一覧のようなドキュメントはないのでしょうか。

あるいは、1件更新のサンプルソースはないのでしょうか。

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

 

0
Avatar
あさが

JSONを修正すればいけそうなのですが、なんででしょうね・・・。
(400 Bad Requestなので、送ってるJSONに原因がありそうな気はします)

サンプルですが、チュートリアルには1件の追加、複数件の更新しか無さそうですね。

APIドキュメントのJavaScriptサンプルか、コミュニティの過去記事を検索するぐらいでしょうか。

0
Avatar
溝淵恵美

そもそも、APIドキュメントのPUTのサンプルを見てソースを作成しました。()をつけたり、はずしたり、

’→”へ変更したり、いろいろ試してみましたが、だめでした。

eslintをインストールし、チェックしましたが、エラーは0でした。ワーニングはたくさんありましたが、・・・。

マスタのアクセス権限もすべてチェックを入れてあります。

Kintoneのバグ・・・。マスタのアップデートキーの項目の設定も、重複禁止にチェックを入れてあります。

1件の更新(PUT)について、アップデートキーによる例題をぜひ、テストお願いできないでしょうか。

そして、詳細イベントの処理については、正しく動作しています。入力した、ルックアップと新住所はアラートで正しく

表示されます。

 

0
Avatar
あさが

最新のソースを見せて頂ければ、確認はさせて頂けますよ。(解決するかどうかは・・・^^;)

0
Avatar
溝淵恵美

ありがとうございます。最新のソースを貼り付けます。(From Visual Studio Code : ESLint  インストール済  )

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

(function() {
    "use strict";  
    kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function (event){
 // 新住所を取得する
 var record = event.record;
 var updatedAt = record["新住所"].value;
 window.alert(updatedAt);
 var lookupvl = record["ルックアップ"].value;
 window.alert(lookupvl);
//                 
var body = {
  "app": 1 ,
        "updatekey": {
          "field": "生徒コード" ,
          "value": lookupvl
       },
       "record": {
         "住所": { "value": updatedAt }
      }
};
//
 kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', body, function(resp) {
  // success
  console.log(resp);
  window.alert(lookupvl);
}, function(resp) {
  // error
  console.log(resp);
}
);
});
})();
0
Avatar
あさが

JSONを作ってる箇所ですが、updatekeyをupdateKeyに変えたらどうなりますか?(kを大文字)

多分、400エラーが出ているのは、これが原因な気がします。

0
Avatar
溝淵恵美

お世話になりました!!!

マスタ更新成功しました。

KintoneのJavaScriptによるカスタマイズの第一歩を踏み出すことができました。

今後、カスタマイズの処理を続ける上で、おおきな記念になりました。教訓になりました。

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

さまざまな失礼をお許しください・・・。

 

 

0
Avatar
あさが

うまく動いたんですね、良かったです!

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