レコード一覧画面から別アプリへのレコード一括登録

お世話になっております。

 

【契約管理】というアプリから【勤怠管理】という別アプリへ複数のレコードを一括で新規登録したいと考えております。

 

契約管理アプリには契約期間(例:2016年1月1日~3月31日)が登録されており、

一覧画面に作成したinputフォームに年月を入力し、クエリー文を使用し該当レコードを検索・表示します。

 

指定年月のレコード表示はできたのですが、

その表示されたレコードすべてを勤怠管理アプリへ一括登録するPOST文の書き方が分かりません・・・

 

以下の内容を勤怠管理アプリへ登録したいと考えております。

 

契約管理アプリ 勤怠管理アプリ

No(数値フォーム) → No(ルックアップフォーム)

 

 

以下は現時点のjavascriptの内容です。

サンプルコードなどご教示願えますでしょうか。

=======================================================================================

(function () {
“use strict”;

kintone.events.on(‘app.record.index.show’, function (event) {

// 増殖バグを防ぐ
if (document.getElementById (‘Menu_Button’) != null) {
return;
}

if (document.getElementById (‘Menu_Button2’) != null) {
return;
}

// メニュ右側の空白部分にテキストボックスを設置
var MenuInput1 = document.createElement(‘input’);
MenuInput1.id = ‘Menu_Input1’;
MenuInput1.style.width = ‘100px’;
MenuInput1.style.height = ‘35px’;
MenuInput1.value = ‘2016’;

// メニュ右側の空白部分にテキストボックスを設置
var MenuInput2 = document.createElement(‘input’);
MenuInput2.id = ‘Menu_Input2’;
MenuInput2.style.width = ‘75px’;
MenuInput2.style.height = ‘35px’;

// メニュ右側の空白部分にボタンを設置
var MenuButton = document.createElement(‘button’);
MenuButton.id = ‘Menu_Button’;
MenuButton.innerHTML = ‘該当レコードを検索’;
MenuButton.style.height = ‘35px’;
MenuButton.onclick = function () {

var inputdata1 = Menu_Input1.value
var inputdata2 = Menu_Input2.value

if (inputdata2 == “1” || inputdata2 == “2” || inputdata2 == “3” || inputdata2 == “4” || inputdata2 == “5” || inputdata2 == “6” || inputdata2 == “7” || inputdata2 == “8” || inputdata2 == “9”) {
var inputdata3 = “0” + inputdata2;
} else {
var inputdata3 = inputdata2;
}

var inputdata3 = inputdata1 + “-” + inputdata3 + “-01”;

var str_query = ‘b5_0 <= "’ + inputdata3 + ‘" and b6_0 >= "’ + inputdata3 + ‘"’;

var pass = ‘https://domain.cybozu.com/k/80/?query=’ + str_query;

window.location.href = pass
}

// メニュ右側の空白部分にボタンを設置
var MenuButton2 = document.createElement(‘button’);
MenuButton2.id = ‘Menu_Button2’;
MenuButton2.innerHTML = ‘勤怠管理アプリに登録’;
MenuButton2.style.height = ‘35px’;
MenuButton2.onclick = function () {

 

 

// <<ここに検索・ソートされたレコードを別アプリに登録するコードを記載>>

 

 

}

 

var div0 = document.createElement(“div”);
div0.style.width = ‘100%’;
div0.innerHTML = ’ ';

var div1 = document.createElement(“div”);
div1.style.fontSize = ‘15px’;
div1.style.fontWeight = ‘bold’;
div1.innerHTML = ’ 年’;

var div2 = document.createElement(“div”);
div2.style.fontSize = ‘15px’;
div2.style.fontWeight = ‘bold’;
div2.innerHTML = '月 ';

kintone.app.getHeaderMenuSpaceElement().appendChild(MenuInput1);
kintone.app.getHeaderMenuSpaceElement().appendChild(div1);
kintone.app.getHeaderMenuSpaceElement().appendChild(MenuInput2);
kintone.app.getHeaderMenuSpaceElement().appendChild(div2);

kintone.app.getHeaderMenuSpaceElement().appendChild(MenuButton);
kintone.app.getHeaderMenuSpaceElement().appendChild(MenuButton2);
kintone.app.getHeaderMenuSpaceElement().appendChild(div0);

 

});
})();

=======================================================================================

 

 

y-kishiさん
cstapの瀧ヶ平です

REST APIでのPOST処理はこちらにあるような形式のデータをPOSTすることで登録できます。
こちらのTipsも参考になるのでぜひ一読ください

今回のような場合はすべてのレコードに対応するPOST用のレコード配列を作成するため、配列のmap関数を利用すると便利です。
map関数は例えば

var recordIds = event.records.map(function(record){
return record.$id.value;
});

のようにすることでmap関数のコールバック内でreturnした値の配列、つまりこの場合はevent.recordsのidの値のみの配列を作ることが可能です。

よって

kintone.api(kintone.api.url("/k/v1/records"), "POST", {app: appId, records: event.records.map(function(record){
return {
"No": {
value : record.No.value
}
};
})});

