いつもお世話になっております。
一覧で表示したレコードのキーを使用して一括で別のアプリに登録したい を応用したいですが、
「一括登録」が成功した場合⇒ 売上アプリ へ〇〇件登録成功しました。というメッセージで表示し、失敗した場合⇒失敗しました。というメッセージで表示したいです。
今のところ、alert(" 売上アプリ へ登録成功しました。");でメッセージは出ますが、OKボタンを3回押さないと消えないようになっております。
ご教授いただけますようよろしくお願い致します。
(function () {
“use strict”;
kintone.events.on(‘app.record.index.show’, function(event){
var records = event.records;
// ヘッダースペース要素の取得
var headerSpace = kintone.app.getHeaderMenuSpaceElement();
// ボタン要素の作成
var button = document.createElement(“input”);
button.value = “一括登録”;
button.type = “button”;
// ボタンがクリックされた時の処理
var submit = function(){
// レコード一覧のイベントで取得したレコードそれぞれに対して登録の処理を行う
records.forEach(function(data){
// 今日の日付を取得し正規表現で成形
var date = (new Date).toLocaleString().match(/\d+/\d+/\d+/)[0];
// 年月日から四桁の年月(“/“区切り)に変換
var today = date.match(/\d{2}/\d{1,2}/)[0];
// 月が一桁の場合に0を追加
if(//\d$/.test(today)){
today = today.replace(/\d$/,function(str){
return “0” + str;
});
}
// “/“を削除
today = today.replace(///g, “”);
// レコードの共通部分の定義
var record = {
“売上区分” : {“value”: “月契約”},
“売上年月” : {“value”: today},
“内約” : {“value”: “オプション料金”},
“入金予定日” : {“value” : date.replace(/\d+$/, “27”).replace(///g, “-”)}, // 年月日の日付を27日に変更し、”/“を”-“に変換
“税率” : {“value” : “8”} // 税率はパーセントか実数値かで適宜変更してください
};
// レコードそれぞれに対して決定するフィールドを定義
record[“顧客コード”] = data[“顧客コード”];
record[“契約NO”] = data[“契約NO”];
record[“支払方法”] = data[“支払方法”];
record[“商品”] = data[“商品”];
record[“数量”] = data[“数量”];
record[“単価”] = data[“単価”];
kintone.api(kintone.api.url(”/k/v1/record”, true), “POST”, {“app” : 516, “record” : record}, function(res){
// 成功時の処理
alert(” 売上アプリ へ登録成功しました。”);//←←←ここに追加しました。
console.log(“success”);
}
,function(err){
// 失敗時の処理
console.log(“error”);
}
);
});
};
// ボタンをヘッダースペースに追加
headerSpace.appendChild(button);
// ボタンのクリックイベントに処理を登録
button.onclick = submit;
});
})();
goroさん
ループ処理の中で1件ずつPOSTしているため、何回も表示されています。
登録APIは一括登録のAPIも用意されているので、こちらで実装するとアラートが一回で表示されると思います。
https://developer.cybozu.io/hc/ja/articles/202166160#step2
(function() {
'use strict';
kintone.events.on('app.record.index.show', function(event) {
var records = event.records;
// ヘッダースペース要素の取得
var headerSpace = kintone.app.getHeaderMenuSpaceElement();
// ボタン要素の作成
var button = document.createElement('input');
button.value = '一括登録';
button.type = 'button';
// ボタンがクリックされた時の処理
var submit = function() {
// PUTするRecordsを用意する。
var put_records = [];
// レコード一覧のイベントで取得したレコードそれぞれに対して登録の処理を行う
records.forEach(function(data) {
// 今日の日付を取得し正規表現で成形
var date = (new Date).toLocaleString().match(/\d+\/\d+\/\d+/)[0];
// 年月日から四桁の年月("/"区切り)に変換
var today = date.match(/\d{2}\/\d{1,2}/)[0];
// 月が一桁の場合に0を追加
if (/\/\d$/.test(today)) {
today = today.replace(/\d$/, function(str) {
return '0' + str;
});
}
// "/"を削除
today = today.replace(/\//g, '');
// レコードの共通部分の定義
var record = {
'売上区分': { 'value': '月契約' },
'売上年月': { 'value': today },
'内約': { 'value': 'オプション料金' },
'入金予定日': { 'value': date.replace(/\d+$/, '27').replace(/\//g, '-') }, // 年月日の日付を27日に変更し、"/"を"-"に変換
'税率': { 'value': '8' } // 税率はパーセントか実数値かで適宜変更してください
};
// レコードそれぞれに対して決定するフィールドを定義
record['顧客コード'] = data['顧客コード'];
record['契約NO'] = data['契約NO'];
record['支払方法'] = data['支払方法'];
record['商品'] = data['商品'];
record['数量'] = data['数量'];
record['単価'] = data['単価'];
put_records.push(record);
});
var param = {
'app': 70,
'records': put_records
};
kintone.api(kintone.api.url('/k/v1/records', true), 'POST', param, function(resp) {
// success
alert('売上アプリへ登録成功しました。');
console.log(resp);
}, function(error) {
// error
console.log(error);
});
};
// ボタンをヘッダースペースに追加
headerSpace.appendChild(button);
// ボタンのクリックイベントに処理を登録
button.onclick = submit;
});
})();
こんな感じで行けると思います。
HANSA 様
お世話になっております。
早速コードまで回答いただき、誠にありがとうございます。想定してような動きが出来て、本当に感謝しております。
大変恐縮でございますが、①「一括登録」ボタンにアクセス権限与えることは可能でしょうか?ユーザーが誰でも押せたら、大変なことになると思ってまして(汗)②すでに登録があった場合、二重登録を防ぐためになにかよい方法はありますでしょうか?
何度も申し訳ございませんが、ご教授いただければ幸いです。
goroさん
実現できて良かったです^^
①「一括登録」ボタンにアクセス権限与えることは可能でしょうか?ユーザーが誰でも押せたら、大変なことになると思ってまして(汗)
ログインユーザーを取得するJavaScript APIが用意されているので、
ボタンを押したユーザーを判定することができます。
https://developer.cybozu.io/hc/ja/articles/201942024
Administrator(登録を許すユーザー)の情報をあらかじめ用意しておいて、
ログインユーザーと一致判定してあげれば実装可能だと思います。
②すでに登録があった場合、二重登録を防ぐためになにかよい方法はありますでしょうか?
1.POSTする側のアプリにフラグを持たせる。(チェックボックスなどで)
2.POSTする前にフラグがついてないかチェックする処理を入れる。(コメント1のput_records.push(record);の部分の前にでも)
3.POSTしたレコードにフラグを付ける。
4.3のレコードをPOSTする側のアプリにPUT(更新処理)してやる。
で行けると思います。
HANSA 様
お世話になっております。
何度もアドバイスいただき、本当にありがとうございます。まだどこからどう手をつければよろしいか混乱しておりますが、頑張って試してみます。
これからもどうぞよろしくお願い致します。
goroさん
①については
var nameArr = ['tanaka', 'suzuki']; // Administratorアカウント名
if(nameArr.indexOf(kintone.getLoginUser().name) == -1){
return event;
}
みたいな感じで行けると思います。
②に関しては、一度実装してみて、ご質問いただければと思います。
HANSA 様
お世話になっております。
再度教えていただき、本当にありがとうございます。
教えて頂いたように追加してみましたが、この2名以外がログインしてもボタンが押せることになってます。
ボタンを押すのはnameArrというコードも追加必要でしょうか?
なにも分からず大変恥ずかしいですが、お時間ありましたら、教えていただけますでしょうか?
var nameArr = ['田中誠一', '田中真一']; // ボタン押すユーザーログイン名
if(nameArr.indexOf(kintone.getLoginUser().name) == -1){
return event;
}
goro さん
コメント1で提示したコードのどの部分に下記のコードを挿入しましたか?
var nameArr = ['tanaka', 'suzuki']; // Administratorアカウント名
if(nameArr.indexOf(kintone.getLoginUser().name) == -1){
return event;
}
こちらのコードは、
nameArrという配列の要素に、ログインユーザーのログイン名が入っていない場合、return eventする。
という内容の処理です。
この動きの場合、ボタンを押した際に上記の処理を発生させるか、そもそもボタンを表示しないようにする必要があります。
前者の場合、ボタンを押した際に動く処理は、button.onclick…の部分です。後者の場合は、ボタンを表示する処理である、appendChild…部分です。
なので、どこに書けばいいかわかるかと思います。
実装頑張ってみてください!
HANSA 様
お世話になっております。何度もご親切に教えていただき、本当にありがとうございます。
以下のコードで想定された動きができました。本当にありがとうございました。
これからもどうぞ宜しくお願い致します。
(function() {
‘use strict’;
kintone.events.on(‘app.record.index.show’, function(event) {
var records = event.records;
// ヘッダースペース要素の取得
var headerSpace = kintone.app.getHeaderMenuSpaceElement();
// ボタン要素の作成
var button = document.createElement(‘input’);
button.value = ‘一括登録’;
button.type = ‘button’;
// ボタンがクリックされた時の処理
var submit = function() {
// PUTするRecordsを用意する。
var put_records = [];
// レコード一覧のイベントで取得したレコードそれぞれに対して登録の処理を行う
records.forEach(function(data) {
// 今日の日付を取得し正規表現で成形
var date = (new Date).toLocaleString().match(/\d+/\d+/\d+/)[0];
// 年月日から四桁の年月("/"区切り)に変換
var today = date.match(/\d{2}/\d{1,2}/)[0];
// 月が一桁の場合に0を追加
if (//\d$/.test(today)) {
today = today.replace(/\d$/, function(str) {
return ‘0’ + str;
});
}
// "/“を削除
today = today.replace(///g, ‘’);
// レコードの共通部分の定義
var record = {
‘売上区分’: { ‘value’: ‘月契約’ },
‘売上年月’: { ‘value’: today },
‘内約’: { ‘value’: ‘オプション料金’ },
‘入金予定日’: { ‘value’: date.replace(/\d+$/, ‘27’).replace(///g, ‘-’) }, // 年月日の日付を27日に変更し、”/“を”-"に変換
‘税率’: { ‘value’: ‘8’ } // 税率はパーセントか実数値かで適宜変更してください
};
// レコードそれぞれに対して決定するフィールドを定義
record[‘顧客コード’] = data[‘顧客コード’];
record[‘契約NO’] = data[‘契約NO’];
record[‘支払方法’] = data[‘支払方法’];
record[‘商品’] = data[‘商品’];
record[‘数量’] = data[‘数量’];
record[‘単価’] = data[‘単価’];
put_records.push(record);
});
var param = {
‘app’: 516,
‘records’: put_records
};
kintone.api(kintone.api.url(‘/k/v1/records’, true), ‘POST’, param, function(resp) {
// success
alert(‘売上アプリへ登録成功しました。’);
console.log(resp);
}, function(error) {
// error
console.log(error);
});
};
// ‘use strict’;
var nameArr = ['‘田中誠一’, ‘田中真一’]; // ボタン押すユーザー
if(nameArr.indexOf(kintone.getLoginUser().name) == -1){
return event;
}
else{
// ボタンをヘッダースペースに追加
headerSpace.appendChild(button);
}
// ボタンのクリックイベントに処理を登録
button.onclick = submit;
});
})();
HANSA 様
お世話になっております。
横から失礼いたします。
この投稿が大変勉強になっております。ただ初心者のもので、応用したいですが、うまくできなくて・・・
一括登録(アプリ自身に)ボタンについて にて、投稿しております。もしお時間など許すであればアドバイスなど頂けたら幸いです。
どうぞよろしくお願いいたします。