garoon からkintoneへの連系について

素人で申し訳ございません。下記、コードにてgaroonのワークフローの設定にJavaScript / CSSによるカスタマイズで.jsファイルを読み込んだら一応承認者が1人ならkintoneアプリのレコードを作成する事ができましたが、承認者が3人になるとレコードが3つ出来てしまいます。複数承認者が居てもワークフローでの1申請につき、1つだけkintoneレコード追加したいのですがどの様にコードを変更すれば良いでしょうか?できれば最終承認者が承認したらレコードを1つ作成できる様にできたら嬉しいです。それできるとかなり業務が捗るのでご意見伺えたら幸いです。よろしくお願い致します。

 

/**
* Garoon JavaScript APIを使ったサンプルプログラム
*
* 「grwf_to_kinapp.js」ファイル
*
* Copyright (c) 2017 Cybozu
*
* Licensed under the MIT License
*/
(function() {
‘use strict’;
// xxx部分にkintoneのアプリIDを入力する
var kintoneAppId = 6;

// kintoneにワークフローのデータを登録
function addKintoneTask(token, request) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open(‘POST’, ‘/k/v1/record.json?__REQUEST_TOKEN__=’ + token);
xmlhttp.setRequestHeader(‘X-Requested-With’, ‘XMLHttpRequest’);
xmlhttp.setRequestHeader(‘Content-Type’, ‘application/json’);
var body = {};
body.app = kintoneAppId;
body.record = {};
body.record[‘shimei’] = {};
body.record[‘shimei’].value = request[‘items’][‘shimei’][‘value’];
body.record[‘daihyousyashimei’] = {};
body.record[‘daihyousyashimei’].value = request[‘items’][‘daihyousyashimei’][‘value’];
body.record[‘torihikisakimei’] = {};
body.record[‘torihikisakimei’].value = request[‘items’][‘torihikisakimei’][‘value’];
body.record[‘rinku’] = {};
body.record[‘rinku’].value = location.href;
xmlhttp.send(JSON.stringify(body));
xmlhttp.onload = function() {
return xmlhttp.responseText;
};
}

// 承認後にkintoneのCSRFトークンを取得する。
garoon.events.on(‘workflow.request.approve.submit.success’, function(event) {
// console.log(event);
var request = event.request;

return garoon.connect.kintone.getRequestToken().then(function(token) {
try {
addKintoneTask(token, request);
} catch (e) {
alert(e);
}
});
});

})();

寺尾さん

こんにちは。

 

該当のコードに関しては、

garoon.events.on('workflow.request.approve.submit.success', function(event) {

と記載があるので、ワークフローにて、[承認する]ボタンをクリックし、サーバーの保存が成功した後に

記述した処理が動きます。

処理内においては、イベントが動いた際、addKintoneTask(kintone への登録処理)が動くので、承認するたびに

登録がされる状況となります。

なので、承認者が最終承認者である場合にのみ、登録処理を行うようにコードを修正してあげることで、希望の形になるのではないかと思います。

また、複数回の登録を行いたくないのであれば、addKintoneTaskを実行する前に、登録を行おうとしている情報をもとに、

一度kintoneのレコードを取得し、あったら登録しないor更新する。なかったら登録するといった処理を行うことで、承認者の人数を問わず、

1件のレコードにまとめることはできると思います。