サービス書アプリ
顧客ID(文字列一行)、お客様名lookup(ルックアップ)
部品コード(テーブル名です)にある、
在庫管理No(文字列一行)※複数行異なる在庫管理Noが入ります
在庫管理アプリ
管理No(文字一列)が
サービス書アプリの部品コードテーブル内の在庫管理Noと
一致するとき
入出庫履歴(テーブル名です)にある
顧客ID(文字列一行)、顧客名(文字列一行)
にサービス書アプリの
顧客ID、お客様名lookup
の値を入れたいと考えています。
jsを作成してみましたが
保存できない状況です。
在庫管理にもなにも走っていません。
ミスしているところがわかれば
お教えいただけますと大変ありがたいのですが
何卒、宜しくお願い致します。
(function() {
‘use strict’;
// レコード追加時に発生するイベント
kintone.events.on('app.record.create.submit', async function(event) {
await processCustomerInfo(event);
return event;
});
// レコード保存時に発生するイベント
kintone.events.on('app.record.edit.submit', async function(event) {
await processCustomerInfo(event);
return event;
});
// 顧客情報を処理する共通関数
async function processCustomerInfo(event) {
const record = event.record;
// サービス書アプリから必要な情報を取得
const customerId = record['顧客ID'].value;
const customerName = record['お客様名'].value;
const partsCodeTable = record['部品コード'].value; // ここがテーブルです
// 部品コードテーブル内の「在庫管理No」を配列で取得
const stockNumbers = partsCodeTable.map(item => item['在庫管理No'].value);
// 在庫管理アプリの管理Noと一致するレコードを検索
const inventoryAppId = 53;
const inventoryApi = await kintone.api('/k/v1/records', 'GET', {
app: inventoryAppId,
query: '管理No in ("' + stockNumbers.join('","') + '")'
});
const inventoryRecords = inventoryApi.records;
// 入出庫履歴テーブルにデータを追加
const inOutHistoryTable = inventoryRecords.map(inventoryRecord => ({
'顧客ID': {
'value': customerId
},
'顧客名': {
'value': customerName
}
}));
// 入出庫履歴にレコードを追加するAPI呼び出し
const updateEvent = {
app: inventoryAppId,
records: inOutHistoryTable
};
await kintone.api('/k/v1/records', 'POST', updateEvent);
}
})();
コンソールのエラーです。ご参考頂けますと幸いです。
3か所の修正を行ってみました。修正後のコードもまとめて張り付けておきますのでご確認ください。
1:下記のテーブルデータを取得する部分と
const stockNumbers = partsCodeTable.map(item => item[‘在庫管理No’].value);
2:下記のテーブルデータを保存する部分です。
const inOutHistoryTable = inventoryRecords.map(inventoryRecord => ({・・・・
3:データ更新時のメソッドを変更
await kintone.api(‘/k/v1/records’, ‘POST’, updateEvent);
なお、在庫管理アプリのテーブルの名前が「入出庫履歴」なので、データは累積させたいのでしょうか?その場合にはinOutHistoryTable に既存及び追加したい行の値を含める必要があります。
テーブルの更新については、下記を参考にしてください。
レコード更新におけるテーブル操作のテクニック - cybozu developer network
(function() {
'use strict';
// レコード追 加時に発生するイベント
kintone.events.on('app.record.create.submit', async function(event) {
await processCustomerInfo(event);
return event;
});
// レコード保存時に発生するイベント
kintone.events.on('app.record.edit.submit', async function(event) {
await processCustomerInfo(event);
return event;
});
// 顧客情報を処理する共通関数
async function processCustomerInfo(event) {
const record = event.record;
// サービス書アプリから必要な情報を取得
const customerId = record['顧客ID'].value;
const customerName = record['お客様名'].value;
const partsCodeTable = record['部品コード'].value; // ここがテーブルです
// 部品コードテーブル内の「在庫管理No」を配列で取得
//データー構造を修正
const stockNumbers = partsCodeTable.map(item => item.value.在庫管理No.value);
// 在庫管理アプリの管理Noと一致するレコードを検索
const inventoryAppId = 53;
const inventoryApi = await kintone.api('/k/v1/records', 'GET', {
app: inventoryAppId,
query: '管理No in ("' + stockNumbers.join('","') + '")'
});
const inventoryRecords = inventoryApi.records;
// 入出庫履歴テーブルにデータを追加
const inOutHistoryTable = inventoryRecords.map(inventoryRecord => ({
id: inventoryRecord.$id.value,
record: {
'入出庫履歴': { // ここにテーブルのフィールドコードを指定
value: [{ // テーブルの各行のデータは配列として指定
value: { // 各セルのデータ
'顧客ID': {
value: customerId
},
'顧客名': {
value: customerName
}
// 他のテーブル列のデータ
}
}]
}
}
}));
const updateEvent = {
app: inventoryAppId,
records: inOutHistoryTable
};
await kintone.api(kintone.api.url('/k/v1/records'), 'PUT', updateEvent);
}
})();
1 Like
lemon_sour様
お忙しいところ、ご連絡頂きまして
誠にありがとうございます。
動作の確認が取れました。
顧客IDは在庫管理アプリに入っていて
顧客名 が入らないのですが
サービス書のお客様名がルックアップフィールドの為
でしょうか?
データは累積させていきたいのですが、
現状だといつも一行目が上書きされる認識でよいでしょうか?
どんどん次の行次の行という風に
足されていくようにしたいので行の指定が
必要になる認識であっていますでしょうか?
大変恐縮ですが、お教えいただけますと幸いです。
何卒、宜しくお願い致します。
↓
こちら在庫管理の顧客名のフィールドコードが間違えていたので
解決できました!
また、テーブルは最後の行に追加する
という認識でよいでしょうか?
一応、下記jsで想定通りの動きにはなったかと思われます。
(function () {
‘use strict’;
// レコード追加時に発生するイベント
kintone.events.on('app.record.create.submit', async function (event) {
await processCustomerInfo(event);
return event;
});
// レコード保存時に発生するイベント
kintone.events.on('app.record.edit.submit', async function (event) {
await processCustomerInfo(event);
return event;
});
// 顧客情報を処理する共通関数
async function processCustomerInfo(event) {
const record = event.record;
// サービス書アプリから必要な情報を取得
const customerId = record['顧客ID'].value;
const customerName = record['お客様名lookup'].value;
const visitDate = record['訪問日'].value; // 訪問日(日付フィールド)を取得
const partsCodeTable = record['部品コード'].value; // 部品コードテーブル
// 部品コードテーブル内の「在庫管理No」を配列で取得
const stockNumbers = partsCodeTable.map(item => item.value.在庫管理No.value);
// 在庫管理アプリの管理Noと一致するレコードを検索
const inventoryAppId = 53;
const inventoryApi = await kintone.api('/k/v1/records', 'GET', {
app: inventoryAppId,
query: '管理No in ("' + stockNumbers.join('","') + '")'
});
const inventoryRecords = inventoryApi.records;
// 各在庫管理レコードに対して入出庫履歴テーブルを更新
for (const inventoryRecord of inventoryRecords) {
// 現在の入出庫履歴を取得
const currentHistory = inventoryRecord['入出庫履歴'].value || [];
// 新しい履歴データを作成
const newHistoryRow = {
value: {
'顧客ID': { value: customerId },
'顧客名0': { value: customerName },
'出庫日': { value: visitDate } // 出庫日に訪問日を設定
// 必要に応じて他の列も追加
}
};
// 新しい行を履歴に追加(累積)
const updatedHistory = [...currentHistory, newHistoryRow];
// 更新データを構築
const updateEvent = {
app: inventoryAppId,
id: inventoryRecord['$id'].value,
record: {
'入出庫履歴': {
value: updatedHistory
}
}
};
// レコードを更新
await kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', updateEvent);
}
}
})();
system
(system)
Closed
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。