詳細画面にテーブルを配置しています。
テキストボックスとボタンを配置し,
テキストボックスに文字を入力したら,
別アプリの特定フィールドのレコードを更新させたいです。
どのようにしたらいいでしょうか?
コードの抜粋は以下です。不要なコードがあるかもしれません。
以下コードの「★★★」の記述方法がわからないです。
//入力用テキストボックス
var testtxt = document.createElement('input');//ボタン
testtxt.id = 'test_txt';
var tmpC = document.createElement('p');//ボタンが消えたあとの済をtmpBに入れる準備
tmpC.id = 'tmp_c';
cell5.appendChild(tmpC);
cell5.appendChild(testtxt);
//ボタン
var kkBtn = document.createElement('button');
kkBtn.id = 'kk_btn';
kkBtn.innerText = '確定';
var tmpD = document.createElement('p');//ボタンが消えたあとの準備
tmpD.id = 'tmp_d';
cell6.appendChild(tmpD);
(function(){//クリック時の動作
var rnb = Number(record.レコード番号.value);
var kkBtni = kkBtn;
var tmpdi = tmpD;
kkBtn.onclick = function() {
var paramkk ={
"app": (アプリ番号),
"id":rnb,
"record":{
"フィールド名":{"value":★★★}
}
};//pramks
kkBtni.style.display="none";//ボタンを消す
tmpdi.innerText = '確定済';
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramkk);
};
}());
cell6.appendChild(kkBtn);
サブテーブルの値をいれたいということでしたら、下記の記事が参考になるかとおもいます。
https://developer.cybozu.io/hc/ja/articles/360027244231
テーブルへの追加・更新・削除のやり方がのってますのでみてみてください。
こちらのページ見たのですが,
私が作ってるのがサブテーブルではないため,よくわからずでして。。
そのため質問させていただきました。
またお気づきの点ありましたら教えていただけたらうれしいです。
詳細を書くと,以下画像の,□に日付を入力し,「確定」ボタンをクリックしたら
「日付」欄に表示させるようにしたいです。
宜しくお願い致します。
なるほど、ちょっと理解しました。
推測で申し訳ないですが、下記画像の「テーブル」といっているであろう部分は、
「他のアプリからデータを取得し、<table>を使って表示している」という意味ですかね。
そして他のアプリのデータを更新したいという意味だと認識します。
その上で、更新したいフィールドタイプが「日付」だとすると、momentjsなりつかえばいいとおもいます
value: moment().format(‘YYYY-MM-DD’);
参考
https://qiita.com/ushiron/items/14a2cfa05e2132b77558
>村濱一樹 さま
説明が拙くて申し訳ありません。
そうです。別アプリから値をもってきてテーブルを作っています。
日付の書式設定について教えていただきましたが,
どうやらそれ以前の問題みたいです。
自作したテキストボックスの値を,レコードに反映させることができません。
再度の記載となりますが,コードは以下のようにしています。
「★★★」部分の書き方が分からないです。。
testtxt.id = 'test_txt';
var tmpC = document.createElement('p');//ボタンが消えたあとの準備
tmpC.id = 'tmp_c';
cell5.appendChild(tmpC);
cell5.appendChild(testtxt);
cell5.style.width = '15%';
//ボタンを配置
var kkBtn = document.createElement('button');//済ボタン
kkBtn.id = 'kk_btn';
kkBtn.innerText = '確定';
var tmpD = document.createElement('p');//ボタンが消えたあと準備
tmpD.id = 'tmp_d';
cell6.appendChild(tmpD);
(function(){
var rnb = Number(record.レコード番号.value);
var kkBtni = kkBtn;
var tmpdi = tmpD;
var testtxti = testtxt;
//「確定」ボタンクリック後の処理
kkBtn.onclick = function() {
var paramkk ={
"app": 139,
"id":rnb,
"record":{
"日付":{"value":★★★}//テキストボックスの値を日付フィールドに反映→できない
}
};//pramks
kkBtni.style.display="none";//ボタンを消す
tmpdi.innerText = '確定済';//確定済と表示する
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramkk);
};
}());
cell6.appendChild(kkBtn);
またお気づきの点等ありましたら教えてください。
> 自作したテキストボックスの値を,レコードに反映させることができません。
僕はこれを他のアプリのデータをアップデートする、
という意味で捉えていましたがちがうかもしれませんね。
もうちょっと詳細やエラーが起きているならエラー内容などを共有してもらえるとどなたか答えやすいかもしれません。
>村濱一樹 さま
たびたびお返事いただきありがとうございます!
>他のアプリのデータをアップデートする
そうです。また説明が変ですみませんでした。。
上記コード中の「★★★」部分を
“日付”:{“value”:‘2000-01-01’}
等と書いてボタンをクリックすると,「日付」欄が「2000-01-01」となり,無事に動いています。
「2000-01-01」のところを,テキストボックスの値を持ってくるようにしたいです。
またお気づきの点等ありましたらおしえていただきたいです。
よろしくお願いいたします。
たびたびすみません。
セル5とセル6を以下のように記述してみました。
一行目のテキストボックスに日付を手入力して「確定」をクリックすると,一行目の日付が無事更新されます。
しかし,
二行目のテキストボックスに日付を手入力して「確定」をクリックすると,
二行目の日付が空欄になってしまいます。
また,
一行目のテキストボックスに日付を手入力して,二行目の「確定」をクリックすると,
二行目のテキストボックスの日付が更新されます。
「★★★」のあたりが間違っているのだと思うのですが,ご指摘いただけないでしょうか。
よろしくお願いいたします。
//セル5はテキストボックスを配置
var testtxt = document.createElement('input');
testtxt.type = "date";
testtxt.id = 'test_txt';
cell5.appendChild(testtxt);
//セル6にボタンを配置し,クリックしたら「確定済」と表示したうえで,別アプリの日付フィールドを更新する
var kkBtn = document.createElement('button');//済ボタン
kkBtn.id = 'kk_btn';
kkBtn.innerText = '確定';
var tmpD = document.createElement('p');//ボタンが消えたあと準備
tmpD.id = 'tmp_d';
cell6.appendChild(tmpD);
(function(){
var rnb = Number(record.レコード番号.value);
var kkBtni = kkBtn;//ボタン改めてを変数化
var tmpdi = tmpD;//tmpDを改めて変数化
kkBtn.onclick = function() {
var inputmsg = document.getElementById('test_txt').value;★★★
var paramkk ={
"app": 139,
"id":rnb,
"record":{
"日付":{"value":inputmsg★★★}//日付を入れる
}
};//pramks
kkBtni.style.display="none";
tmpdi.innerText = '確定済';
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', paramkk);
};
}());
cell6.appendChild(kkBtn);
var inputmsg = document.getElementById(‘test_txt’).value;
このとり方がおかしいんだと思います。
getElementById() は要素IDから要素を取る方法ですが、要素IDというのは画面内に同じものがあってはいけないというルールがあります。
同じIDがテーブルの各行に使われてるでしょうから、まずそれが不適切だと思います。
たとえば、テーブルごとに違うIDをふる( text_txt_1, test_txt_2… )などすれば、適切な値をとりやすいとおもいます。
>村濱一樹 さま
たびたび教えていただきありがとうございます!
>要素IDというのは画面内に同じものがあってはいけないというルール
これ全然知らなかったです。。
参考にして
testtxt.id = 'test_txt' + [レコード番号の変数] ;
として行ごとにユニークなid名をつけるようにし,
var inputmsg = document.getElementById('test_txt'+ [レコード番号の変数]).value;
としたら,うまく行ごとの値を拾ってきてくれるようになりました!!
長くかかったので本当にうれしいです!
何度も教えていただきありがとうございました!!
一意である必要があるため、前回のコードでgetElementByIDでとるとき、一番最初にヒットしたものが取れてしまったいたのだとおもいます(テーブルの1行目)
逆に何度もつかえるものとして、クラスというものもありますので用途に応じてid/classを使い分ければいいかとおもいます。
参考: https://jill-tone.com/htmlcss_id_class/