FormFlowのカスタマイズ

FormFlowのカスタマイズ

FormFlowがダイアログに組み込めたところで、本格的に使えるようにカスタマイズしてみましょう。まずは選択項目が一つでは物足りないので、追加します。

リスト8:選択項目を追加

public enum CurryOptions { ビーフ, チキン, ポーク, ベジタブル };
public enum RiceOptions { ライス, バターライス, ナン };
public enum SizeOptions { 大, 中, 小 };
public enum ToppingOptions { トンカツ, コーン, ゆで卵, チーズ };

[Serializable]
public class CurryFormQuery
{
    public CurryOptions? Curry;
    public RiceOptions? Rice;
    public SizeOptions? Size;
    public ToppingOptions? Topping;
}

今回は、上記のリストのような選択項目を追加してみました。エミュレーターで確認してみましょう。

追加された選択項目を確認

追加された選択項目を確認

だんだんとカレーの注文らしくなってきました。

次にカレーダイアログ終了後、Rootダイアログに戻る際のメッセージ(現状では「カレーはビーフですね」)も修正しておきましょう。RootDialog.csを開き、CurryResumeAfterDialogメソッドを修正します。

リスト9:ダイアログに戻る際のメッセージを修正

private async Task CurryResumeAfterDialog(IDialogContext context, IAwaitable<CurryFormQuery> result)
{
    var curry = await result;

    await context.PostAsync($@"カレーは {curry.Curry.ToString()} ですね。

ライスは {curry.Rice.ToString()} ですね。

サイズは {curry.Size.ToString()} ですね。

トッピングは {curry.Topping.ToString()} ですね。

");
    MenuMessage(context);
}

CurryFormQuery型で受け渡された戻り値には、各選択項目が含まれています。それぞれヒア文字列を使って、文字列型で表示しています。

ダイアログに戻る際に選択結果が受け渡されている

ダイアログに戻る際に選択結果が受け渡されている

上記の実行結果で、カレーダイアログでの選択結果がきちんと受け渡されていることを確認できました。

今の設定では、選択項目の表示が「rice」「size」「topping」のように英語表記のままになっています。今度は、こちらをカスタマイズしてみましょう。

現状では選択項目が英語表記のままになっている

現状では選択項目が英語表記のままになっている

リスト10:選択項目の表示を日本語に

[Serializable]
public class CurryFormQuery
{
    [Describe("カレー")]
    public CurryOptions? Curry;
    [Describe("ライス")]
    public RiceOptions? Rice;
    [Describe("サイズ")]
    public SizeOptions? Size;
    [Describe("トッピング")]
    public ToppingOptions? Topping;
}

CurryFormQueryクラスで定義している属性に「Describe」で説明を追加することができます。それぞれに分かりやすく日本語名を追加しました。

選択項目の表示が日本語になっている

選択項目の表示が日本語になっている

選択項目の表示が分かりやすくなりました。

複数選択を可能にする

選択項目の中には、複数の項目を選択できるようにしたいものもあります。その場合の設定方法を紹介します。例として、トッピングの種類を増やして、複数選択できるようにしてみましょう。ポイントは、「public List<ToppingOptions> Topping」の記述で、こちらはList型の属性を定義しています。

リスト11:トッピングを複数選べるようにする

public enum CurryOptions { ビーフ, チキン, ポーク, ベジタブル };
public enum RiceOptions { ライス, バターライス, ナン };
public enum SizeOptions { 大, 中, 小 };
public enum ToppingOptions { トンカツ, コーン, ゆで卵, チーズ, トマト, 辛さ増し, ハラペーニョ };

[Serializable]
public class CurryFormQuery
{
    [Describe("カレー")]
    public CurryOptions? Curry;
    [Describe("ライス")]
    public RiceOptions? Rice;
    [Describe("サイズ")]
    public SizeOptions? Size;
    [Describe("トッピング")]
    public List<ToppingOptions> Topping;
}

この記述だけで複数選択が可能となります。実行してみましょう。

トッピングは複数選べるようになった

トッピングは複数選べるようになった

トッピングの選択がボタン形式ではなく、数字入力となっています。半角スペースで区切って数字を入力すれば、複数項目の選択が可能です。

上記の変更に合わせて、カレーダイアログを終了してRootダイアログに戻る際のメッセージも修正しておきましょう。RootDialog.csを開きCurryResumeAfterDialogメソッドを修正します。

for文でList型のcurry.Topping.Countから選択されたトッピングを取り出します。

リスト12:ダイアログに戻る際のメッセージも修正

private async Task CurryResumeAfterDialog(IDialogContext context, IAwaitable<CurryFormQuery> result)
{
    var curry = await result;
    var topping = "";

    for (int i = 0; i < curry.Topping.Count; i++)
    {
        topping += " " + curry.Topping[i];
    }

    await context.PostAsync($@"カレーは {curry.Curry.ToString()} ですね。

ライスは {curry.Rice.ToString()} ですね。

サイズは {curry.Size.ToString()} ですね。

トッピングは {topping} ですね。

");
    MenuMessage(context);
}
ダイアログに戻る際に、複数選択したトッピングが受け渡されている

ダイアログに戻る際に、複数選択したトッピングが受け渡されている

Rootダイアログに戻る際に、複数選択の結果が取得できました。

以上紹介してきた内容以外にも、FormFlowには数多くのカスタマイズ項目が用意されています。テンプレート的な型にはまった機能とはいえ、ご希望のスタイルにかなり近づけることが可能です。開発効率アップには欠かせないFormFlow、ぜひお試しださい。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30