Aアプリの作業記録のレコードを削除した連番とリンクしたBアプリの自動単重計算アプリのレコードを自動削除することは可能でしょうか。連動させたいのが目的です。※テーブルの行ではなく、レコードごと削除した場合です。
↓現状のコードになります。こちらに追加して実装したいと考えています。
(function() {
"use strict";
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], async function(event) {
try {
// アプリIDの取得
// レコード番号の取得
console.log(event);
// リクエストプロパティ(JSON)
var params = {
"app": 420,
"record": {
"日付": { "value": event.record.日付.value },
"計量機No": { "value": event.record.計量機No.value },
"連番": { "value": event.record.連番.value },
"担当者1": { "value": event.record.担当者1.value },
"担当者2": { "value": event.record.担当者2.value },
"サイズ名": { "value": event.record.サイズ名.value },
"めっき種類": { "value": event.record.めっき種類.value },
"単重1A": { "value": event.record.単重1.value },
"単重2B": { "value": event.record.単重2.value },
"個数1A": { "value": event.record.個数.value },
"形態": { "value": event.record.形態.value },
}
};
// kintone REST API リクエスト ~ レコードの登録(POST)
const postResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', params);
// GETリクエストプロパティ(JSON)
var params = {
"app": 420,
"id": postResp.id // POSTした結果のレコード番号
};
// kintone REST API リクエスト ~ レコードの取得(GET)
const getResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'GET', params);
event.record.単重計算後.value = getResp.record.単重計算後.value;
return event;
} catch (e) {
// エラー
return event;
}
});
})();
G.Qさん
先の続きになります。
レコード削除時ですので「app.record.detail.delete.submit(詳細画面削除時)」または「app.record.index.delete.submit(一覧画面削除)」イベントでの実行となります。
削除はレコード削除(DELETE)APIにて処理します。
ご覧になっていいただくと「ids」(レコード番号の配列)の指定が必要です。
そのため、処理順序としては以下のようになります。
①自レコード(作業記録のレコード)の連番と一致する自動単重計算アプリをGETする。
②GETしたレコード番号を配列に格納する。
③レコード番号の配列をパラメータidsに指定してDELETEする。
koichiさん
これを実装するうえで、前回実装させていただいた連番と単重の自動入力のコードを合わせた場合に
単重が入力されず、エラーが発生してしまいます。恐れ入りますが、原因をご教授いただけないでしょうか。
※単体ではエラーなく入力されます。
(function(){
'use strict';
kintone.events.on([
// レコード保存実行前イベント(「保存」をクリックした時)
'app.record.create.submit',
'app.record.create.show',
'app.record.edit.show',
], function(event){
// GETのパラメータ
const body = {
// 当月中の最新レコードから一つ前
'app':event.appId,
'query': '作成日時 = TODAY() and 計量機No in ("' + event.record.計量機No.value + '") order by 作成日時 desc limit 1'
};
// kintone.Promiseを使用した同期的処理
return kintone.api(kintone.api.url('/k/v1/records.json', true),'GET', body).then(function(resp){
const records = resp.records;
const rec = records[0];
var autono = '';
// 日付のフォーマット関数
function dateToStr(date) {
return date.getFullYear() + ('0' + (date.getMonth() + 1)).slice(-2) + ('0' + (date.getDate())).slice(-2);
}
if (event.record.計量機No.value == "手詰め"){
var keiryouki = 0;
}
else {
var keiryouki = event.record.計量機No.value;
}
// 当月のレコードが存在する場合の処理
if (records.length > 0){
autono = rec['連番'].value.slice(-4);
autono = ('000'+(Number(autono)+1)).slice(-4);
autono = dateToStr(new Date()) + '-' + keiryouki +'-' + autono;
}
// 当月のレコードが存在しない場合(月初のレコードの場合)の処理
else {
autono = dateToStr(new Date())+"-"+ keiryouki +'-0001';
}
// autonoをフィールドに入れる
if (event.record.計量機No.value == "手詰め") event.record.連番.value = autono;
if (event.record.計量機No.value == 1) event.record.連番.value = autono;
if (event.record.計量機No.value == 2) event.record.連番.value = autono;
if (event.record.計量機No.value == 3) event.record.連番.value = autono;
if (event.record.計量機No.value == 4) event.record.連番.value = autono;
if (event.record.計量機No.value == 5) event.record.連番.value = autono;
return event;
});
});
}) ();
(function() {
"use strict";
kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], async function(event) {
try {
// アプリIDの取得
// レコード番号の取得
console.log(event);
// リクエストプロパティ(JSON)
var params = {
"app": 420,
"record": {
"日付": { "value": event.record.日付.value },
"計量機No": { "value": event.record.計量機No.value },
"連番": { "value": event.record.連番.value },
"担当者1": { "value": event.record.担当者1.value },
"担当者2": { "value": event.record.担当者2.value },
"サイズ名": { "value": event.record.サイズ名.value },
"めっき種類": { "value": event.record.めっき種類.value },
"単重1A": { "value": event.record.単重1.value },
"単重2B": { "value": event.record.単重2.value },
"個数1A": { "value": event.record.個数.value },
"形態": { "value": event.record.形態.value },
}
};
// kintone REST API リクエスト ~ レコードの登録(POST)
const postResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', params);
// GETリクエストプロパティ(JSON)
var params = {
"app": 420,
"id": postResp.id // POSTした結果のレコード番号
};
// kintone REST API リクエスト ~ レコードの取得(GET)
const getResp = await kintone.api(kintone.api.url('/k/v1/record', true), 'GET', params);
event.record.単重計算後.value = getResp.record.単重計算後.value;
return event;
} catch (e) {
// エラー
return event;
}
});
})();
画像のエラーメッセージを見た限りでは、連番フィールドが数値フィールドですが
POST APIでは文字列で登録しようとしていることが原因と思います。
アプリID:420の連番フィールドをご確認ください。
そちらが数値フィールドであれば、文字列1行フィールドに変更が必要です。
koichiさん
返信ありがとうございます。
上記で無事エラー解消されました。ありがとうございました。
また別アプリ同連番のレコード削除に対して実装する際にも、メッセージ送らせて頂きます。
ご迷惑ばかりおかけしていますが、よろしくお願い致します。
ご確認ありがとうございます。エラー解消し何よりです。
迷惑だなんてことは無いですよ。
kintoneの活用を広げるために少しでもお力になれますと幸いです。
カスタマイズを生業にされている企業様もいらっしゃいますので、
複雑なコードを丸々ご提示することは極力控えており、その点はご了承ください。
JavaScriptカスタマイズは一度手を出すと永遠に良いものを求めてしまう沼にハマりますので
根気強く向き合っていかなければなりませんね。