お世話になっております。
現在、Garoonのワークフローを使用しており、最終承認前に一度だけkintoneにデータを送信する仕組みを作成したいと考えています。
背景
弊社ではトヨクモ社の「プリントクリエイター」を利用しており、最終承認時には「kintoneのデータ」を基にPDFを生成し、それをGaroonのWFに添付する運用を行っています。
そのため、Garoon WFの最終承認前にkintoneにデータを送信する必要があります。
現在の課題
以下のコードをチャットGPTに流しながら作成しましたが、「一度だけデータを送信する」ということが機能しておらず、最終承認者以外のkintoneライセンス保持者が承認を行うと、データが複数回送信される状態になっています。
理想としては、キントーンにデータが飛ぶ、もしくは最初の承認でのみ、kintoneにデータを送信したいと考えています。
(() => {
‘use strict’;
const kintoneAppId = 425;
const domain = window.document.location.origin;
// kintoneにワークフローのデータを登録
const addKintoneTask = async (token, request) => {
const body = {
app: kintoneAppId,
record: {
title: {value: request.items.title.value},
employee_number: {value: request.items.employee_number.value},
department: {value: request.items.department.value},
office_name: {value: request.items.office_name.value},
Company_Name: {value: request.items.Company_Name.value},
location: {value: request.items.location.value},
telephone_number: {value: request.items.telephone_number.value},
Business_content: {value: request.items.Business_content.value},
Employment_type: {value: request.items.Employment_type.value},
Contract_start_date: {value: request.items.Contract_start_date.value},
Contract_expiration_date: {value: request.items.Contract_expiration_date.value},
Reason_for_side_job: {value: request.items.Reason_for_side_job.value},
Commuting_method: {value: request.items.Commuting_method.value},
one_month_working_hours: {value: request.items.one_month_working_hours.value},
Other_reporting_matters: {value: request.items.Other_reporting_matters.value},
Link: {value: ${domain}/g/workflow/view.csp?fid=-3&pid=${request.id}
},
},
};
const response = await fetch(/k/v1/record.json?__REQUEST_TOKEN__=${token}
, {
method: ‘POST’,
headers: {
‘X-Requested-With’: ‘XMLHttpRequest’,
‘Content-Type’: ‘application/json’,
},
body: JSON.stringify(body),
});
if (!response.ok) {
throw new Error(‘kintoneレコードの登録時にエラーが発生しました’);
}
return response;
};
garoon.events.on(‘workflow.request.approve.submit.success’, async (event) => {
const request = event.request;
const status = request.status.type;
// すでに処理が実行された場合は何もしない
if (window.workflowExecuted) {
return event;
}
// 最初の承認時のみ実行(最初の承認が完了した場合のみ実行)
if (status !== 'IN_PROGRESS' && status !== 'APPROVE') {
return event;
}
try {
// 承認後にkintoneのCSRFトークンを取得する
const token = await garoon.connect.kintone.getRequestToken();
await addKintoneTask(token, request);
// 実行済みフラグをセット(1回だけ実行するため)
window.workflowExecuted = true; // ローカルでフラグを設定
} catch (error) {
window.alert(error.message || '承認しました');
}
return event;
});
})();
どのようにすれば、最終承認前に一度だけデータを送信するロジックを実現できるでしょうか
ご存知の方がいればお知恵をお貸しください。
何卒、よろしくお願いいたします。