計算フィールドは問題なく一括更新できるようになったのですが、例えば、フォームを追加し、初期値設定をした場合、追加前のレコードの値を初期値になるよう一括入力する方法はあるのでしょうか。
NSさん
お世話になっております。
> 計算フィールドは問題なく一括更新できるようになった
こちらは、REST APIで更新しているということでしょうか?
計算フィールドについては、空更新で自動的に計算が行われているのかと思います。
その他のフィールドについては、明示的に値を指定すれば良いかと思います。
https://developer.cybozu.io/hc/ja/articles/201941784#step2
https://developer.cybozu.io/hc/ja/articles/204537310
初期値の値を動的に取得したいということであれば、フォームの設定の取得APIを用いれば良いかと思います。
https://developer.cybozu.io/hc/ja/articles/204783170
江田様
返信が遅くなり、申し訳ございません。
ご丁寧にありがとうございます。
REST APIで更新しています。
空更新で探して見つけたコードを内容がわからないまま、
コピペして利用しているので、具体的に何をしているのか、
ほぼわからないですが・・・
初期値の反映は「properties.(フィールドコード).defaultValue」を、
値に指定すれば良いのですね。ありがとうございます。
この場合、新たに追加された項目だけ、初期値を入力するということは、
可能なのでしょうか。
例:
項目A・・・初期値入力済み
項目B・・・初期値ではない値入力済み
この状態のデータが200件あったとして、
項目A・・・初期値入力済み
項目B・・・初期値ではない値入力済み
項目C・・・新規追加した項目で、全データの一括して初期値を反映する。
このようなことを行うのですが、
項目の増減がたびたび起こるので、毎回コードを編集せず、
追加された項目のフィールドコードを自動的に取得して、
初期値を反映するというのは、可能でしょうか。
質問が重なり、申し訳ございません。
お手すきであればでかまいませんので、教えていただけると嬉しいです。
NSさん
お世話になっております。
propertiesの各プロパティについて処理を行うようなコードにしておけば、可能かと思います。
Object.values()などを用いてpropertiesを配列化して、ループ処理させるといった方法があるかと思います。
江田様
ありがとうございます。
私の知識が追いつかないのですが、流れとしては、
①新規追加された項目だけを見つける。
②①の項目が空白だった場合、初期値を指定。
ということでしょうか。
NSさん
お世話になっております。
認識がずれていました。申し訳ございません。
①はなく
②’空白のフィールドはすべて、初期値を指定。
という認識でした。
すべての空白のフィールドに初期値が入力されるのが困るという場合は、仰る通り過去のフォーム設定と比較する必要がありますね。
フォームの設定の取得APIでは過去のフォーム設定は取得できなそうなので、工夫が必要ですね。
初期値の入力処理をする際に、その時点で存在しているフィールドコードを保存しておく(保存先は、別に用意したアプリなど)
次に初期値の入力処理をする際は、保存したフィールドコードと現在のフォーム設定を比較する
というのはいかがでしょうか?
江田様
ご丁寧にありがとうございます!
初期値を外して、空白にするような使い方をするフィールドが無い限り、
元々初期値設定がない(初期値設定無し=空白が初期値だと思っています)場合、
全ての空白に初期値を設定しても問題ない気がするので、
空白のフィールドはすべて、初期値を指定というのでも大丈夫かもしれないです。
私は知識が追いつかず、まだプログラムをどうやってかけば良いかわかりませんが、
以下のような流れでしょうか。
①全てのフィールドから、空白のフィールドを探し、
フィールドコードを配列に格納する。
②配列に格納したフィールドコードを1つずつ取り出し、
初期値を指定する。(初期値の設定が無い場合、空白のまま)
恐縮ですが、お手を煩わせない範囲で、
参考になるプログラムを教えていただけると嬉しいです。
NSさん
お世話なっております。
NSさんの仰る流れで良いかと思います。
(以前のコメントで私が申し上げたpropertiesでループというのは忘れて頂ければと思います。)
「フィールドコードを配列に格納する->配列に格納したフィールドコードを1つずつ取り出し初期値を指定する」については、配列に格納しないで、そのまま初期値を代入をする方がシンプルかなと思いました。
細かく言うのであれば、下記のようになるかと思います。
1 全レコードとフォームの設定を取得する
2.1 全レコードについてループさせる
2.2 2.1のループの中で各レコードのフィールドについてループさせる(Object.values()などを使うと良さそう)
2.3 2.2のループの中でvalueの空白チェックを行い、空白であればフォームの設定を用いて初期値を代入する
3 レコードの更新をする
申し訳ございませんが、今回の実装に近いような記事などは見つけられませんでした。
現状のコードや躓いている箇所を教えていただければ、なにかお力になれるかもしれません。
江田様
返信が遅くなり、申し訳ございません。
ご丁寧にいありがとうございます!
イメージは掴めました!
あとは具体的なコードを勉強しながら組み立ててみます。
改めて質問させていただくこともあるかと思いますが、
その際はよろしくお願いいたします。