サブフォームの初期化タイミング

コメント

9件のコメント

  • Avatar
    鈴木@Unifinity

    渡辺様

    ご質問頂きありがとうございます。

    お手数ではございますが、以下についてお教え下さいますでしょうか。
    ・画面Bは何らかのテーブルとの連携を行っている画面でしょうか。
    ・画面Bのコンボボックスは何らかのフィールドとの連携が設定されておりますでしょうか。

    また、実現したい内容は以下のような内容とお見受けします。
    ・画面Aで社員番号などのキーとなる値を入力し、ボタンを押す
    ・画面Aのサブフォームに画面Bを設定し、入力されたキー値と関連するデータを画面に表示する。

    上記のような処理であれば、画面Aのボタン押下で発生する処理内で「データセット/フィルター」「データセット/読込」をご実行頂くことでも実現可能となります。

    以下に実装例を記載致しますので、併せてご確認頂けますと幸いです。
    また、わかりにくい箇所などございましたらご指摘を頂けますと幸いです。

    実装例

    ●画面A
    ・キーを入力するためのテキストを配置
    ・画面Bを入力するためのサブフォームを配置
    ・後述する「検索処理」を実行するためのボタンを配置

    ●画面B

    ・ユーザ一覧(番号と名前)を格納するテーブルとの連携を設定

    ・コンボAを配置し、フォームと関連付けたテーブルのいずれかの列と関連付け

    ●処理「検索処理」

    画面Aのサブフォーム遷移先に「画面B」を指定
    ・画面Aのテキストから【検索値】を取得
    ・画面Bに表示するデータを【検索値】フィルターでフィルターする
    ・画面Bに表示するデータを明示的に読み込む

    0
    コメントアクション パーマリンク
  • Avatar
    鈴木@Unifinity

    システムの添付ファイル制限により、検索処理の画像を記載出来なかったため追記致します。

    ●処理「検索処理」

    画面Aのサブフォーム遷移先に「画面B」を指定
    ・画面Aのテキストから【検索値】を取得
    ・画面Bに表示するデータを【検索値】フィルターでフィルターする
    ・画面Bに表示するデータを明示的に読み込む

    0
    コメントアクション パーマリンク
  • Avatar
    渡辺

    回答ありがとうございます。
    うまく表現できず、若干目的がずれて伝わってしまったようなので、構成を添付します。
    またA,Bなどではなく伝わりやすいように画面に具体的な名前を付けました。(画面A:添付画像でメイン画面/画面B:添付画像でユーザ設定画面)

    また、実現したい内容は以下のような内容とお見受けします。
    ・画面Aで社員番号などのキーとなる値を入力し、ボタンを押す
    ・画面Aのサブフォームに画面Bを設定し、入力されたキー値と関連するデータを画面に表示する。

    2つ目でやりたいことが若干異なります。
    入力されたキー(社員番号)の関連情報を表示したいのではなく、入力されたキー(社員番号)の社員をコンボボックスで選択した状態にしたいです。

    お手数ではございますが、以下についてお教え下さいますでしょうか。
    ・画面Bは何らかのテーブルとの連携を行っている画面でしょうか。
    ・画面Bのコンボボックスは何らかのフィールドとの連携が設定されておりますでしょうか。

    ・ユーザ設定画面では、テーブルと連携させています。(社員テーブル)
    ・コンボボックスは内容とリストそれぞれ連携させています。
     内容:フォーム、社員番号
     リスト:テーブル、社員テーブル、社員番号、表示名

    0
    コメントアクション パーマリンク
  • Avatar
    鈴木@Unifinity

    渡辺様

    構成についてお教え頂きありがとうございます。

    サブフォームの初期化及び画面構成について回答致します
    長文となり恐れ入りますが、ご確認下さい。
    また、ご不明点などございましたらご指摘を頂けますと幸いです。

    ●サブフォームの初期化について
    お問い合わせ頂いた初回・2回目の挙動については、アプリの内部状態の差異により以下のように動作しているよう見受けられます。

    ●前提条件
    ・親画面に子画面未設定のサブフォーム(以下、SubA)を配置する。
    ・子画面として表示する画面Bを作成し、何らかのDBと連携する。

    ●初回のボタン押下
    (1)親画面のボタン押下で以下の処理を実行
     ①「コントロール/サブフォーム遷移先」でSubAに画面Bをセット
     →ここでは画面Bの実体化・初期化は行われない。
      画面Bの実体化・初期化は処理実行キューに追加され、ボタン押下処理終了後に実行される。
     ②「コントロール/内容セット」画面BのDBの列と関連付けられているコントロールの値を更新
     →値のセット先が実体化されていないため、本処理で設定した値は画面Bに反映されない。
    (2)ボタン押下処理の終了後、(1)-①で発生した画面Bの実体化・初期化が実行される。
     →初期化処理の結果、画面Bと連携するDBの値を画面に表示する。

    ●2回目移行のボタン操作
     ①「コントロール/サブフォーム遷移先」でSubAに画面Bをセット
     ②「コントロール/内容セット」画面BのDBの列と関連付けられているコントロールの値を更新
     →「●初回のボタン押下」の際に画面Bの実体化が完了しているため、セットした値が画面Bに反映される。

    サブフォームの遷移先に利用する画面の初期化というのはいつやることが正しい実装なのでしょうか。

    サブフォームとして表示するコントロールが実体化された状態で初期化を行っていただきますようお願い致します。
    例えば、画面設計からサブフォームの「オブジェクト>動作設定>明細」に画面Bをご設定頂ければ、
    初回のボタン押下も画面Bが実体化された状態で実行され、値のセット処理が期待通りに動作するようになるかと存じます。

    ●お送りいただいた構成について
    「ユーザーリストコンボ」がユーザーの選択を目的とするコントロールの場合、
    「ユーザーリストコンボ」の「データ>内容」の設定は不要かと存じます。

    「ユーザーリストコンボ」の「データ>内容」に値が設定されている場合、以下画像のようにユーザ設定画面で表示している行の値が書き換えられてしまいます。

    「ユーザーリストコンボ」の選択値に応じてユーザ設定画面で表示する行を切り替えたい場合には、
    以下のようにご実装頂くことで実現可能かと存じます。

    ・「ユーザーリストコンボ」の「データ>内容」を「値入力」に設定する。

    ・ユーザ設定画面で表示するデータを検索する処理を作成し、「ユーザーリストコンボ」の「オブジェクト>動作設定>実行処理」に設定する。


     

     

    0
    コメントアクション パーマリンク
  • Avatar
    渡辺

    サブフォームとして表示するコントロールが実体化された状態で初期化を行っていただきますようお願い致します。
    例えば、画面設計からサブフォームの「オブジェクト>動作設定>明細」に画面Bをご設定頂ければ、
    初回のボタン押下も画面Bが実体化された状態で実行され、値のセット処理が期待通りに動作するようになるかと存じます。

    事前(プロパティ)にサブフォームの明細に設定できない場合は、初期化はできないと考えてよろしいでしょうか。
    サブフォーム1つに対して、複数のフォームを使うことを考えているので現状の設計では事前にどれかに絞って設定できません。

     

    ●お送りいただいた構成について
    「ユーザーリストコンボ」がユーザーの選択を目的とするコントロールの場合、
    「ユーザーリストコンボ」の「データ>内容」の設定は不要かと存じます。

    「ユーザーリストコンボ」の「データ>内容」に値が設定されている場合、以下画像のようにユーザ設定画面で表示している行の値が書き換えられてしまいます。

    こちらはまだ試すことできていませんが、参考にさせていただきます。

    0
    コメントアクション パーマリンク
  • Avatar
    鈴木@Unifinity

    渡辺様

    ご返信遅くなり申し訳ございません。

    事前(プロパティ)にサブフォームの明細に設定できない場合は、初期化はできないと考えてよろしいでしょうか。
    サブフォーム1つに対して、複数のフォームを使うことを考えているので現状の設計では事前にどれかに絞って設定できません。

    上記のような場合、サブフォームの明細として表示する画面のテーブルと連携する項目を初期化する方法はございません。

    渡辺様にお送りいただいたメイン画面のように、複数のサブ画面を操作に応じて画面表示するような場合には、以下のようにご実装頂けますと幸いです。

    ●画面設計
    親画面に各サブ画面毎のサブフォーム配置し、「オブジェクト>可否>表示」をOFFにする。(非表示で配置する)
    ●サブ画面の制御を行う処理
    表示したいサブフォームを「コントロール/可視状態セット」で可視状態にする。

    単一の画面ではございますが、サンプルアプリ「テンキーを使ってデータを入力する」でも操作に応じてサブフォームの表示制御を行っております。

    代替案のご案内となり恐れ入りますが、ご参考となれば幸いです。

    0
    コメントアクション パーマリンク
  • Avatar
    渡辺

    回答ありがとうございます。

    サブフォームの遷移先に設定しておくのは、実際利用する画面でなくてもよろしいでしょうか。

    1.起動時に初期化画面を作成。見えないサブフォームを必要数分作って遷移先に設定しておく。
    2.ポップアップの用に使いたい別画面で、1で遷移先に指定していた画面をサブフォームの遷移先に動的に設定する。

    2の時に、初めて遷移先に設定するときにもコントロール等は作成済みになりますか。それともあくまで利用する画面で遷移先に事前に設定設定されていないとだめでしょうか。

    0
    コメントアクション パーマリンク
  • Avatar
    鈴木@Unifinity

    渡辺様

    ご確認いただきありがとうございます。
    お教えいただいたイメージは以下のような構成となる認識でお間違い無いでしょうか。

    このような構成の場合、画面Aで子画面の初期化が行われていない状態で初期値の設定を行ってしまうことになり、期待通りの動作とならないかと存じます。

    別の代替案の提示となり申し訳ございませんが、
    子画面を「コントロール/サブフォーム遷移先」で設定した後に行う初期値設定を
    「コントロール/内容セット」ではなく、「データベース/更新」などからテーブルへ直接書き込みを行うことをご検討頂くことは可能でしょうか。

    処理実装のイメージは以下となります。

    「コントロール/サブフォーム遷移先」によって生じる子画面の初期化処理が非同期で実行されてしまうことにより、「コントロール/サブフォーム遷移先」の後に行った子画面のコントロールへの値セットが無視されてしまうことが問題となっているよう見受けられます。

    上記のように、コントロールが連携するテーブルの値を更新できれば、子画面の初期化後に設定した値を表示できるかと存じます。

    代替案ばかりで申し訳ございませんが、ご検討下さいますと幸いです。

    0
    コメントアクション パーマリンク
  • Avatar
    渡辺

    回答ありがとうございます。

    このような構成の場合、画面Aで子画面の初期化が行われていない状態で初期値の設定を行ってしまうことになり、期待通りの動作とならないかと存じます。

    図までありがとうございます。あくまで実際使いたい画面のサブフォームの遷移先に設定しておかないとダメということですね。

    「コントロール/内容セット」ではなく、「データベース/更新」などからテーブルへ直接書き込みを行うことをご検討頂くことは可能でしょうか。

    データベース連携で対応できるか考えてみます。

    代替案ばかりで申し訳ございませんが、ご検討下さいますと幸いです。

    こちらこそいくつも代替案の提示ありがとうございます。

    0
    コメントアクション パーマリンク

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