作成した返信
-
著者投稿
-
MZPlatformユーザー会サイト管理者
はい、可能です。
システム情報コンポーネントに「システムプロパティを取得する(String)」というメソッドがありまして、引数に固定値の文字列「user.name」を与えると、Windowsにログインしているユーザ名が取得できます。システムプロパティでは他にもとれる情報がありますので、FAQの関連質問へのリンクを張っておきます。他の項目についての詳細は、Web検索で「Java システムプロパティ」を調べると情報が得られると思います。
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/developer/developer_a5.htmlMZPlatformユーザー会サイト管理者質問1の内容がよくわかりません。親という表現はやめた方が良いと思います。
基本的なことを説明しますと、左側の四角がコンポーネントの本体で、各コンポーネントに定義されたイベント処理につながる右側の四角は各コンポーネントが持つ機能(メソッド)の呼び出しです。前述の処理の順序を理解していれば、メソッド起動はそのときの値を返すと思えばよいです。質問2については、「Java 正規表現」をWeb検索してみてください。文字列のパターンを指定してマッチする行を選択しています。「.+」は任意の文字列を意味して、空文字列の行を除外する効果があると思います。
MZPlatformユーザー会サイト管理者削除の条件についてのご質問にお答えする前に、後半の繰り返し制御について、というよりMZの処理実行順序について理解していただく必要がありそうです。
基本的な処理の順序は、下記の3つです。
1)イベント処理(赤丸につながった一連の起動メソッド)は上から順です。
2)起動メソッドを実行したときにイベントが発生する場合は、そのイベント処理が終わってから次の起動メソッドに移ります。
3)コンポーネント(左側の四角)の順番は、処理の順番と関係ありません。ここでは、サブルーチンと繰返し制御の実行の両方で必要なテーブルを作成しています。
サブルーチンの方では、アクションイベント処理の中で全体テーブルからフィルタで部分テーブルを取得して、選択テーブルに設定した後で経過時間が入る列を追加します。最後の繰り返し制御の繰り返し処理を呼び出すと、指定した回数アクションイベントが発生します。そのイベント処理の中で、選択テーブルの各行に関してセルを比較して経過時間を計算して、最後にテーブルの経過時間のセルに値を設定します。
この処理順序が理解できないうちは、適切に処理の追加はできませんので、がんばっていただくしかありません。
MZPlatformユーザー会サイト管理者画面のテーブルであれば、特定行を削除するメソッドがあります。
変数内のテーブルデータであれば、行を位置指定で削除するメソッドがあります。複数行の削除はないので、テーブルの各行に対して繰り返し処理の中で削除してください。ただし、繰り返し処理で前方から削除していくと後方の行位置がずれてしまうので、後方からの繰り返し制御にして後方から削除する必要があります。
MZPlatformユーザー会サイト管理者エラーについては、メソッドの選択ミスです。前述のリンク先のFAQを見ていただくとわかりますが、「Calendarオブジェクトによる…」ではなく「Dateオブジェクトによる…」です。テーブルのセルに入っているような日時データまたは文字列は、内部的にはDateオブジェクトと呼ばれるものまたはそれに変換されて扱われます。
処理についてもいくつか手を入れましたので、添付ファイルをご確認ください。日時比較は選択テーブル側の行に対する処理に変更していて、列を追加してそこに経過時間を入れています。
繰り返し処理の中で現在の行と直前の行の日時を用いるので、テーブルの行位置指定で計算が必要になります。経過時間はミリ秒単位で取得されるので、それを必要な単位に変換する必要があります。
MZPlatformユーザー会サイト管理者MZアプリのファイルについては、エラーを再現する部分を切り出したファイルをZIP圧縮して、この掲示板に添付ファイルとして貼り付けていただければ、こちらで内容を確認することは可能です。
その場合でも、まずはどのような処理をしてどの時点でどのようなエラーが出るのかをご説明ください。エラーメッセージだけでも回避方法がわかる場合があります。
MZPlatformユーザー会サイト管理者1つ目のご質問は、テーブルサブセットフィルターのメソッドで、列の値で行選択をすることで実現できたということですね。
2つ目のご質問は、対象とするテーブルがどのようなデータで構成されているかで処理の複雑さが変わってきます。
基本となる処理としては、ある作業者の作業だけが時系列に並んでいるとして、繰り返し処理で2行分のセルの値を使ってカレンダーで時刻の比較で経過時間を取得します。結果はテーブルに1列追加しておいてそのセルに入力していくと良いでしょう。経過時間の取得部分はFAQに同様の質問があるのでご覧ください。
https://ssl.monozukuri.org/mzplatform/faq/faq/faq_technical/how_to_realized/how_to_realized_a64.htmlただし、これだけだと最後の作業の経過時間が計算できない問題がありますし、途中で日付が変わっているとその部分で切らないといけません。対象となるテーブルを事前に整形する処理を入れたりして対処することになります。
MZPlatformユーザー会サイト管理者下記長文になりますが、解説します。
スレッドとは、起動メソッドの実行やイベント発生が、一つずつ順番に処理が進むまとまりとお考え下さい。あるスレッドの処理中に、モーダルダイアログの表示が含まれていると、モーダルダイアログが閉じられるまでそのスレッドの処理は止まります。モーダルダイアログの表示のあとに追加されている起動メソッドは、ダイアログが閉じられてから実行されます。
例えば、ボタンのアクションイベント発生は、画面表示用のメインのスレッドで実行されていて、その処理中にメッセージダイアログの表示が含まれていると、メッセージダイアログが閉じられるまで他の部品に触れなくなります。これがブロックと表現した状態です。ただし、このようにモーダルダイアログを表示すると、同じスレッドの中で時間のかかる処理をしながら画面をブロックしてダイアログを表示することはできません。ダイアログ表示の前に時間のかかる処理を実行すると、それが終わってからダイアログが表示されますし、ダイアログ表示の後に時間のかかる処理を実行すると、ダイアログが閉じてから処理が実行されます。
進捗ダイアログは属性でモーダルかそうでないかが選べますが、今回の使用例はモーダルで表示しています。重要なのは、時間のかかる処理を別のスレッドで実行開始してから、進捗ダイアログを表示している点です。この順番を逆にすると動きません。別のスレッドで明示的に実行するためには、スレッドアロケータかタイマーを使う必要があります。このようにすると、時間のかかる処理を実行しながら、モーダルダイアログを表示することができます。そして、時間のかかる側で進捗ダイアログの状態を更新していて、その処理が終わったら進捗ダイアログを閉じています。
進捗ダイアログの取消ボタンは、時間のかかる処理の状況とは独立に、進捗ダイアログを閉じてしまいます。何もしなければ、進捗ダイアログは閉じたけれども時間のかかる処理は別スレッドで終わるまで継続します。
進捗ダイアログを表示している側のメインのスレッドと、時間のかかる処理を実行しているスレッドは独立に動作しているので、どちらかに戻るという表現は適切ではありません。単にモーダルダイアログを表示しているとメインのスレッドが止まっていて、閉じると動くというのが正しいです。
今回は省略しましたが、進捗ダイアログの取消ボタンのアクションイベント発生では、時間のかかる処理を途中で止める処理を記述する必要があります。もちろん、進捗ダイアログの表示と時間のかかる処理のスレッドが別なので、取消ボタンを押した瞬間の別スレッドの処理の状態は多少のタイムラグがあるでしょう。それでも、例えば今回の例では繰返し処理を実行しているので、取消ボタンを押したときに繰り返し処理の現在値を取得してそれを繰り返し処理の終了値に設定すると、繰り返し処理を途中で終了することができて、別スレッドの処理を早めに終了することはできます。
このように、進捗ダイアログを使うためにはスレッドの理解が必要で、スレッドの理解はなかなか難しいので、いろいろ実験して試してみてください。
MZPlatformユーザー会サイト管理者データベースへの登録方法について、回答が漏れていたので追記します。
通常は一行ずつのSQL文を作成して実行するのが良いと思います。
MZPlatformユーザー会サイト管理者時間のかかる処理を実行中のときに、ダイアログを表示して操作をブロックするためには、時間のかかる処理を別のスレッドとして実行して、そのあとでモーダルダイアログを表示します。時間のかかる処理が終了したときにダイアログを閉じれば、画面の操作が再度可能になります。
進捗ダイアログは、上記のような使い方をしたときに、全体のどの程度まで処理が進んだかを表示することができるコンポーネントです。例えば、繰り返し処理の全体の回数を最大値として、現在値を更新すれば、進捗状況が表示されます。
つまり、使い方としてはスレッド実行と進捗ダイアログの両方の組み合わせとなりますが、適切なサンプルが配布できていないので、添付していただいたものを改変して使用例のサンプルとしました。添付の内容をご確認いただき、ご不明な点があれば再度お問い合わせください。
添付ファイル:
-
著者投稿