フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
ファイルをお送りいただき有難うございます。
色々とご面倒をお掛けいたしまして、申し訳ございませんでした。ApachePOIが危険ファイルとして検出するファイル圧縮率の基準値をMZで設定できるように改修いたしましたので、以下をお試しください。
ーーーーーーーーーーーーーーーーーーーーーーーーーーー
1)添付の「pfexcelaccs.jar」をMZPlatform\4.0\jarsフォルダに入れます。
2)MZPlatform\4.0\etcフォルダ内の『PlatformClassPath.ini』をメモ帳などで開き、パスを追加記述し、保存します。
例えば以下のような内容になります。
——————————
# MZ Platform ClassPath
jars/pfexcelaccs.jar
jars/mzextension.jar
jars/mzplatform.jar
・・・・
——————————
3)アプリケーションビルダーを再び立ち上げてください。4)EXCELファイル読み込みのアプリケーションファイルに新規メソッド「setMinInflateRatio(Double)」の処理を設定します。
アプリケーション開始時、あるいは適当なタイミングで上記メソッドを行う処理を設定し、引数にデフォルト値の「0.01」よりも小さい数値を設定します。セキュリティ上心配のないファイルのみを読み込むことが確実なら設定値は「0」でも可です。5)アプリケーションを実行してMinInflateRatioの設定が行われた後、アプリケーションファイルを保存します。一旦数値を設定した後は、設定値がアプリケーションファイル内に保存されるので、毎回処理を行う必要はありません。エクセルファイルの読み込みを行い、エラーが発生しないことを確認したら、「起動しない」モードに変更または処理を削除してしまっても結構です。
以上お試しいただき、状況が改善されない場合は、お手数ですが再度ご連絡頂ければ幸いです。
よろしくお願い申し上げます。- この返信は4ヶ月、 2週前にMZPlatformユーザー会が編集しました。
添付ファイル:
MZPlatformユーザー会キーマスター解決までお時間を頂いており、申し訳ございません。
差し支えの無い範囲で結構ですので、元の雛形ファイル、数式などを設定してエクセルファイルアクセスで保存したファイル、それを一度開いて保存し直したファイルの3つをお送りいただけないでしょうか。機密情報が含まれている場合は、無理にお送りいただかなくても構いません。
[エクセルファイルアクセス]でファイル作成時にファイルの圧縮率が高くなってしまう要因が発見できればと考えております。大変お手数をお掛けいたしますが、どうぞよろしくお願い申し上げます。
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
取り急ぎエラーメッセージの意味するところをご連絡いたします。
xlsx形式のエクセルファイルは、xmlファイルがZIP圧縮されたものとなります。
[エクセルファイルアクセス]で使用しているApachePOIでは、ファイルの圧縮率が基準値(1%)以上に大きいと、お知らせいただいたエラーが発生するようです。
圧縮率の高い小さいサイズのファイルを展開すると大きなファイルサイズとなり、メモリーなどに影響をあたえるため、セキュリティリスクに対する備えとしてこのような仕様になっています。改善方法については検討いたしますので、今少しお時間を頂ければ幸いです。
よろしくお願い申し上げます。MZPlatformユーザー会キーマスターいつもお世話になっております。
お問い合わせありがとうございます。
[テーブルサブセットフィルター]にテーブルデータを設定し、メソッド「列データの文字列で行を選択する(String)」を実行します。引数0には検索したい文字列、引数1にテーブル列番号を設定します。
実行すると、該当する行が選択され、メソッド「選択対象行を取得する()」で選択行位置番号のリストが取得されます。メソッド「選択データを取得する()」の方では、選択された行のみのテーブル型データが取得されます。上記メソッドであいまい検索と同様の動きになりますが、もし条件を詳細に指定したい場合は、メソッド「列データの正規表現で行を選択する(String)」もお試しください。
動作確認のため、簡単なサンプルファイルを添付いたしますので、参考になれば幸いです。
*他のトピックへのご返信の形となっていたので、トピックを分割しました。
添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
MZ内で[パスワード入力フィールド]に入力した文字列が有効なパスワードと合っているか判定し、ダイアログを表示することは可能です。
[文字列格納変数]のメソッド「matches(String)」で変数に設定されている文字列と引数に設定した文字列とが一致するかどうか判定することができます。
true/falseのboolean値が返るので、[等価演算(=)]に設定し判定し、イベント番号で条件分けを行います。
動作確認のため、簡単なサンプルファイルを作成しましたので、ご参考になれば幸いです。ただし、ユーザーがローダーでなく、アプリケーションビルダーを使用し編集作業を行うことができるのであれば、特定のユーザーのみが編集できるという状況には当たらなくなってしまいます。
アプリケーションあるいは複合コンポーネントにパスワードを設定する場合はバイナリファイル形式(拡張子.mzas)で保存する必要があります。バイナリファイルはMZ Platformのバージョンアップの際には、Javaのバージョンに合わせて変換する等の作業が必要になります。
MZ Platformではなく、MySQLにユーザーとパスワードの追加を行い、それぞれユーザー権限を設定することも考えられますが、画面を分けるという意図からはずれるかもしれません。
ご検討頂き、ご不明な点、ご要望等ございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
チェックボックスの項目数の変更が頻繁に起こるのであれば、終了時にチェックボックスの項目を削除してしまい、起動時に[テーブル]の行数に合わせて項目を追加することが考えられます。
このとき使用するメソッドは「指定位置へ項目を追加する(int)」、「指定位置の項目を削除する(int)」です。
ただし、チェックボックスの0番目の項目は削除できませんので、注意が必要です。
添付のファイルでは追加、削除とも[繰り返し制御(FOR)]で行っていますが、0番目の項目の追加や削除を行わないので、引数や処理が少しだけ複雑になっています。ファイルをご覧いただき、ご不明な点、ご要望等ございましたら、どうぞ再度ご連絡いただければ幸いです。よろしくお願い申し上げます。
添付ファイル:
MZPlatformユーザー会キーマスターご連絡ありがとうございます。
質問がございます。
[繰り返し制御(FOR)]のメソッド「繰り返し処理を実行する」の「終了値」および「終了値を含めるかどうか」の設定はどのようになっているでしょうか。例えば3つの項目がある場合、開始値を固定値「0」とし開始値を含めるかどうかを「true」、終了値は[チェックボックスグループ]の「項目数を取得」し、終了値は含めないように「false」とすると、位置番号「0,1,2」のチェックボックスの項目について繰り返し処理を行えることになります。位置番号は0から始まるので、項目数と位置番号は値が違います。
終了値を含めるかの設定をするためには、メソッド「繰り返し処理を実行する(int,boolean,int,boolean,int)」は5つ引数欄があるものをご使用ください。
繰り返し処理を行う都度項目数を取得するので、直前までの項目数の増減に対応します。
もし上記設定でもエラーとなるとすると、繰り返し処理のタイミングが適切でない、別なコンポーネントの項目数を誤って取得している等が考えられるかと思います。上記ご確認いただいても改善しない場合は、お手数ですが再度ご連絡いただければ幸いです。
よろしくお願い申し上げます。MZPlatformユーザー会キーマスターご連絡ありがとうございます。
個人的な意見になりますが、IDが一意に管理できるなら無理にauto_increment設定にする必要は無いですし、IDの代わりに他に一意になるデータ(例:社員番号、電話番号、データ追加日時)があれば、それを主キー列として扱うことも考えられるかと存じます。
金型履歴の複合コンポーネントが流用できるようでしたら、少し改修の必要も生じるかと思いますので、どうぞ今後とも疑問の点はご連絡いただければ幸いです。
MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
「金型履歴管理システム」のテーブルに基づいて回答いたします。「金型履歴管理システム」内のテーブルには必ず「id」列があり、「auto_increment」属性を設定して自動的に現在カラムに格納されている最大の値に「1」を加算した値を格納しています。任意の値を設定することは可能ですが、通常はデータ追加時に「id」の値を指定せず自動的に連続して設定されるようにします。
MZの処理の中では、検索結果テーブルの「id」列は削除し、表示していません。
新規データ追加の際も「id」値の指定は不要なので、欄を表示していません。また、「auto_increment」値は再利用はしませんので、もしこの「id」値を手掛かりにしたい場合は一旦データベーステーブルのデータを削除して、またテーブル全行を追加する形になるかと思います。全て新規のidになります。
さらに、select文で取得されるデータの並び順は、順番を明示的に指定しない限り、担保されていません。ですので、理論的にはテーブルデータの行の並べ替えを行っても、その順番でテーブル行が取得されることは保証されません。
以上のことから、データベース内のテーブルデータはそのままで、Select文にORDER BY句などで条件を付けてデータ取得することが考えられます。
元々社員番号や製品番号などの一意のデータがテーブル内にあれば、その列をキーに順番を指定できるかと思います。しかし、キーになるデータがなかったり、ランダムに並べ替えたいという場合は、データベース内のテーブルに並べ替え用の番号の列を追加する必要があります。MZ上では『開発チュートリアル(活用編)』にあるように、[テーブル]の選択行を移動させることは比較的簡単にできますが、移動した後の番号の振り直しの処理と、並べ替え用の番号のデータベースへのUpdateの処理を考える必要があります。
以上、まずはデータ取得時の並べ替えをご検討ください。
例えば[作業者マスタ]複合コンポーネント内の[ファンクション(ID:4-1-25 一覧取得)]の接続先処理に、メソッド「SQL実行:自動接続、切断」を行う[MySQL IF(ID:4-1-1-)]複合コンポーネントがあります。この引数の最後の部分「order bystaff
.id
;」のところを「 order bystaff
.number
;」に変更し、マスタ管理ダイアログで表示すると社員番号による並び変え指定が確認できます。「金型履歴管理システム」のマスター表示では[ツリー]と、各マスター用の[複合コンポーネント]を使用していることでかなり複雑になっているので、お手元のデータに適用する場合はもう少し簡略にすることも可能ではあるかと存じます。
ご不明な点。ご要望等ございましたら、どうぞ再度ご連絡ください。
よろしくお願い申し上げます。MZPlatformユーザー会キーマスターお問い合わせありがとうございます。
申し訳ございませんが[CSV出力]コンポーネントにはファイルの上書き確認をする機能はございません。例えば[ファイル]コンポーネントも追加し、保存前に保存ファイル名を[ファイル]に設定し、「ファイルが存在するかどうかを取得」します。
trueまたはflaseの結果が取得されるので、[等価演算(=)]で演算し、ファイルが存在するtrueの時は[確認ダイアログ]等を出して上書きしてよいか確認するなどの条件分けが必要になるかと思います。ご不便をお掛けいたしますが、どうぞよろしくお願い申し上げます。
ご不明な点がございましたら、再度ご連絡いただければ幸いです。 -
投稿者投稿