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終了タグ
});
コンソールにエラーがでてないということですが、APIのパラメーターなどがわるい場合もありますので、ぜひこちらを参考に通信内容をみてみてください。
(また、お書きいただいている方法ですと1件1件処理して最大100件の通信が行われるように見受けられ、少し効率がわるいので一括での更新をおすすめします
suzuki 様
恐らく、REST API部分でreturn してしまっているため、forがループしないのかと思われます。
繰り返しされたいのでした、REST APIの部分を再帰関数を作成するか、上記の村濱一樹様が言われているようにまとめて処理されるならbulkRequestでされるのがよろしいかと思われます。
またご質問等ございましたら、お答えできるかと思いますので、よろしくお願いいたします。
追記:
申し訳ございません、bulkRequestを使わずとも、PUTするレコードが100件以下でしたら、REST APIのURL部分をrecordsにすることで対応できました。
誤った回答をしてしまったので追記させて頂いております。
村濱一樹様Yuki Minamitani様
アドバイス頂きありがとうございます。
頂いた内容を確認して対応してみたいと思います。
また不明点が出てきましたらこちらでご質問させて頂きますので、その際はよろしくお願いいたします。
村濱一樹様 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));
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);
});
});
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)
}];
})();
system
(system)
クローズされました:
8
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。