フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
ご連絡ありがとうございます。
確かに繰り返し処理を設定した[ラベル要素]にNULL値を設定すると、NULLと表示されてしまうようです。
[テーブル]の文字列型の列の場合、通常空欄には空白文字列が入っていますが、日付型や数値型の場合NULL値が入っていることで空欄となります。一番簡単に変更するにはデータ取得の際にメソッド「指定セルの値を取得する(int,int)」ではなく「指定セルの表示文字列を取得する(int,int)」で[テーブル]からセルデータ取得時に文字列としてしまうことです。
ただ表示文字列の取得だと処理上都合が悪い場合や、元のテーブルデータを[テーブル]に表示せずに変数に入れて編集したい場合には、別の方法も考えられます。
日付列に関しては編集領域を右クリック>[複合コンポーネント追加]>[テーブル]>[テーブル日付データ文字列変換.mzcx]を追加し、この複合コンポーネントで日付型列を文字列型に変換することができます。
また他の数値型列等の列型の場合は[NULL判定]を使って、NULL値が入っていた場合は代わりに空白文字列を取得することが考えられます。上記確認のためのサンプルファイルを添付いたしますので、ご覧いただき、ご不明な点がございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
接続先処理には問題はなかったようですので、[サブルーチン]の呼び出しのメソッドが原因かと推測します。
今回[テーブル]の「データ選択イベント」に接続したいということを明示するために、[サブルーチン(別解)]からもデータ選択イベントを発生させていますが、この場合[サブルーチン]を呼び出す際のメソッドは「イベントを渡して処理を呼び出す(PFEvent)」を使用し、引数には「取得方法:イベント」を設定します。
メソッド「処理を呼び出す()」を選択したり、違う種類のイベントに繋げてしまったり(例:データ更新イベントに、データ選択イベントが発生イベントの[サブルーチン]を繋げる)などすると処理は呼び出されません。特にイベント内包データを取得して[サブルーチン]の接続先処理で利用したい時に「イベントを渡して処理を呼び出す(PFEvent)」の方を使用します。それ以外はメソッド「処理を呼び出す()」を使用し、[サブルーチン]からの発生イベントはアクションイベントを使用することが多いです。この場合もアクションイベント以外を[サブルーチン]から発生させると、処理が呼び出されません。
以上ご確認いただき、ご不明な点等ございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
[コンボボックス]へのデータ設定は[テーブル]から列データをリスト型で取得して設定することができます。
この時どのように下位分類の[テーブル]と連動させるかということですが、もし症状テーブルが1つずつ別々にMZ上に取得されているなら、一旦[リスト格納変数]に各テーブルデータを要素として格納し、上位の[コンボボックス]の要素が選択されたときに、選択位置と同位置のテーブルデータを取り出して、次の[コンボボック]用の列データを取得することが考えられます。上位分類のキーワードの順番に下位分類のテーブルデータを[リスト格納変数]に格納します。また、症状テーブルは全データを1つのテーブルデータとして取得してあり分類番号で整理されているなら、一旦[テーブルサブセットフィルタ]に設定し、分類番号で選択したテーブルデータから列のリスト型データを取得することも考えられます。
以上の処理を確認できるように簡単なサンプルファイルを作成しましたので、添付いたします。
ご確認いただき、ご不明な点、ご要望等ございましたらご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
iniファイルではどうしてもアプリケーションファイルとは別にもう一つファイルを管理することになりますので、データベースにデータが格納できるのでしたら、そちらに越したことは無いと存じます。
現在のところ受注番号を格納する列があるかどうか不明ですが、受注番号は「230012」等そのまま格納し、MZ側に読み込んだ後、「年度」と「連続番号」に分割するのが簡単かと考えます。
例えば受注番号のデータベースでの列名を「num」と仮定して
1)SQL文「select MAX(num) from テーブル」を実行します。これで最大の(=最後の)受注番号を取得できます。
2)取得した1行1列のテーブルのセルの値を取得し、[文字列格納変数]に設定します。
3)[文字列格納変数]では最初から数えて〇番目、または最後から数えて〇番目までの部分文字列を取得できます。最初から2文字、最後から4文字目までの文字列を取得し、年度と連続番号とします。
この後は前回と同様の処理で受注番号を作成できます。もし、データベーステーブルへの後からの列追加等で、受注番号の列に「NULL」値が入る可能性がある場合には「SELECT COALESCE(MAX(num), 230000) FROM table」としておけば、最大ととしてNULL値が取得されるケースでも「230000」が取得されます。
データベースにデータ追加時には、現在もInsert文で処理を実行されていると思います。nsert文に受注番号分の列名と値を追加する以外、特に大きな相違はありません。
実際には動作しませんが、上記処理の流れが判るように修正を加えてサンプルファイルを添付いたしますので、ご参考になれば幸いです。
ご不明な点、ご要望等ございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
会計年度期間を「4月~3月」と仮定すると、現在日時から月数を「3」引くことで、1月から3月も前会計年度に含めることができます。
また、カウンターのリセットについてはアプリケーション起動時に前回使用時までの「年」と今回起動時の「年」を比較して、違いがあった時に[数値入力カウンタ]の値を「0」に設定することが考えられます。ただ、この「年」と[数値入力カウンタ]の最終値を含む受注番号をデータベースに登録しない場合には、前回までの値を知ることが難しくなります。アプリケーションビルダーでアプリケーションを起動し、終了時に必ず保存すれば[ラベル]などのGUI部品に設定された値は保持されますが、完成したアプリケーションを毎回上書きしていくことになり、また保存忘れなども起こり得るかと思います。
また、ファイルの内容を編集する必要のないユーザーが使用する際にはアプリケーションローダーでの起動をお勧めしておりますが。[アプリケーション]のメソッド「save(File)」を設定した場合を除き、ローダーではアプリケーションファイルが更新されることはありません。データベース以外でアプリケーションファイル外に値を保存したい場合は「iniファイル」(設定ファイル)の使用をお勧めしております。
iniファイルはキーと値を「=」でつないだ書式を持つテキストファイルです。
MZプラットフォーム研究会のHPからもダウンロードできる「MZ Platform IoT Toolkit」内のアプリケーションでも使用しております。
必要時にこのiniファイルからキーに相当する値を読み込み、また保存することができます。会計年度の設定とiniファイル読み込み・保存の処理を設定したファイルを添付いたします。またiniファイルも添付いたします。iniファイルはアプリケーションファイルと同じフォルダに保存してお試しください。
上記の処理はアプリケーション開始時が適当かと思いますが、分りやすいようにボタンを押したら行われるようになっています。ファイルをご確認いただき、ご不明な点、ご要望等がございましたら、再度ご連絡いただければ幸いです。どうぞよろしくお願い申し上げます。
添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
正規表現では半角括弧等がメタ文字となっているため、検索対象とする際には半角¥マークを付けてエスケープする必要があります。複雑になってしまうため、メソッド「行データを文字列で選択する(int,String)」を使って、項目が選択されている数だけ、行データを選択する繰り返し処理を行った方が簡単になるかと思います。メタ文字を考慮に入れておらず大変失礼いたしました。
SQL文内での半角括弧使用に関して手元のMySQLで試した限りでは、引用符を付けて値として用いる場合は問題ないようですが、何かありましたらお知らせいただけると助かります。SQL文の作成では[文字列格納変数]に設定するSQL文およびwhere句部分の雛形を変更し、また繰り返し処理終了後に文字列に「)」を連結する処理を追加することで可能です。
上記の修正を加えたサンプルファイルを添付いたしますので、ご参考になれば幸いです。
ご不明な点がございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
データベースからの取得した検索結果データを[テーブル]に設定したときは、「データ設定イベント」が発生します。このデータ発生イベントの接続先に[繰り返し処理(FOR)]を設定し、状態列のセルの値を[等価演算(=)]で判定し、「true」の値の時に各行の背景色を設定します。
もし検索結果データを注文一覧テーブルにメソッド「行を追加する(PFObjectTable)」で設定している場合は、データ設定イベントは発生しませんので、「データ更新イベント」にイベント番号「11(複数行を追加したとき)」で同じように[繰り返し処理(FOR)]を設定します。
前回のサンプルファイルに上記の処理を追加してみましたので、ご参考になれば幸いです。
添付ファイル:
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
メソッド「getSelectedItems()」で選択要素名のリストを取得することができます。メソッドが英語名のままになっており、判りにくく申し訳ございません。1)既にデータベースから検索したテーブルデータがMZ上にある場合は、[テーブルサブセットフィルタ」を使ってさらに文字列や日付等の条件で行を選択し取得することが可能です。
複数の選択条件がある場合、正規表現を使うことが考えられます。
「AAA|BBB」で「AAA」または「BBB」の文字列という意味になるので、これを[文字列格納変数]の中に作成し、[テーブルサブセットフィルタ」のメソッド「行データの正規表現で行を選択する(int,String)」の引数とします。2)改めてデータベースから検索する場合はSelect文にwhere句を追加することが必要です。
[文字列格納変数]の中にwhere句の雛形を設定し、要素名で置き換えて、さらにSELCT文と結合します。
以上2点について簡単なサンプルファイルを作成しましたので、ご覧下さい。
既にwhere句があるSelect文にさらに条件を追加する場合は少し変更する必要があります。ファイルをご覧いただき、ご不明な点等ございましたら、再度ご連絡いただければ幸いです。
どうぞよろしくお願い申し上げます。- この返信は1年、 1ヶ月前にMZPlatformユーザー会が編集しました。
添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
お送りいただいたファイルを元にサンプルファイルを作成してみました。テーブルの完了行数をカウントするものとして[テーブルサブセットフィルター]を使っています。該当するデータがある行のデータだけを抜き出すことができます。元のテーブルの行数と比較して、同数になれば完了と判断できます。
[リスト格納変数]のメソッド「indexOf(Object)」でリストの中の該当データの位置を取得できます。完了した製品番号の行を探すのに使うことができます。
[テーブル]背景色の設定には引数に直接「white,red,blue」など入力できます。javaで定義された13色の色名を使用できます。引数欄ではrgb表示に変わります。
サンプルファイルをご覧いただき、ご不明な点がございましたら、再度ご連絡いただければ幸いです。どうぞよろしくお願い申し上げます。
添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
手元で確認した限りでは、結合されたセルの値は結合範囲の『左上』のセルに入っていて、MZの[テーブル]上でもその位置に表示されます。
例えばEXCELのセルA1,A2,B1,B2が結合されているとき、A1に値が入っているということです。
指定位置のセルを読み込む場合でも、テーブル全体を読み込む場合も(繰り返し処理で行とセルを指定している)同じように表示されました。気になりましたのが、「現在のシートの行を選択する」と「現在の行のセルを選択する」の処理の順番ですが、これは行の選択処理を先に設定してください。
また、行やセルの位置は0から数えてスタートするので、A1のセルはMZでは0行目、0番目の位置になりますのでお気を付けください。以上ご確認いただいても、セルの値が読み込めないという場合は、どうぞ再度ご連絡ください。
エラーが発生して読み込めない場合はそのエラーの内容もお知らせください。
そのセルが結合されているか知るメソッド「isCurrentCellMerged()」やセルの結合を解除する「removeMergedRegion(int)」メソッドは存在しますが、セル結合以外の原因があるように推測いたします。なお、最近はセルは結合せず、セルの書式指定で「選択範囲で中央」で中央に配置されていることも多いですが、この場合も範囲の左端のセルに値が入っています。
以上お手数をお掛けいたしますが、どうぞよろしくお願い申し上げます。
-
投稿者投稿