メインコンテンツへスキップ

テーブルコントロールの初期化方法

コメント

27件のコメント

  • Sun nihara

    画面を開きなおさずにということであれば難しいのではないでしょうか
    開きなおしてもいいならFormStateClearとか
    フォーム状態の維持のプロパティとかで対応できるとおもいますが・・・

  • だいず

    Sun nihara様

     

    ご返事ありがとうございました。

    各社員が好きな順番や列幅で調整して使用しており、調整後の情報は保持されています。

    初期化ボタンを押した場合は、開きなおすのは構いません。

    教えていただいたFormStateClearを調べてみます。

    貴重なお時間を割いて、ご協力いただき、ありがとうございました。

  • Tanda

    だいずさん、

    任意のタイミングで明示的に初期化するなら、FormStateClear() 関数が使えます。これに対して、毎回、タスク起動のたびに初期化でいいのなら、フォーム特性の「フォーム状態の維持」を「No」にしてやればいいです。

    フォーム状態の維持はバージョン管理もできて、便利ですよ。

    詳細は、下記の連載コーナーでも解説していますので、よろしければお越しください。
    第206回 フォーム状態の維持と維持バージョン(2025年4月30日)

  • だいず

    Tanda様

     

    返信遅れて申し訳ございません。またご教授いただきありがとうございました。

    FormStateClearを使ってみたところ、カラムの幅や順番が元に戻る動きにはなりませんでした。

    論理型の変数の「項目更新」処理の「値」欄で「FormStateClear('*')」や「FormStateClear('')」としたのですが、うまく初期化されません。

    ソースを見て回ったところ、違う機能として存在していたボタンでカラムの幅と順番が元に戻る処理を見つけたので(その処理ではFormStateClearを使わずに、ゴリゴリと再計算させてます)それを流用することにします。

    貴重なお時間を割いてご協力いただき、ありがとうございました。

  • Tanda

    だいずさん、

    パラメータは、FormStateClear('') ではなく、FormStateClear(' ') ですよ。

  • だいず

    Tanda様

     

    ご指摘ありがとうございます。半角スペースが必要だったのですね。

    早速試しみましたが、残念ながら初期化できませんでした。

    タスクの構成は下記のようになっています。

     ・親タスクでForm全体とForm上部にボタン類を生成

     ・子タスクで、親タスクが生成したFormの下部にテーブル構造を生成

    親タスクにForm初期化のボタンを新たに用意してFormStateClear(' ')とFormStateClear('*')を実行してみましたが、どちらでもFormが初期化できない状態です。

     

  • nkmt

    使い方が大正解なのかはわかりませんが、自分は以下のように使っています。

  • nkmt

    自分は全ての画面フォームをリセットする目的で、メインメニュー等から
    アクション FormStateClear('*') を発行できるようお使い頂いております。

  • Sun nihara

    他のプログラムではゴリゴリと再計算していると書いてらっしゃったので
    何か種も仕掛けもない.netとかで直接magicのテーブルを読み込み、操作していたりするのでしょうか?
    後学のために差しさわりのない範囲でご教示いただけないかと思っておりますー
    よくリクエストはもらうんですが無理っすねーて断ってるので・・・

  • だいず

    nkmt様

    ご返事ありがとうございます。同じようにアクションで試してみましたが、やはり初期化できませんでした。

    私もよく分かっていないのですが、プログラムの構造上の問題なのかと思っております。

     

    Sun nihara様

    ご返事ありがとうございます。

    .netは使用していないと思います。Magic自体に不慣れなので、ソースを見てもイマイチ何をしているのか分からないのですが、formを生成する処理を最初から行っているように思います。

  • Tanda

    Sun niharaさん、

    上にも書きましたが、フォーム特性の「フォーム状態の維持」を「No」にしてやれば、フォーム変更はその場限りで、あとは一切、記憶されなくなりますよ。

    フォームを毎回りセットしたいのでしたら、これが一番簡単ですよ。

    だいずさん、

    プログラム修正前に維持されていたフォームが、ゴミデータとして残っているのかもしれませんね。

  • Sun nihara

    だいずさん、
    お返事ありがとうございます、フォームを生成していそうなんですか・・
    magicのテーブルじゃないんでしょうかね、.net のDatatableコントロール貼ってるとかだと
    そのプロパティを変えればよいかとは思いますが、
    ちょっとMAGICだけだとどうやってるか想像つきませんねー!

    Tandaさん
    ご教示ありがとうございます、フォーム状態の維持は存じておりまして
    リセットというよりはマウスで動かした列の幅によって、2段にしたりと
    行の高さを変えるとかそういう感じのリクエストですね
    根本的にテーブルコントロールの列の幅ってとる方法がほぼなくて
    コントロール貼って、幅とってとか何とかすればいけるかもしれないけども
    さすがにめんどうというところであります

  • だいず

    Sun nihara様

    気が付いたのですが、MagicEnterpriseStudio上のデバッグモード(?)で動かすと、あるボタンでフォームが初期化できるのですが、それをecfに出力して実行すると、そのボタンで初期化できません。

    同じソースなのにStudioとecfとで動きが異なる状況です。

     

    Magicのマニュアルに下記のファイルを削除しても初期化できるとありますが、ファイルを削除しても初期化できませんでした。私の使用方法として、1台のサーバー上のMgxpaRuntime.exeをクライアントPCから呼び出して使用している影響かもしれませんが、かといってサーバー側の該当のフォルダに全社員分のデータがあるようにも見えません。

    C:\Users\<user>\AppData\Roaming\MSE\<APP GUI ID>

  • だいず

    ご協力いただいた皆様

     

    フォームの初期化ができました。

    以下2点が必要だったようです。

    1.FormStateClear('')実行後にイベント実行で「ビュー再表示」を行う

    2.MagicEnterpriseStudioのデバッグモードでは正常に動作しないので、ECFを出力し、ECF経由でプログラム実行

     

    ちなみに、タスクは下記の構成になっていますが、親タスクにFormStateClearを入れました。

    ・親タスクでForm全体とForm上部にボタン類を生成

    ・子タスクで、親タスクが生成したFormの下部にテーブル構造を生成

     

    皆様ご協力ありがとうございました。

  • Tanda

    Sun niharaさん、

    フォームのレイアウトは結構いちばん手間と時間がかかりますね。同情いたします。

  • nkmt

    だいずさん
    ecfでなければFormStateClearが効かない事は体感しており投稿しないといけないと思ったけど投稿しずまいでした。
    ヘルプを見てもそれを把握出来ない気がしました。
    メインイベントにスコープ=サブツリーで「FormStateClear('')、ビュー再表示」の手法は大変参考になりました。
    ありがとうございます。

  • だいず

    nkmt様

     

    こちらこそありがとうございました。

    EnterpriseStudioとECFとで動作が違うのはなんとかならないかと思います。

    今もフォームを直しているのですが、EnterpriseStudioでは動作するのに、ECFにすると異常終了するようになってしまいました。

  • Tanda

    だいずさん、

    反対ですよ。「フォーム状態の維持」は開発版では効きません。実行版にデプロイしてはじめて有効になります。

  • だいず

    Tanda様

     

    ご返事ありがとうございます。

    >反対ですよ。「フォーム状態の維持」は開発版では効きません。

    そうなんですね。開発版と実行版の違いがちょこちょこありそうなので、頻繁に実行版でテストが必要なんですね。

     

  • Tanda

    だいずさん、

    というか、これが開発版で効いてしまったら、F7で実行するたびにフォームが異なるという現象が起こり得てしまい、どのフォームがオリジナルだったのか、分からなくなってしまうからです。

  • だいず

    Tanda様

     

    直接F7で今回のフォーム画面を呼び出した場合は納得できるのですが、

    下記の手順でも開発版だとカラムの状態が保持されませんでした。

    1.メインメニュー画面をF7で呼び出す

    2.今回のフォームがあるタスクに遷移

    3.カラムの並び替えを実行してフォームを閉じる

    4.メインメニューからもう一度今回のフォームがあるタスクに遷移

     

    開発版を起動する際に、Magic.iniを使用しておらず、ターミナル番号も割り当てていないので、フォーム状態を保存するための情報が不足しているからなのかと思っております。

  • nkmt

    お邪魔します。
    だいず様
    INIやターミナル番号とFormStateClearとの関連はわかりませんが、
    私は開発版の起動アイコンショートカットには、 /INI=そのシステムの開発用.INI
    といった指定をしております。
    開発版と実行版の動作の違いはFormStateClearを除いて他にはあまり感じないので
    開発版でテストOKならecfを作って客先リリースしています。

  • だいず

    nkmt様

    コメントありがとうございます。

    開発版と実行版はあまり違いないのですね。それを聞いて安心しました。

     

  • マグル

    ヘルプ引用です。

    Home > Magic xpa 逆引き辞典 > ウィンドウインタフェース > エンドユーザがカスタマイズしたフォーム状態を保持するには
    ⇒この機能は、開発エンジンで実行している場合は無効です

    関連プログラム:オンライン/リッチクライアントサンプル(プログラム WI01/RWI01)

    サンプル触っただけなので特に何もしてませんが動作結果だけ。
    開発エンジンでRW01をF7実行⇒無効
    開発エンジンでRW01をメニューから呼出実行⇒無効
    ビルドしてメニューから呼出実行⇒有効

    でしたので、ヘルプの通りなのかと思います。

  • Tanda

    だいずさん、

    メインメニューからでも同じことですよ。デバッグ実行しているうちに、どれがオリジナルだったか分からなくなってしまいますから。

  • nkmt

    スレ主ではありませんがマグル様ありがとうございます。
    > ⇒この機能は、開発エンジンで実行している場合は無効です

    私は以下を見ておりました。

  • だいず

    マグル様

    Tanda様

     

    ご返事ありがとうございました。

    たしかに「Home > Magic xpa 逆引き辞典 > ウィンドウインタフェース > エンドユーザがカスタマイズしたフォーム状態を保持するには」に書いてありますね。いろいろなマニュアルを見て回らないといけないということですね。

     

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