追加(Insert)
Collect
Collect (データソース, レコード)
Collect(
商品マスタ
, {ID: "100", 商品ID:"K200", 商品名:"さわやかオレンジ", 単価:"500"}
);
更新(Update)
Update
Update (データソース, 更新対象レコード, 更新列)
Update(
商品マスタ
, First(Filter(商品マスタ, 商品名="鮭おにぎり"))
, {ID: "3", 単価: 200}
);
いまいち、使い勝手が分からない関数。
- 第1引数と、第2引数の対象取得でデータソース名を2回記述しなければならない。
- Filter関数の頭にFirstを付けないと動かないっぽい?(レコードとコレクションの違いを理解していないため、なぜエラーになるのか現時点で分からず。)
- レコード全体を更新するため、更新列で省略された列は全て空白で更新されてしまう。
- 更新列にIDを指定しなければいけない。更新対象の列番号が動的に変わるのであれば、どのようにIDを指定すればよいのか正直分からない。
UpdateIf
Updatelf (データソース, 条件, 更新列)
Updatelf(
商品マスタ
, 商品名="鮭おにぎり")
, {単価: 200}
);
SQLのupdate構文そのままであり、直感的であり、理解しやすい。
Update関数で上げた4つのデメリットはupdatelf関数にはない。
局所的な更新であればupdatelf関数一択である。
Patch
Patch (データソース, 初期レコード, 更新列)
更新の場合
第2引数に更新対象のレコードを設定する。
Patch(
期末テストデータ
, Lookup(期末テストデータ, 名前="ソラ ハレワタール")
, {
名前: "ソラ ハレワタール"
, 数学: "50"
, 物理: "75"
, 英語: "100"
}
)
新規登録の場合
第2引数でDefaults(データソース)とすることで、規定値で初期化された新しいレコードが作成される。
第3引数で更新したい情報をキー名と値のMap形式で渡す。
Patch(
期末テストデータ
, Defaults(期末テストデータ)
, {
名前: "ソラ ハレワタール"
, 数学: "50"
, 物理: "75"
, 英語: "100"
}
)
第3引数のMapは分割することもできる。
Patch(
期末テストデータ
, Defaults(期末テストデータ)
, {
名前: "虹ヶ丘 ましろ"
, 数学: "40"
}
, {
物理: "30"
, 英語: "80"
}
)
複数のMapに同じキーがあった場合、後に記述したMapの値で更新される
Patch(
期末テストデータ
, Default(期末テストデータ)
, {
名前: "虹ヶ丘 ましろ"
, 数学: ""
, 物理: ""
, 英語: "50"
}
, {
名前: ""
, 数学: "40"
, 物理: "30"
, 英語: ""
}
)
Formとの組み合わせ(Form.Updates)
Patch(
期末テストデータ
, Default(期末テストデータ)
, {
Form1_1.Updates
, Form1_2.Updates
, Form1_3.Updates
, Form1_4.Updates
}
)
Formで登録を行う際、「SubmitForm()
」でなく、「Patch()
」で代替することができる。
「名前」「数学」「英語」「物理」が4画面・4フォームに分割されている場合でも上記のように「Form.Updates
」を並べることで、
入力されたすべての情報を、項目名を意識することなく設定することができる。
・公式リファレンス Patch Defaults Form.Updates
参照(Select)
LookUp
LookUp (データソース, 条件式)
- 条件に合致するレコードを1件だけ取得する。
- 条件に合致するレコードがない場合、何も返却しない。
- 第3引数で取得したレコードを加工して返却することができる (javascriptでいう.map())そうだが、どうにもエラーが解消できず、動作確認できず。
LookUp(
商品マスタ
, 商品ID = "T001"
)
Search
Search (データソース, 検索文字列, 対象列)
- 対象列に検索文字列が含まれるレコードを全て取得する。
- 検索文字列が空白「””」である場合はテーブルのレコードを全て取得する。
- 条件に合致するレコードがない場合、何も返却しない。
- 文字列の検索「大文字/小文字を区別しない」「部分検索をする」ため、完全一致であるかの判定はできない。
// 全ての「おにぎり」を取得
Search(商品マスタ, "おにぎり", 商品名)
// 大文字の「BLTサンドイッチ」も取得できる
Search(商品マスタ, "blt", 商品名)
// 全レコードを取得
Search(商品マスタ ,"", 商品名)
Filter
Filter (データソース, 条件1, 条件2…)
- 全ての条件(1 ~ N)を満たす(AND条件)が含まれるレコードを全て取得する。
- 条件に合致するレコードがない場合、何も返却しない。
// 単一条件
Filter(商品マスタ, Int(単価) > 150)
// 複数条件
Filter(商品マスタ, Int(単価) > 150, "おにぎり" in 商品名)
まとめ
簡単なアプリであれば、データソース追加は「Collect」、更新は「Updatelf」、参照は「Filter」の固定でよいと思われる。
削除の関数や難解そうなPatch関数はまだ手付かずなので、理解出来次第、記事を更新する予定。