0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Proj #001 キャンバスアプリで支払申請のフォームを作成するゾ~第3回 Patch関数でアイテムを新規登録しよう~

Last updated at Posted at 2024-11-22

さていよいよキャンバスアプリからリストに新規データを登録してみようと思います。

まずはフォームを新規登録モードにします。

ツリービューからFormを選択して、プロパティのDefaultModeを変更します。

image.png

image.png

初期値はEditモードになっているので、これをNewに変更します。

FormMode.New

これで新規登録モードになりました。

続いて「申請ボタン」を追加します。

挿入 から ボタン を選択します。

image.png

フォーム上にぶっきらぼうにボタンが配置されました。
当然、このままでは動きません。
動いてもらっても困ります。

image.png

ボタンをテキトーな位置に移動したら、Patch関数を入力していきます。
数式のデフォルトは false になっています。

image.png

Patch関数の記述の方法は以前のTipsにも書いてあるので、そちらも併せてご覧ください。

Patch関数は今回のプロジェクトにおいての最重要関数なので、ゆっくり解説していきます。

試しに1項目登録するようなPatch関数を記述してみました。

Patch(
    'hogehoge_datasource',
    Defaults('hogehoge_datasource'),
    {
        SF番号:DataCardValue3
    }
)

DataCardValue3ってなんやねん問題が発生しましたので、
DataCardについて解説しておきます。

データソースから配置したフィールドには DataCard という名前が割り当てられています。

image.png

DataCardには「StarVisible」「ErrorMessage」「DataCardValue」「DataCardKey」
という4つのプロパティが最初からセットされています。

  • StarVisible:必須項目の*を表示するプロパティ
  • ErrorMessage:エラーメッセージを表示するプロパティ
  • DataCardValue:DataCardの値を表示するプロパティ
  • DataCardKey:データソースのフィールド名を表示するプロパティ

これらのプロパティはデータソースであるリストと連動しているので、
よくわからないからと言って無闇に削除しないようにしましょう。
(私はそれで泣きました)

入力用のフォームを作成した際に必ずついて回る仕様として、
必須項目のチェックがありますが、
リストでフィールドに設定した必須の設定をフォーム上で利用する際に、
これらのプロパティを使う事になります。
※Valid関数については、次回以降のQiitaで扱います。

とはいえ配置したフィールドの名称がDataCardのままではわかりづらいので、
わかりやすい名前に変更しましょう。
(私はそれで泣きました)

カードのプロパティを変更する場合には、プロパティのロックを解除します。

image.png

カードの名称は以下の部分で変更します。
わかりづらいですね。

image.png

下のDataFieldやDefault、DisplayNameを変更しないように注意しましょう。
(私はそれで泣きました)

今回はこのDataCardを「dc_sf_number」と変更しました。

image.png

頭の dc はDataCardである事を示しています。
sf_numberはSalesforceの管理番号、という意味です。

なぜdc_とつけたかと言うと、フォーム上で扱うフィールドはDataCardのみではなく、
別のリストをデータソースで使う場合や、テキスト入力フィールドなどと区別しやすくするためです。

以下は私の作成した設計書の一部です。
オブジェクトタイプに、DataCardやテキストラベルといった内容が記載してあります。

image.png

オブジェクト名を見ると、
DataCardの中でも「dc_」「mst_」といった違いがあり、
テキストラベルの中でも「txt_」や「cf_」といった違いがあるのが確認できるかと思います。

このようにプレフィックスをわけているのは、

  • データソースから配置したフィールド
  • LookUp関数を使って表示させるフィールド
  • 別のデータソースから参照するフィールド
  • 独立したテキスト入力フィールド

を区別するためです。

フォームの上ではすべて同じテキストフィールドですが、
どのように値がセットされるかで制御や後続処理での扱いが異なるので、
細かい部分ですがこのあたりも意識してもらうとよりよい開発が出来るのではないかと思います。

こんな感じで、DataCardと、中の4つのプロパティを変更しています。
(そこはかとなく残念なネーミングセンス)

image.png

それに伴いPatch関数の内容も変更しています。

Patch(
    'hogehoge_datasource',
    Defaults('hogehoge_datasource'),
    {
        SF番号:dc_sf_numberValue
    }
)

さて、では実際にフィールドに値を入れてアイテムを登録してみましょう。
アプリを実行するには再生ボタンをクリックします。

image.png

以下のように数値を入力して、ボタンをクリックします。

image.png

おお勇者よ、怒られてしまうとはなにごとじゃ!

はい、エラーのようです。泣きます。ごめんなさい。

image.png

以下のように修正しました。

dc_sf_numberに.Textを付与しないといけなかったようです。
さらに、SF番号フィールドは数値型のため、
Value関数を使用して文字列を数値型に変換しています。

dc_sf_numberValueのTextを数値化してリストのSF番号というフィールドにセットして
アイテムを新規登録する、というようなロジックになります。

Patch(
    'hogehoge_datasource',
    Defaults('hogehoge_datasource'),
    {
        SF番号:Value(dc_sf_numberValue.Text)
    }
)

今度は無事にアイテムがリストに登録されました。

image.png

次回は別のリストにあるアイテムを、フォーム上でマスタとして参照して
複数のフィールドを表示させる「LookUp関数」について記述しようと思います。

それではまた。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?