アプリ外から、レコードの追加がしたい

失礼いたします。

現在、ポータル等などからホップアップを表示させて、

input要素に記入された項目を使って、POST APIによりアプリへレコードの追加ができないかと思い試行錯誤しております。

ここにボタンを作成して、click発火でホップアップさせたいと思い以下のようなjsを全体jsにUPしました。

全体jsなので、要素の追加もjsで行っています。

想定としては、タスク作成用をイメージしてます。

(function(){
“use strict”;
$().ready(function() {
setTimeout(function(){

var body =[];

//タスク申請ボタンの作成追加
var tuika = document.createElement(“li”);
tuika.id = “tuika”;
var tasukuBT = document.createElement(“button”);
tasukuBT.id = “tasukuBT”;
tasukuBT.innerHTML = “タスク申請”;
tasukuBT.addEventListener(“click”,TasukuBT);
var login = kintone.getLoginUser().code;

tuika.appendChild(tasukuBT);
leftmenu.appendChild(tuika);

//ホップアップウィンドウの作成追加
var win = document.createElement(“div”);
win.id = “win”;
var mainta = document.createElement(“table”);
mainta.id = “mainta”;
var thead = document.createElement(“thead”);
var TR1 = document.createElement(“tr”);

var TR2 = document.createElement(“tr”);

var doropT = document.createElement(“p”);
doropT.id = “doropT”;
doropT.innerHTML = “タスク種別※”;
var shybetu = document.createElement(“select”);
shybetu.id = “shybetu”;
var OP1 = document.createElement(“option”);
OP1.innerHTML = “重要”;
var OP2 = document.createElement(“option”);
OP2.innerHTML = “その他”;

tuika.appendChild(win);
mainta.appendChild(thead);
thead.appendChild(TR1);
win.appendChild(mainta);
doropT.appendChild(shybetu);
shybetu.appendChild(OP1);
shybetu.appendChild(OP2)
TR1.appendChild(doropT);

var tdBT1 = document.createElement(“td”);
var kyanBT = document.createElement(“button”);
kyanBT.id = “kyanBT”;
kyanBT.innerHTML = “キャンセル”;
kyanBT.addEventListener(“click”,KyanBT);
var tdBT2 = document.createElement(“td”);
var shiBT = document.createElement(“button”);
shiBT.id = “shiBT”;
shiBT.innerHTML = “申請”;
shiBT.addEventListener(“click”,ShiBT);

thead.appendChild(TR2);
TR2.appendChild(tdBT1);
tdBT1.appendChild(kyanBT);
TR2.appendChild(tdBT2);
tdBT2.appendChild(shiBT);

//キャンセルボタン
function KyanBT(){
win.style.display = “none”;
tasukukigen.value = “”;
kanURL.value = “”;
naiyou.value = “”;
// file.value = “”;
}
//申請ボタン
function ShiBT(){
body = {
“app”:”アプリID”,
“record”:[{
“タスク種別”:{
“value”:shybetu.value
}
}]
}
kintone.api(kintone.api.url(‘/k/v1/record’, true), ‘POST’, body, function(re) {
// success
console.log(re);
}, function(error) {
// error
console.log(error);
})
alert(“タスクを作成しました”);
win.style.display = “none”;
tasukukigen.value = “”;
kanURL.value = “”;
naiyou.value = “”;
}
//タスク申請ボタン
function TasukuBT(){
win.style.display = “block”;
}
naiyou.addEventListener(‘keypress’, function(e){
if(e.key !== ‘Enter’) return;
var event = document.createEvent(‘HTMLEvents’);
event.initEvent(‘click’, true, true);
shiBT.dispatchEvent(event);
});

},1000);
});
return event;
})();

 

上記では、ドロップダウンのみですが、実際は日にちなどの必要なフィールドに対応したものにします。

この状態でも、レコードの追加は機能しているのですが、追加されたレコードのフィールドが記入されていません。

形式が違うのかなと、bodyの中身を確認してみたり、JSONエンコードしてみたりしたのですが上手くいきません。

どなたか、ご教授いただけると幸いでございます。

 

ちなみにOSは、ウィンドウズ7です。

 

鶴見さん

こんにちは。ひよこです。

body に指定する record は、配列じゃなくてオブジェクトだと思います。

https://developer.cybozu.io/hc/ja/articles/202166160#step1

body = {
"app":”アプリID”,
"record":[{
"タスク種別":{
"value":shybetu.value
}
}]
}

ではなく、

var body = {
"app":”アプリID”,
"record":{
"タスク種別":{
"value":shybetu.value
}
}
}

で追加できないでしょうか?

ひよこさん、ご解答ありがとうございます。

自分もここが違うんだろうなと思っていたんですが、

オブジェクトにするとエラーになって、APIが走らなくなります。

以下が、エラー内容です。

code:“CB_IJ01”

   message:“不正なJSON文字列です。”

配列のままだと、エラーにはならず、レコードの追加自体はされます。

ただ、中身が反映されません。

 

似たような方法で、ポータルを開いた時にログインユーザーをユーザー選択に登録したり、

今日の日付を日付フィールドに移したりはできてるので、データの整形の問題かとも思ったのですが。

普通のテキストも反映されません。

すみません。

やっぱり、整形の問題でした。

フィールド形式を勘違いしているところがありました。

自己解決しました。お手数おかけしました。