上記URLにきさいされているテーブル操作ですが、レコード追加or編集画面で他のレコードのテーブル情報を取得し、編集中のレコードのテーブルを動的に操作することは可能でしょうか?
吉岡さん
はじめまして。
以前回答があったような気がするのですが、回答がない状態となっているため
回答してみます。
他のレコード情報を取得し、テーブルへ追加することは可能です。
1.REST API (GET)を用いて、対象のレコード情報を取得する。
2.取得情報を、テーブルの形式に成型しする
3.テーブルに格納し、return を返す。
簡易に記載をしてますが、上記にてテーブルへのデータ格納ができます。
また、テーブルの特定の項目が変更された際に、値を再取得したい
場合などには、以下のイベントを用いて、上記の処理を行うことで、
動的な変更が可能と考えられます。
編集時
app.record.edit.change.<フィールドコード>
追加時
app.record.create.change.<フィールドコード>
上記イベントについては、下記リンク等で案内がされています。
https://cybozudev.zendesk.com/hc/ja/articles/201941984#step3
以上
割り込み失礼いたします><
テーブル操作に関して、行き詰っております。
1のGETで情報を取得するところまでは出来たのですが、
2.取得情報を、テーブルの形式に成型する
3.テーブルに格納し、return を返す。
の部分が出来ません。
他のテーブルに関する質問も参考にしたのですが、いまいち理解できず・・・
サンプルコードなどあれば、大変助かります。。
すみませんが、よろしくお願いします!
田中さん
はじめまして。
取得した値をテーブルの初期値として入れるということでいいのでしょうか?
違った場合指摘してもらえればと思います。
行き詰っていると思われる点に関しては、下記ページにてサンプルコードつきで
掲載がされています。
https://cybozudev.zendesk.com/hc/ja/articles/202796890
ソース内の createValue にてテーブル成型。
kintone.events内で、テーブルの更新処理を行っているものとなってます。
今回の流れとしては、取得した情報を引数として、createValue に引き渡して
そのまま処理することで、取得情報を元にしたテーブルが作成されるかと
思います。
何か不明点等あればコメントください!
サクラエビさん
ご回答ありがとうございます!
説明不足しておりすみません。
もともとあるテーブルに別のフィールドの値をとってきて、
その値を追加したいのです。
更に言うと、その別のフィールドにはcsv読み込みで値を入れて、
一覧画面で更新ボタンを押すとそのフィールドの値がテーブルに追加される
という動きにしたいです・・・。
わかりずらいかもしれませんが、よろしくお願いいたします!
サクラエビさん
返事が遅くなりま申し訳ありません。
ご教示頂いた方法で解決しました。
誠にありがとうございます。
吉岡さん
無事解決したとのことで、お役に立てたようでよかったです。
田中さん
すみません。確認ができてませんでした。
テーブルに入れたいフィールド値は、同一レコード内の
特定のフィールドでしょうか?それとも他のアプリの特定の
フィールド等ですか?
サクラエビさん
お返事ありがとうございます!
テーブルに入れたいフィールド値は、同一レコード内の
特定のフィールドでしょうか?それとも他のアプリの特定の
フィールド等ですか?
⇒同一レコード内の特定のフィールドです。
以前アドバイスいただきましたcreateValueですと、
一覧表示画面では実行出来ませんよね?
一覧表示画面で、テーブル追加の動きを実装したいです・・・。
お手数おかけしますが、よろしくお願いします!
田中さん
前回コメントにreturnで更新をかければと言ってますが、テーブル値の更新は
出来ないものでしたね。。。失念していました。
試行錯誤した結果以下の方法が必要となるようです。
1.ボタン押下時のイベントとして、レコード情報を取得する。
一覧表示イベント内にボタン処理を実装している場合、一覧表示で取得
したレコード値を利用しても問題ないです。
※100件までしか取得されないため注意が必要です。
2.取得した情報を元に、リクエストボディを作成する。
テーブル更新なので、ちょっと形が複雑です。
下記を参考にしてもらえればいいかと思います。
https://cybozudev.zendesk.com/hc/ja/articles/202166330
3.作成した情報を元に、更新処理(PUT)を行う
注意が必要なのが、イベント内で処理を行っている場合、kintoneAPI
を利用した更新を行おうとすると、非同期処理であることから、空更新が
されてしまいます。
その為、XMLHttpRequestを用いて処理を同期処理としました。
上記処理の場合、リクエストボディを動的に作成し、更新をかけているため、
レコードのフィールド値を元に、テーブル行の更新が行えました。
私が作成した際は、レコードが100件ない状態で、確認をしたため、
イベントでレコード値を取得し、2.3の処理をループさせ処理してみました。
わかりずらい感がありますが、参考になりますでしょうか?
サクラエビさん
ご丁寧にありがとうございます!!
私自身作成してみたのですが、現在空更新のデータが出来上がってしまっている状況です。
kintoneAPIを利用した更新を行うと、空更新のデータが出来上がってしまうんですね。
他投稿をみるとXMLHttpRequestはあまり推奨されていないようですが、
kintoneAPIでの方法はないのでしょうか??
お手数おかけいたしますが、よろしくお願いいたします。
田中さん
kintoneAPIで更新をすると空更新がされるというわけではなく、
下記のような処理を行った場合、同期処理でないことから、
空更新が起きてしまいます。
①kintone.events.on{
②kintone.api{
eventsで取得した情報を元に更新処理
}
③なんらかの処理
処理順序をわかりやすくする為に書いています。
}
上記の場合、①、③、②の順で処理がされてしまいます。
①の完了後に②が実行されるため、①で取得した情報を元に
更新処理を行っている場合、取得情報が空となってしまっており、
空更新が発生するものとなっています。
そのため、①で取得した情報を元に更新処理を行う場合には、
同期処理を行う必要があります。
と若干わかりずらい説明となってますが、理解いだけるとありがたいです。
XMLHttpRequestについては、あまり推奨されていませんが、現在の
仕様上使わざるを得ないかと思います。
なお、公開サンプル等でも同期処理として利用がされているので、
問題はないとは思いますが。
XMLHttpRequestを利用せず、kintoneAPIのみで処理を行う方法に
ついては、パッとは思いつかないですね。。。
何かいい方法が思いつきましたら、コメントさせていただきます。
サクラエビさん
その後、XMLHttpRequestを用いて実装することができました!
丁寧なご説明ありがとうございました!!
今後もよろしくお願いいたします。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。