みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
お知恵をおかしください。
sever 12 環境で win mac 混在で、FM 12 を使用してます。
やろうとしていることは、
JPEGを含むレポートをダイアログウィンドウで編集画面を表示し、
編集作業後に「キャンセル」ボタンを押したら編集前にデータを戻すということをしたいのです。
既にテキスト情報のみのレポートを扱っていて、
編集前にテキストデータをグローバル変数に格納しておき、
「キャンセル」された時、編集前後の情報を比較し、同じなら何もしないで画面を閉じ、
変更されていたら、ダイアログウィンドウをだして、ユーザー確認後、編集前にデータを戻すということをやっているのですが、
このレポートで画像を扱うことになり、
編集前と後の画像の比較ができないので、困っています。
比較保存用オブジェクトフィールドを用意して一時保存しておき、Exact()関数で比較したのですが、ダメでした。
ヘルプを読んだ限りでは埋め込みか参照だとできそうなのですが
データ量が多くなりそうなので外部保存と考えています。
何かいい方法はがあれば教えてください
よろしくお願いします。
Offline
画像そのものの編集は簡単にはできないので入れ替えということですよね。
>ヘルプを読んだ限りでは埋め込みか参照だとできそうなのですが
>データ量が多くなりそうなので外部保存と考えています。
ちょっと意味が分からないのですが、埋め込みにしていないのなら
参照保存になっているのでは?
共有しているPCで画像が見えてますか。
Offline
旅人さんありがとうございます。
画像そのものの編集は簡単にはできないので入れ替えということですよね。
はい。その通りです。
ちょっと意味が分からないのですが、埋め込みにしていないのなら
参照保存になっているのでは?
共有しているPCで画像が見えてますか。
説明が下手で申し訳ありません。
画像は見えてます。
オブジェクトを埋め込みか、参照かにすればExact()関数が使えることは確認できました。
今後運用で画像情報量によるファイルの肥大化が予想されるため、
できれば外部保存オプションに設定したいと思っています。
確認したこと
・Exact( オブジェクトフィールド(埋込) ; 比較保存用オブジェクトフィールド(埋込) ) 結果 = 1
・Exact( オブジェクトフィールド(埋込) ; 比較保存用オブジェクトフィールド(参照) ) 結果 = 0
・Exact( オブジェクトフィールド(参照) ; 比較保存用オブジェクトフィールド(参照) ) 結果 = 1
・Exact( オブジェクトフィールド(外部) ; 比較保存用オブジェクトフィールド(外部) ) 結果 = 0
・Exact( オブジェクトフィールド(外部) ; 比較保存用オブジェクトフィールド(グローバル) ) 結果 = 0
Exact関数を使わない方法を考えるしかないのでしょうか?
Offline
オブジェクト自体の比較
13 なら GetContainerAttribute ( ソースフィールド ; "MD5" )関数使ってハッシュ値比較をするのが簡単確実
他にもBase64Encode ( ソースフィールド )関数使ってBase64Encodeしたテキストを比較
12にはこれらの関数がないので、BaseElementsプラグイン http://www.goya.com.au/baseelements/plugin とか使って
Base64Encodeして結果のテキストを比較。
単純に計算式中にオブジェクトフィールドを指定しただけだと、オブジェクトのファイル名になりません?
外部保存(埋め込み)にしたいということですよね。
変更前と変更後のファイルパスを比較したらいいのでは?
でも外部保存だと入れ替えると元画像は外部保存フォルダから無くなるので
キャンセルを押しても元画像に戻せませんから、予めフィールド内容エクス
ポートしておく必要がありそうで、これの処理が面倒?
Offline
Exactはテキスト関数だけど、「オブジェクトフィールドの場合は、データが同じ方法で保存(埋め込みまたは参照で保存)されている必要があります。」と書いてある。
テキスト扱い(ファイル名)はしないようで、ファイル名が同じでも画像が違うと不一致になった。
しかしオブジェクト内容の比較なら=でいいはずなんで、Exactを使う理由はなさそう?
外部保存だとグローバルにできないので、保存用のレコードを作ればいいのかな。
そのレコードに入った時Enterトリガで
グローバル変数にその画像の外部フォルダ内のパスを変更して保存----$$変数
(Get ( テンポラリパス ) &パスの1行目のremote:を取ったもの)
現画像を$$変数先へエクスポート
ダイアログウインドウの画像フィールドを変更(埋め込み)したときのModifyトリガで
If [Get ( アクティブフィールド内容 ) ≠ $$変数]
のとき変更フィールド?を「変更済み」にフィールド設定----判りやすくするため
ダイアログウインドウの「閉じる」ボタンに
If[変更フィールド="変更済み"]
カスタムダイアログ表示 そのまま保存か戻すかのボタン
戻すを選んだら
画像フィールドに$$変数の画像をピクチャ挿入(実体埋め込み)
で行けますね。
Offline
旅人さんありがとうございます。
そのレコードに入った時Enterトリガで
グローバル変数にその画像の外部フォルダ内のパスを変更して保存----$$変数
(Get ( テンポラリパス ) &パスの1行目のremote:を取ったもの)
現画像を$$変数先へエクスポート
ダイアログウインドウの画像フィールドを変更(埋め込み)したときのModifyトリガで
If [Get ( アクティブフィールド内容 ) ≠ $$変数]
のとき変更フィールド?を「変更済み」にフィールド設定----判りやすくするため
ダイアログウインドウの「閉じる」ボタンに
If[変更フィールド="変更済み"]
カスタムダイアログ表示 そのまま保存か戻すかのボタン
戻すを選んだら
画像フィールドに$$変数の画像をピクチャ挿入(実体埋め込み)
この方法で、できそうな気がします。
ありがとうございました。
Offline
とおりすがりさんありがとうございます。
FM13だといろいろ楽にできそうえすね。
プラグインだと、クライアントが80近くあるので
それぞれにインストールするのも大変ともかんがえました。
saverさんありがとうございます。
確かにExact関数にこだわる必要も無く、何らかの形で比較できれば良いので
別の方法も考えます。
送信が入れ違いになったことを御詫び申し上げます。
Last edited by picopico (2014-12-05 10:40:21)
Offline
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 587.01 KiB (Peak: 603.91 KiB) ]