とすることで契約管理アプリから勤怠管理アプリにNoのフィールドのみをコピーして登録することができます。

だた、ルックアップフィールドはREST APIによる登録/更新が不可能(こちら参照)なのでほかの方法を考えた方が良いかと思います

参考になりますでしょうか?

cstap 瀧ヶ平 様

お世話になっております。

 

ご返信ありがとうございます。

教えていただきましたサンプルコードを使ったところ、

別アプリへレコードが一括登録され、問題なく動作いたしました。

関数の使い方などまだまだ疎いので、ご案内いただいたURLを参照し、勉強したいと思います。

 

最終的には以下のようなコードになりました。

===================================================================

(function () {
“use strict”;

kintone.events.on(‘app.record.index.show’, function (event) {

// 増殖バグを防ぐ
if (document.getElementById (‘Menu_Button’) != null) {
return;
}

if (document.getElementById (‘Menu_Button2’) != null) {
return;
}

// メニュ右側の空白部分にテキストボックスを設置
var MenuInput1 = document.createElement(‘input’);
MenuInput1.id = ‘Menu_Input1’;
MenuInput1.style.width = ‘100px’;
MenuInput1.style.height = ‘35px’;
MenuInput1.value = ‘2016’;

// メニュ右側の空白部分にテキストボックスを設置
var MenuInput2 = document.createElement(‘input’);
MenuInput2.id = ‘Menu_Input2’;
MenuInput2.style.width = ‘75px’;
MenuInput2.style.height = ‘35px’;

// メニュ右側の空白部分にボタンを設置
var MenuButton = document.createElement(‘button’);
MenuButton.id = ‘Menu_Button’;
MenuButton.innerHTML = ‘該当レコードを検索’;
MenuButton.style.height = ‘35px’;
MenuButton.onclick = function () {

var inputdata1 = Menu_Input1.value
var inputdata2 = Menu_Input2.value

if (inputdata2 == “1” || inputdata2 == “2” || inputdata2 == “3” || inputdata2 == “4” || inputdata2 == “5” || inputdata2 == “6” || inputdata2 == “7” || inputdata2 == “8” || inputdata2 == “9”) {
var inputdata3 = “0” + inputdata2;
} else {
var inputdata3 = inputdata2;
}

var inputdata3 = inputdata1 + “-” + inputdata3 + “-01”;

var str_query = ‘b5_0 <= "’ + inputdata3 + ‘" and b6_0 >= "’ + inputdata3 + ‘"’;

var pass = ‘https://domain.cybozu.com/k/80/?query=’ + str_query;

window.location.href = pass
}

// メニュ右側の空白部分にボタンを設置
var MenuButton2 = document.createElement(‘button’);
MenuButton2.id = ‘Menu_Button2’;
MenuButton2.innerHTML = ‘勤怠管理アプリに登録’;
MenuButton2.style.height = ‘35px’;
MenuButton2.onclick = function () {

// 「登録」ボタンの処理開始 + 確認ダイアログの表示
if(window.confirm(‘現在表示されているレコードを勤怠管理アプリへ登録しますか?’)){

kintone.api(kintone.api.url(“/k/v1/records”), “POST”, {app: 185, records: event.records.map(function(record){
return {
“keiyakuNo”: {
“value” : record.No.value
}
};
})});

window.alert(‘勤怠管理アプリへのレコード登録が完了しました’); // 完了ダイアログを表示

}
// 「OK」時の処理終了

// 「キャンセル」時の処理開始
else{

window.alert(‘キャンセルしました’); // 警告ダイアログを表示

}
// 「キャンセル」時の処理終了

}

var div0 = document.createElement(“div”);
div0.style.width = ‘100%’;
div0.innerHTML = ’ ';

var div1 = document.createElement(“div”);
div1.style.fontSize = ‘15px’;
div1.style.fontWeight = ‘bold’;
div1.innerHTML = ’ 年’;

var div2 = document.createElement(“div”);
div2.style.fontSize = ‘15px’;
div2.style.fontWeight = ‘bold’;
div2.innerHTML = '月 ';

kintone.app.getHeaderMenuSpaceElement().appendChild(MenuInput1);
kintone.app.getHeaderMenuSpaceElement().appendChild(div1);
kintone.app.getHeaderMenuSpaceElement().appendChild(MenuInput2);
kintone.app.getHeaderMenuSpaceElement().appendChild(div2);

kintone.app.getHeaderMenuSpaceElement().appendChild(MenuButton);
kintone.app.getHeaderMenuSpaceElement().appendChild(MenuButton2);
kintone.app.getHeaderMenuSpaceElement().appendChild(div0);

});
})();

===================================================================

数値フォーム → ルックアップフォームへの登録は不可能とのことですので、

一旦、数値フォーム → 数値フォームで登録し、

登録先のアプリ(勤怠管理アプリ)の編集画面を開いた際に数値フォームの値をルックアップフォームにコピーし、

自動取得する仕組みにしたいと思います。