MZ Platformとは › 掲示板 › MZプラットフォームユーザー会掲示板 › 複数のテーブルコンポーネントから特定の一つを取得する方法について
- このトピックは、 9 返信、 2 投稿者 です。最終更新日: 6 年, 2 ヶ月 前 MZPlatformユーザー会
-
著者投稿
-
2018年9月19日 at 10:24 AM #5285ORIteck CO., LTD一般参加者
チュートリアル金型履歴管理システムを参考に、マスタデータの登録部分の仕様を検討中です。同チュートリアルでは、ノード選択でそのノード名に対応したGUI複合コンポーネントの中でSQLを実行し検索結果を表示しますが、テーブルの列幅が一定のため登録情報を確認するには列幅の調整が必要です。
そこで、表示されるテーブルの列幅を選択ノードに応じて自動で設定したいのですが何かよい方法はございませんか?
SQL実行結果のテーブル設定後に繰り返し制御で、実行結果のテーブルに対応した列幅情報テーブルを用意しそこから列幅を取得し、実行結果のテーブルに列幅設定をする、この方法で可能なのですが、列幅情報テーブルをノード選択時に特定する方法がないと実現できません。ノード名とテーブルKEY名のテーブルを用意し何かできないか試行錯誤中です。2018年9月19日 at 6:45 PM #5286MZPlatformユーザー会サイト管理者実現したい処理については理解できたと思いますので、回答します。実現方法の選択肢が複数ありまして、すべて説明すると逆に難しそうなので、その中の一例としての紹介になります。
まずは、検索結果のテーブルに対する列幅を指定しようとすると、必要な情報は列幅のリストになります。表示したいテーブルの列数がすべて同じであれば、テーブル名と複数の列幅の値で構成されるテーブルを準備しても良いですが、おそらく各テーブルの列数が異なると思いますので、列幅のリストを複数管理する必要があります。もし、各テーブルと列幅リストの組み合わせを順番で対応して良ければ、列幅リストのリストとして管理しても良いですが、各テーブルの名前と列幅リストの組を管理したければ、マップ格納変数を用いる方法があります。
また、そのようなテーブル名と列幅リストの組をどこに保存するかも選択肢が複数あります。もし、それらを作成する処理をアプリケーション内に記述しておいてよければ、添付ファイルのような記述で実現可能です。参考にしていただき、ご不明な点があればお問い合わせください。
添付ファイル:
2018年9月20日 at 5:33 PM #5291ORIteck CO., LTD一般参加者現在、列幅変換テーブル(ノード名と列幅を登録したテーブルのKEY名の2列からなるテーブル)を用意し、ノード選択のアクションで、列幅変換テーブルの行数分繰返し制御、ノード名に一致するKEYのテーブルをコンポーネントアクセスで取得、コンポーネント格納変数に設定し、テーブルコンポーネントのメソッド「テーブルデータを取得する」を設定、テーブル格納変数でメソッドを実行しテーブルを設定、それを別テーブルに設定して、この別テーブルから繰返し制御で、検索結果のテーブルの列幅を変えることができました。
ただ、ご察しの通り、マスターテーブル分列幅を登録したテーブル(リスト)が必要で、これをMZ内に置き、更に、列幅変換テーブルに登録する作業が必要で、後々を考えると現実的かな?・・と思っていました。
今回ご教授頂いた方法は、これらを一つにまとめて管理できるわけですね。それで、実現したい処理としては、ノード名選択でマップに登録したテーブル名から列幅のリストを取得する必要がありますが、この処理については問題ないでしょうか?
頂いたサンプルは時間をかけて理解していきたいと思っています。2018年9月20日 at 5:58 PM #5292MZPlatformユーザー会サイト管理者はい。添付したサンプルはリストですが、ツリーのノード名を用いて同様の取得が実現できると思います。
下記、追加情報です。テーブル名と列幅リストの組をアプリケーション内で作成せずに、こちらもデータベースのテーブルに保存する場合の方法について検討しました。
列幅リストはテーブルごとに長さが変わると思いますが、列幅リストをカンマ区切りの文字列として表現して、単一の文字列としてデータベースのテーブルに保存することができます。つまり、データベースのテーブルにはテーブル名と列幅リスト文字列の組が保存されます。そのように表現された文字列は、カンマを用いて分割してリストデータに変換することができます。あとは前回と同様の処理になります。
この方法で前回のサンプルを修正したものを再度添付します。
添付ファイル:
2018年9月21日 at 8:44 AM #5296ORIteck CO., LTD一般参加者マップ格納変数の情報が少ないので、基本的な部分かも知れませんがお願いします。
幅列情報は、n列1行のテーブル 又は、1列n行のリストで管理(登録)するものだと考えていますが、サンプルで頂いた、3列2行、2列3行のテーブルの意味と、それに対応したリストの値、100,50,100、50,100が何処にあるのか?
よろしくお願いします。2018年9月21日 at 11:32 AM #5297MZPlatformユーザー会サイト管理者サンプルのテーブルに特に意味はありませんが、SQL検索結果のテーブルをイメージしています。列幅を指定する対象のテーブルです。それに対応した列幅リストはサンプルの開始イベントで起動されるサブルーチンの中で作成されており、作成後は変数内(PCのメモリ上)にのみ存在します。PCのメモリ上にのみ存在するので、アプリ終了時には消失します。これはマップ固有というより変数全般の話になります。列幅リストの作成処理をアプリ内に埋め込んでいるのが一つ目のサンプルで、列幅リストの情報を文字列としてデータベース側に保存する例が二つ目のサンプルになります。
ご紹介した内容はあくまでも一例ですから、抽象的ですし完全に理解するには専門的な知識が必要かもしれませんので、ご自身が理解しやすい方法でお考え下さい。
2018年9月21日 at 2:26 PM #5306ORIteck CO., LTD一般参加者質問内容については理解できたつもりです。
理解としては、今回の様なケースではマップ格納変数には「列幅を設定するリスト」だけを登録すればよく、ノード選択で利用するなら、登録キー名をノード名と同じにしておく。この理解が大分遠いようなら現状で進めたいと思います。近いようであれば、添付ファイルご確認頂けないでしょうか。
ご教授頂いた内容ですが、まずはデータベースに事前に列幅設定のテーブルを用意し、毎回読込んでマップ格納変数に登録して使用する仕様で考えたいと思っています。マップ格納変数に必要な情報が格納されるかご教授ください。
2018年9月21日 at 2:59 PM #5309MZPlatformユーザー会サイト管理者解釈はそれで正しいと思います。
添付のファイルは処理に問題があったので、修正したものを添付します。マップを空にするのは繰返し前に一度だけで、繰返しの中で空にすると、最後のリストしか登録されないことになります。
ボタンを押してマップを作成した後で、中身を確認するための処理も追加しておきました。
2018年9月25日 at 10:50 AM #5313ORIteck CO., LTD一般参加者修正ファイルありがとうございます。
最終的に選択ノード名と同じ値をキーにマップ格納変数には登録ができるようになりましたが、そのキーでマップ格納変数より値を取り出すことができません「キーを指定して値を取得する」。取り出しは、ツリーのデータ選択イベントです。取得方法を固定値にすると取得できますが、NULL判定でのオペランド取得やgetSelectionNodeのメソッド処理結果では取得ができません。
念のため、登録と取得のキー名を単純に’a’としましたが、ダメでした。何か、考えられる事があればお願いします。
2018年9月25日 at 12:05 PM #5315MZPlatformユーザー会サイト管理者ツリーの選択ノード名を使った処理については、金型履歴管理のサンプルをビルダーでご覧ください。
「マスタ」複合コンポーネントの中に書かれていまして、ツリーのデータ選択イベントで、ツリーの「getNodeText(PFObjectTreeNode)」を呼んでいます。このメソッドで、選択ノード名が取得できるので、それを使ってマップからキーを指定して値を取得してみてください。
-
著者投稿
- このトピックに返信するには、ログインしてください。