みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
事務所A
WIN2008R2 FM13ser
Win7 FM13adv
事務所B
Win7 FM13pro
この事務所間をYAMAHA NVR500にて拠点間VPNを構築しています。
これにより事務所Aのサーバーホストと事務所BのFM13はリレーションシップを組むことができました。
ただ、あまりうまくいっていません。
内容としては事務所Aで依頼フラグの意味で「1」をフィールドに。
事務所Bはグローバルフィールドの「1」とリレーションによって事務所Aの「1」をカウント。
「○○件の依頼がきていますので取り込みを行ってください」というメッセージになる計算フィールドを配置
取り込みボタンを押せば関連レコードをインポート
インポート後は事務所Aの「1」を「2」に書き換える動作を事務所Bからインポートの次のステップで行う。
関連レコードのカウントはゼロ、となり「未確認の依頼はありません」という計算フィールドのメッセージとなる。
問題1
取込を押した時に未確認の依頼を認知できておらず?事務所Aのレコードを全てインポートしてしまう。
事務所Bは関連レコードのカウントがゼロの時は取り込みボタンを押してもエラーになるがゼロではないという認識の時に全てインポートになってしまう(最終エラー等無)
問題2
バックグラウンドのような扱いで開いているので事務所Bは事務所AのIPアドレスがわからなければ大丈夫と思い試験運用していましたが。
事務所B側でいきなり事務所Aへのログイン画面が出てきてしまいました。
もちろん自動でお互いのファイルを開くために同じアカウントを用意しているので「OK」を押せば事務所Aのファイルを開くことができました。
事務所Bが事務所Aのファイルを開けるのは非常にまずいです。
上記ふたつの問題は何時間かぶりに操作を開始した時によくおこります。
なのでお互いのソフト、事務所Aのサーバー全て、アイドル時の接続解除は「オフ」にしました。
ですが改善がみられません。
アドバイス頂ければ幸いです。
よろしくお願いします。
Offline
根本的に勘違いしてるようですが、
事務所Bが事務所Aのファイルを開け
ないと、インポートもできません。
「リレーションによって事務所Aの「1」をカウント」してる時点ですでにファイルを開いています。
根本的に勘違いしてるようですが、
事務所Bが事務所Aのファイルを開け
ないと、インポートもできません。
「リレーションによって事務所Aの「1」をカウント」してる時点ですでにファイルを開いています。
それは理解しています。
開けない、ではなくインポート以外の閲覧など全てできなくしたいのです。
カウントしている時点で開いているのは同じアカウントが相互にあれば開けますよね、
それは内部的に開いているだけでウィンドウは表示されませんよね?
事務所Bからすれば共有画面を開くところにはでてきませんし
IPアドレスを知りえないと任意で開くことはできません。
それでよかったのにいきなりログイン画面がでてきて開いてしまったんです。
ということは接続が切れた、ということですよね?
事務所Aのはファイルメーカーサーバーで基本的に開いたままなのに
何故接続が切れてしまうのか、というところです。
Offline
同じアカウントを使っている限り、閲覧を不可能にするのは無理でしょう。B のアカウントでは、ファイルAの全てのレイアウトへのアクセスを禁止しておけばいいかも。
インポートについて、全レコードを取り込むのは、該当がゼロの時では。取り込みボタンの中身を教えてください。
関連レコードへ移動
If ( Get ( 最終エラー ) )
現在のスクリプト終了
else
レコードインポート
フラグフィールドの処理
else if
の様な処理がいいかも
Offline
同じアカウントを使っている限り、閲覧を不可能にするのは無理でしょう。B のアカウントでは、ファイルAの全てのレイアウトへのアクセスを禁止しておけばいいかも。
インポートについて、全レコードを取り込むのは、該当がゼロの時では。取り込みボタンの中身を教えてください。
関連レコードへ移動
If ( Get ( 最終エラー ) )
現在のスクリプト終了
else
レコードインポート
フラグフィールドの処理
else if
の様な処理がいいかも
ありがとうございます。
レイアウトのアクセス権を失ってもインポートは可能ですか?
できれば該当のアカウントの場合は開くスクリプトの分岐でウィンドウは開かないというような処理ができれば最高なんですが。。。
ボタンの中身ですがshinさんの記述と同じです。
確かに最終エラーの時、スクリプトは終了します。
しかし全件取り込みになってしまう時、デバッガで見てもエラーが残ってないのでそのままスクリプトが進んでしまっています。
Offline
それは内部的に開いているだけでウィンドウは表示されません
ウィンドウ>ウィンドウを表示 のメニューに表示されてます。メニューをカスタマイズすれば隠せるか?
「IPアドレスを知りえない」なんていう、ありそうもないことに依存したセキュリティは疑問です。
レイアウトにアクセス権がないと、関連レコードに移動できませんね。
714 入力したパスワードでは設定されている権限が不足しているためこの操作は認められていません
インポート用のレイアウトを作って必要なフィールドだけ配置して、関連レコードへ移動時に指定すればいいのでは。
それは内部的に開いているだけでウィンドウは表示されません
ウィンドウ>ウィンドウを表示 のメニューに表示されてます。メニューをカスタマイズすれば隠せるか?
「IPアドレスを知りえない」なんていう、ありそうもないことに依存したセキュリティは疑問です。
レイアウトにアクセス権がないと、関連レコードに移動できませんね。
714 入力したパスワードでは設定されている権限が不足しているためこの操作は認められていません
インポート用のレイアウトを作って必要なフィールドだけ配置して、関連レコードへ移動時に指定すればいいのでは。
ありがとうございます。
表示メニューに表示されるんですか?されないと思ってました。。
その疑問は関係ありませんね。
閲覧されてもいいレイアウトを作ってそこに関連レコードで移動、試してみます。
まぁ最大の疑問はエラーも起きずに全件インポートになる点ですが・・・
Offline
スクリプトは、全く同じ? そのままだと、必ずエラーが出れば終了しますよ。
全件のインポートは、関連レコードへ移動が失敗しているからです。そのエラー取得が出来ていない為だと思います。
Offline
スクリプトは、全く同じ? そのままだと、必ずエラーが出れば終了しますよ。
全件のインポートは、関連レコードへ移動が失敗しているからです。そのエラー取得が出来ていない為だと思います。
カスタムダイアログを表示["データの取り込みを行います";"よろしいですか?"]
IF[Get(最終メッセージ選択)=1]
関連レコードへ移動[関連レコードのみを表示;テーブル:「事務所A取り込みテーブル」;外部;使用するレイアウト:「レイアウト1」;新規ウィンドウ]
IF[Get(最終エラー)]
カスタムダイアログを表示["該当がありません";"キャンセルします"]
現在のスクリプト終了
Else
インポート
置き換え
ウィンドウを閉じる[名前:"受注未確認"]
End If
If[Get(最終メッセージ選択)=2]
現在のスクリプト終了[]
End If
End If
私が見比べる限り一緒です。
でもエラーは起きません・・・
Offline
関連レコードへ移動で表示しているレイアウトのTOとインポート元に指定しているTOが違うのでは?
ファイルA テーブルA フラグフィールドがあり39レコードのみ1
ファイルB テーブルB グローバル格納のフィールドがあり値は1
フラグフィールドとグローバル格納のフィールドをリレーション
ファイルBからファイルAのTOに対して関連レコード移動を行い、
外部レイアウトとしてファイルAのテーブルAのレイアウトを指定する。
これでインポートすると39レコードのみインポートされますね。
エラーは出ません。
やりたいことは合ってます?
Offline
全件入るのとは別の話だけど、ヘルプに
関連レコードがない場合や、アクティブなポータル内の行にレコードがない場合は、スクリプトが予想外の結果を生成することがあります。[関連レコードへ移動] を使用する前に、IsEmpty 関数を使用して、関連レコードがないことを確認してください。
とあるから、レコードなしの件は、移動する前にチェックした方が安全。
関連レコードへ移動で表示しているレイアウトのTOとインポート元に指定しているTOが違うのでは?
ファイルA テーブルA フラグフィールドがあり39レコードのみ1
ファイルB テーブルB グローバル格納のフィールドがあり値は1
フラグフィールドとグローバル格納のフィールドをリレーションファイルBからファイルAのTOに対して関連レコード移動を行い、
外部レイアウトとしてファイルAのテーブルAのレイアウトを指定する。これでインポートすると39レコードのみインポートされますね。
エラーは出ません。やりたいことは合ってます?
ありがとうございます。
やりたいことは全くその通りです。
ただレイアウトの意味がちょっとわからないのですが・・・
関連レコードを表示する際はレイアウトを指定できますが
インポートの際はレイアウトではなくテーブルの指定ですよね。
もう少し砕いて頂けると助かります。
Offline
全件入るのとは別の話だけど、ヘルプに
関連レコードがない場合や、アクティブなポータル内の行にレコードがない場合は、スクリプトが予想外の結果を生成することがあります。[関連レコードへ移動] を使用する前に、IsEmpty 関数を使用して、関連レコードがないことを確認してください。
とあるから、レコードなしの件は、移動する前にチェックした方が安全。
なるほど、、、つまり予想外の動きということですね・・・
でもそのIsEmpty関数で関連レコードがないのあることになっている状態なのでうまくいきますかね。。
補足
事務所B
パソコン2台
パソコンA
未確認メッセージがあったため取り込みボタンを押す。
無事に取り込む。
この後です、、、、、
パソコンBは未確認メッセージがある状態のままです。
ウィンドウ内容の再表示をしても何も変わりません。
現段階で
パソコンA⇒未確認無し
パソコンB⇒〇件あります
という別々の状態が生まれます。
ここでパソコンBが取り込みボタンを押すと全件インポートが始まります。
これが最大の原因のような気もしますしこのままではパソコンBではIsEmptyを評価しても有という結果になるんです。
Offline
関連レコードの置換をしたら、「ウィンドウ内容の再表示(キャッシュを破棄)」で更新します。
関連レコードの置換をしたら、「ウィンドウ内容の再表示(キャッシュを破棄)」で更新します。
関連レコードを表示しているレイアウト上で置き換え後にウィンドウ内容の再表示を行うということですか??
その再表示って何か変わるんでしょうか・・・
Offline
「置き換え」って書いてるのがフィールド内容の全置換ですよね。
これは関連レコードの新規ウィンドウ、つまりAの側で実行してますから、Bの側の関連レコード数に影響しません。Bで関連レコードを再取得する必要があります。
ファイルB テーブルB グローバル格納のフィールドがあり値は1
これを(一旦別の値にして?)設定し直すとかでもいいと思いますが
「置き換え」って書いてるのがフィールド内容の全置換ですよね。
これは関連レコードの新規ウィンドウ、つまりAの側で実行してますから、Bの側の関連レコード数に影響しません。Bで関連レコードを再取得する必要があります。ファイルB テーブルB グローバル格納のフィールドがあり値は1
これを(一旦別の値にして?)設定し直すとかでもいいと思いますが
ありがとうございます。
なるほど、ウィンドウ内容を再表示することによってB側のレコード数が再カウントされるわけですね。
私のステップ置き換え後にすぐにレイアウト切り替えとなっていますので
この間に再表示を入れてあげればいいでしょうか。。。
B側の関連レコードをカウントしているレイアウト上で再表示を行えば再計算されるとばかり思っていました。。
Offline
ただレイアウトの意味がちょっとわからないのですが・・・
関連レコードを表示する際はレイアウトを指定できますが
インポートの際はレイアウトではなくテーブルの指定ですよね。
関連レコードへ移動を行った際に関連レコードはファイルAのレイアウトを使って表示していますよね?
レイアウトにはテーブル(実際はTOですが)を割り当ててあるはずで、
インポートで指定するテーブルとレイアウトに割り当てたテーブルが異なっていたら
せっかく関連レコードへ移動でレコードを絞っても意味がありません。
また、Layouterさんとのやり取りを見ていて思ったのですが、
テーブルBのグローバル格納のフィールドに1を設定するのはどのタイミングなのですか?
書いて頂いているスクリプトがスクリプトのすべてだとしたら、
関連レコードへ移動の前に IsEmpty なり Count なりで関連レコードの有無は取得できると思いますよ。
テーブルの定義とリレーション構造やスクリプトの全体像と詳細が抜けたままでは
せっかくの皆さまのアドバイスが見当違いになる可能性があります。
Offline
ただレイアウトの意味がちょっとわからないのですが・・・
関連レコードを表示する際はレイアウトを指定できますが
インポートの際はレイアウトではなくテーブルの指定ですよね。関連レコードへ移動を行った際に関連レコードはファイルAのレイアウトを使って表示していますよね?
レイアウトにはテーブル(実際はTOですが)を割り当ててあるはずで、
インポートで指定するテーブルとレイアウトに割り当てたテーブルが異なっていたら
せっかく関連レコードへ移動でレコードを絞っても意味がありません。また、Layouterさんとのやり取りを見ていて思ったのですが、
テーブルBのグローバル格納のフィールドに1を設定するのはどのタイミングなのですか?書いて頂いているスクリプトがスクリプトのすべてだとしたら、
関連レコードへ移動の前に IsEmpty なり Count なりで関連レコードの有無は取得できると思いますよ。テーブルの定義とリレーション構造やスクリプトの全体像と詳細が抜けたままでは
せっかくの皆さまのアドバイスが見当違いになる可能性があります。
Mozさまありがとうございます。
関連レコードの件、意味がわかりました。少し検証してみます。
あとテーブルBのグローバル格納ですが予め1は入っていましてタイミングはありません。
ずっと1は入っています。
関連レコードの取得の有無は前述したようにパソコンによって結果が異なっていることがうまくいっていない原因かと思っています。
デバッガでもエラーが残らないの少々困っておりますが・・・
ちなみにサーバー側事務所にあたるAのクライアントパソコンである私のパソコンから
Bの共有ファイルを開き取り込みボタンを押す時は一回もうまくいかなかったことがありません。
Offline
ファイルがそれぞれ違う場所にある、という事ですか。運用としてお勧めできませんね。
無理矢理運用するとして、外部データソースへのパスの書き方が簡易的な書き方なために、他のクライアントからは誤って認識されている可能性があります。
Offline
ファイルがそれぞれ違う場所にある、という事ですか。運用としてお勧めできませんね。
無理矢理運用するとして、外部データソースへのパスの書き方が簡易的な書き方なために、他のクライアントからは誤って認識されている可能性があります。
Shinさま
違う場所ですか?
事務所AとBにファイルがあるのはごくごくあり得る話ではないでしょうか。
その誤って認識されているのは致し方ないことですかね。。
Offline
状況を変えました。
ファイルAもBもサーバーに入れて運営しています。
なので事務所BからはVPN先の事務所AにあるサーバーにアップロードされたファイルBを開くようにしています。
アイパッドで取り込みを行うとインポートの前にファイルAを開くログインダイアログがでてしまいます。
サーバーはアクセス権のあるファイルのみ表示にしていて
AにもBにもアクセス権はあります。
このダイアログがなぜでるのかわかりませんし
何回やってもログインできません。(ログイン情報はあっている)
しかもこの検証をしている中でファイルBからAにリレーションしているファイルAが
欠落しています。
という状態にリレーションシップ上でなりました。
再度データベースを指定したらできましたがなぜなったのか不明です。
どなたかアドバイスもらえますでしょうか。
Offline
サーバーにアップロードされたファイルB
で、ファイル参照を直してなかったのでは?
サーバーにアップロードされたファイルB
で、ファイル参照を直してなかったのでは?
ありがとうございます。
参照は設定しなおしてあります。
ただひたすらGOではログイン画面がでてきてしまいます・・・
Offline
読み返してみたら、最初に「何時間かぶりに操作を開始した時によくおこります」て書いてますよね。
Goの場合拡張アクセス権の設定で、一定時間がたつと既に開いてたファイルでも再ログインが必要になるのがデフォルト設定ですが、変えてますか?
fmreauthenticate10「スリープ/バックグラウンドで指定した時間を経過した場合再認証を要求する 」
最初に開くときは関係ないはずだけど。
[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 610.8 KiB (Peak: 647.34 KiB) ]