ワンクリックで承認 カスタマイズ

https://developer.cybozu.io/hc/ja/articles/211583223-%E3%83%AF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E4%B8%80%E6%8B%AC%E6%89%BF%E8%AA%8D%E3%82%92%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86

ワンクリック申請をしたいのですが、作業者を設定していると別にコードが必要でしたので

申請 → 承認 は固定の作業者なので obj[“assignee”] = “ユーザー名”; を追加すると出来たのですが

未申請 → 申請 はユーザーによって上長が変わります。

固定ではない作業者の場合はどのようなコードを組めば作動させることが出来るのでしょうか?

 

(function() {
"use strict";
kintone.events.on("app.record.index.show", function(event) {
var appId = kintone.app.getId();
if (event.viewId !== 00000) {
return;
}
if ($('.header-contents').length !== 0) {
return;
}
var el = kintone.app.getHeaderSpaceElement();
var headerDiv = $("<div></div>", {
class: "header-contents"
});
//make a button for approval.
var balusButton = $("<button></button>", {
class: "approval-button"
}).
html("一括承認").
click(function() {
if (event.records.length > 0) {
window.swal({
title: "全て承認を実行しますか?",
text: "表示されているレコードを全て承認します",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "承認",
cancelButtonText: "キャンセル",
closeOnConfirm: false },
function() {
var records = [];
for (var h = 0; h < event.records.length; h++) {
var obj = {};
obj["id"] = event.records[h].$id.value;
obj["action"] = "承認する";       //プロセス管理で設定されたアクション名を指定
records.push(obj);
}
var requestObj = {
"app": appId,
"records": records
};
kintone.api(kintone.api.url("/k/v1/records/status", true), "PUT", requestObj, function() {
window.swal({title: "承認されました。",
text: "お疲れ様でした。",
type: "success"}, function() {
location.reload();
});
});
});
} else {
window.swal({
title: "申請中のレコードがありません",
type: "warning"});
}
});
headerDiv.append(balusButton);
headerDiv.append($("<br />"));
headerDiv.appendTo(el);
});
})();

tktktkさん

こんにちは。もし、まだ解決されていないようでしたら、下記はいかがでしょうか。

 

PUTするパラメータ内のobj[“assignee”] に、各レコードの上長ユーザーを指定します。

for (var h = 0; h < event.records.length; h++) {

varobj = {};

obj[“id”] = event.records[h].$id.value;

obj[“action”] = “申請”; //プロセス管理で設定されたアクション名を指定

obj[“assignee”] = event.records[h].上長.value[0].code; //次プロセスの作業者を指定

records.push(obj);

}

 

上記例では、上長に複数名指定されている場合であっても、一番上(配列では0番目)のユーザーが次の作業者となります。

koichi様 回答ありがとうございます。

obj[“assignee”] = event.records[h].上長.value[0].code; //次プロセスの作業者を指定

>作業者を指定というのは上長に設定されているユーザー全員を指定する、ということですか?

 

ちなみに上長はユーザー情報で一人ひとりに指定しているものになります。

tktktk様

 

obj[“assignee”] = event.records[h].上長.value[0].code;

このコードでは、各レコードの上長フィールド(ユーザー選択かと思います)のユーザーを指定する形になりますので、

想定される上長を全員指定する必要はございません。

 

ちなみに、各レコードの上長フィールド(ユーザー選択かと思います)には、1名だけ指定されるという認識で間違いないでしょうか。

Aさんのレコードでは、上長Xさん

Bさんのレコードでは、上長Yさん

Cさんのレコードでは、上長Xさん など。

 

レコード内で上長が1名だけでしたら、上記のコードそのままで問題ありません。

1レコードで上長が複数名指定される場合は、少し書き方が違ってきます。

また、「上長」のフィールドコードを別の名前にされてましたら、そちらに修正をお願いします。

koichi様

今はプロセス管理で自動で選択されるようにしているので作動しなかったんですね。

ユーザー選択フィールドを配置してもいいんですが、もし今の環境で作動出来そうなコードは難しいでしょうか?

もしくはユーザー情報で設定している所属長を、自動でユーザー選択フィールドにコピーする、など

tktktk様

プロセス管理では、申請中のステータスで、どのように作業者を指定されてますでしょうか。下図赤枠部分です。

ユーザー選択フィールドを使われていないということで、

上長となる特定のユーザーを直接指定(1名 or 複数名)、またはグループ名での指定でしょうか。

ユーザー情報で設定している所属長をAPIを使って取得し、ユーザー選択フィールドに自動指定することも可能です。

そちらは後ほど、コード載せますね。

koichi様

1名指定になります。

tktktk様

「所属長」(仮にログイン名:shozokucho)というユーザー1名だけでしたら、下記のようになります。

for (var h = 0; h < event.records.length; h++) {
 var obj = {};
 obj["id"] = event.records[h].$id.value;
 obj["action"] = "申請"; //プロセス管理で設定されたアクション名を指定
 obj["assignee"] = "shozokucho"; //所属長のログイン名
 records.push(obj);
}

 

「所属長」というアプリ内のユーザー選択フィールドでしたら、先の記述のようになります。

for (var h = 0; h < event.records.length; h++) {
 var obj = {};
 obj["id"] = event.records[h].$id.value;
 obj["action"] = "申請"; //プロセス管理で設定されたアクション名を指定
 obj["assignee"] = event.records[h].所属長.value[0].code; //所属長(ユーザー選択フィールド)
 records.push(obj);
}

tktktk様

続きになりますが、もしcybozu.com共通管理のユーザー情報で「所属長」のプロフィール項目を設定している場合は、

下記の方法で取得することができます。

// レコード追加画面表示時
kintone.events.on('app.record.create.show', function(event) {

 // ユーザーGETパラメータ
 var params = {
  codes: kintone.getLoginUser().code
 };

 // ユーザー情報取得
 kintone.api(kintone.api.url('/v1/users', true), 'GET', params).then(function(resp) {
  var myRecord = kintone.app.record.get();
  myRecord.record.所属長.value = [{ code: resp.users[0].customItemValues[0].code }];
  kintone.app.record.set(myRecord);

 }).catch(function(error) {
  console.log(error);
 });

 return event;

});

customItemValues[0]は、プロフィール項目の作成順に0から順番で付きますので、

先に他項目を作成されてましたら、配列番号が変わります。

また、上記例では、所属長フィールドには、ユーザーの表示名ではなく、ログイン名(ID)が表示されますので、ご注意ください。