新規投稿
フォローする

テーブル操作について

https://cybozudev.zendesk.com/hc/ja/articles/200752984-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E6%9B%B4%E6%96%B0%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AE%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF

上記URLにきさいされているテーブル操作ですが、レコード追加or編集画面で他のレコードのテーブル情報を取得し、編集中のレコードのテーブルを動的に操作することは可能でしょうか?

0

11件のコメント

Avatar
サクラエビ

吉岡さん

はじめまして。
以前回答があったような気がするのですが、回答がない状態となっているため
回答してみます。

他のレコード情報を取得し、テーブルへ追加することは可能です。

1.REST API (GET)を用いて、対象のレコード情報を取得する。
2.取得情報を、テーブルの形式に成型しする
3.テーブルに格納し、return を返す。

簡易に記載をしてますが、上記にてテーブルへのデータ格納ができます。

また、テーブルの特定の項目が変更された際に、値を再取得したい
場合などには、以下のイベントを用いて、上記の処理を行うことで、
動的な変更が可能と考えられます。

編集時
app.record.edit.change.<フィールドコード>

追加時
app.record.create.change.<フィールドコード>

上記イベントについては、下記リンク等で案内がされています。
https://cybozudev.zendesk.com/hc/ja/articles/201941984#step3

以上

0
Avatar
田中

割り込み失礼いたします><
テーブル操作に関して、行き詰っております。
1のGETで情報を取得するところまでは出来たのですが、
2.取得情報を、テーブルの形式に成型する
3.テーブルに格納し、return を返す。
の部分が出来ません。
他のテーブルに関する質問も参考にしたのですが、いまいち理解できず・・・
サンプルコードなどあれば、大変助かります。。
すみませんが、よろしくお願いします!

0
Avatar
サクラエビ

田中さん

はじめまして。
取得した値をテーブルの初期値として入れるということでいいのでしょうか?
違った場合指摘してもらえればと思います。

行き詰っていると思われる点に関しては、下記ページにてサンプルコードつきで
掲載がされています。
https://cybozudev.zendesk.com/hc/ja/articles/202796890

ソース内の createValue にてテーブル成型。
kintone.events内で、テーブルの更新処理を行っているものとなってます。

今回の流れとしては、取得した情報を引数として、createValue に引き渡して
そのまま処理することで、取得情報を元にしたテーブルが作成されるかと
思います。

何か不明点等あればコメントください!

0
Avatar
田中

サクラエビさん
ご回答ありがとうございます!
説明不足しておりすみません。
もともとあるテーブルに別のフィールドの値をとってきて、
その値を追加したいのです。
更に言うと、その別のフィールドにはcsv読み込みで値を入れて、
一覧画面で更新ボタンを押すとそのフィールドの値がテーブルに追加される
という動きにしたいです・・・。
わかりずらいかもしれませんが、よろしくお願いいたします!

0
Avatar
吉岡 三四郎

サクラエビさん

返事が遅くなりま申し訳ありません。

ご教示頂いた方法で解決しました。

誠にありがとうございます。

0
Avatar
サクラエビ

吉岡さん
無事解決したとのことで、お役に立てたようでよかったです。

田中さん
すみません。確認ができてませんでした。
テーブルに入れたいフィールド値は、同一レコード内の
特定のフィールドでしょうか?それとも他のアプリの特定の
フィールド等ですか?

0
Avatar
田中

サクラエビさん
お返事ありがとうございます!

テーブルに入れたいフィールド値は、同一レコード内の
特定のフィールドでしょうか?それとも他のアプリの特定の
フィールド等ですか?
⇒同一レコード内の特定のフィールドです。

以前アドバイスいただきましたcreateValueですと、
一覧表示画面では実行出来ませんよね?
一覧表示画面で、テーブル追加の動きを実装したいです・・・。
お手数おかけしますが、よろしくお願いします!

0
Avatar
サクラエビ

田中さん

前回コメントにreturnで更新をかければと言ってますが、テーブル値の更新は
出来ないものでしたね。。。失念していました。

試行錯誤した結果以下の方法が必要となるようです。

1.ボタン押下時のイベントとして、レコード情報を取得する。
 一覧表示イベント内にボタン処理を実装している場合、一覧表示で取得
 したレコード値を利用しても問題ないです。
 ※100件までしか取得されないため注意が必要です。

2.取得した情報を元に、リクエストボディを作成する。
 テーブル更新なので、ちょっと形が複雑です。
 下記を参考にしてもらえればいいかと思います。
 https://cybozudev.zendesk.com/hc/ja/articles/202166330

3.作成した情報を元に、更新処理(PUT)を行う
  注意が必要なのが、イベント内で処理を行っている場合、kintoneAPI
  を利用した更新を行おうとすると、非同期処理であることから、空更新が
  されてしまいます。
  その為、XMLHttpRequestを用いて処理を同期処理としました。

上記処理の場合、リクエストボディを動的に作成し、更新をかけているため、
レコードのフィールド値を元に、テーブル行の更新が行えました。
私が作成した際は、レコードが100件ない状態で、確認をしたため、
イベントでレコード値を取得し、2.3の処理をループさせ処理してみました。

わかりずらい感がありますが、参考になりますでしょうか?

0
Avatar
田中

サクラエビさん

ご丁寧にありがとうございます!!
私自身作成してみたのですが、現在空更新のデータが出来上がってしまっている状況です。
kintoneAPIを利用した更新を行うと、空更新のデータが出来上がってしまうんですね。
他投稿をみるとXMLHttpRequestはあまり推奨されていないようですが、
kintoneAPIでの方法はないのでしょうか??
お手数おかけいたしますが、よろしくお願いいたします。

0
Avatar
サクラエビ

田中さん

kintoneAPIで更新をすると空更新がされるというわけではなく、
下記のような処理を行った場合、同期処理でないことから、
空更新が起きてしまいます。

①kintone.events.on{
②kintone.api{
eventsで取得した情報を元に更新処理
}
 ③なんらかの処理
  処理順序をわかりやすくする為に書いています。
}

上記の場合、①、③、②の順で処理がされてしまいます。
①の完了後に②が実行されるため、①で取得した情報を元に
更新処理を行っている場合、取得情報が空となってしまっており、
空更新が発生するものとなっています。
そのため、①で取得した情報を元に更新処理を行う場合には、
同期処理を行う必要があります。

と若干わかりずらい説明となってますが、理解いだけるとありがたいです。

XMLHttpRequestについては、あまり推奨されていませんが、現在の
仕様上使わざるを得ないかと思います。
なお、公開サンプル等でも同期処理として利用がされているので、
問題はないとは思いますが。

XMLHttpRequestを利用せず、kintoneAPIのみで処理を行う方法に
ついては、パッとは思いつかないですね。。。
何かいい方法が思いつきましたら、コメントさせていただきます。

0
Avatar
田中

サクラエビさん
その後、XMLHttpRequestを用いて実装することができました!
丁寧なご説明ありがとうございました!!
今後もよろしくお願いいたします。

0
サインインしてコメントを残してください。