みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Mac FM14 Adv です。
いつもお世話になっております。
ポータルに連続で書き込むスクリプトステップの書き方についてですが、デバッガでステップインして確認すると問題ないのですが、通常で起動すると無限ループしてしまいます。スクリプトステップの間違っている部分を教えてください。
Loop
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールドへ移動 [ フィールド2 ]
フィールド設定 [ フィールド2; "BBB" ]
レコード/検索条件確定 [ ダイアログなし ]
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "CCC" ]
フィールドへ移動 [ フィールド2 ]
フィールド設定 [ フィールド2; "DDD" ]
レコード/検索条件確定 [ ダイアログなし ]
レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
End Loop
Last edited by KR (2017-03-28 02:25:59)
Offline
質問させていただいた書き方の前、つまり最初の段階では下記の様に書いており普通に作業ができました。
Loop
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールドへ移動 [ フィールド2 ]
フィールド設定 [ フィールド2; "BBB" ]
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "CCC" ]
フィールドへ移動 [ フィールド2 ]
フィールド設定 [ フィールド2; "DDD" ]
レコード/検索条件確定 [ ダイアログなし ]
レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
End Loop
(レコード/検索条件確定) は最後だけです。このスクリプトで6000行程度処理して全く問題なかったのですが、違う作業でスクリプトを流用した際になぜか正しく処理ができなくなりました。具体的には書き込む予定のフィールドに正しく書き込めない。です。
理由がわかりませんでしたが、修正の必要がありそうだったので、(レコード/検索条件確定) を間に挟んだところ無限ループする様になりました。
Last edited by KR (2017-03-28 02:31:02)
Offline
無限ループってどうなるのですか?
書かれたステップでは無限になり様がなさそうですが。。
このポータルのリレーションは新規レコード作成の許可をしていますよね?
Loopの中にスクリプト一時停止を入れてLoop1回ごとの状態を見てみたらいかがでしょう。
それと、、
フィールド設定
はそのフィールドが選択されていなくても実行できますから、
フィールド移動
は特に必要ないでしょう。
Offline
このスクリプトは
ポータルに2行追加して
その後新しいレコードを追加して
またポータルを2行
ということですか?
そういうことなら チポ さんの書かれていることに加えて
> レコード/検索条件確定 [ ダイアログなし ] <== なくてもいいように思います
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
> End Loop
もし違うとなると
ここに書かれたスクリプトと
実際のスクリプトに違いがあるように思えるのです。
もう一度、全体を見直してはいかがかと。
書き終えてから思ったこと
> Loop
> ポータル内の行へ移動 [ 選択 ; 最後の ] <===
>. フィールドへ移動 [ フィールド1 ] <===
<===をつけた2行 入れ替えてみるのもいいかも・・・
Offline
> レコード/検索条件確定 [ ダイアログなし ]
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
の間に、スクリプトを0.2秒程度停止させておくと改善するかもしれませんね。
loop で回してポータルを設定していくより、フィールド1、フィールド2を全置換して、関連テーブル側で親テーブルをインポートして、キーフィールドを取得、目的のフィールドを全置換で設定、を2回行った方が早くて確実かと思います。
Last edited by Shin (2017-03-28 09:44:37)
Offline
チポさん
ご返信ありがとうございます。
>無限ループってどうなるのですか?
>書かれたステップでは無限になり様がなさそうですが。。
正確には無限ループっぽくなる。です。一行目でずっと動かなくなります。
>このポータルのリレーションは新規レコード作成の許可をしていますよね?
>Loopの中にスクリプト一時停止を入れてLoop1回ごとの状態を見てみたらいかがでしょう。
こうすると、なぜか普通に作成できてしまうのです・・・
> フィールド設定
>はそのフィールドが選択されていなくても実行できますから、
> フィールド移動
>は特に必要ないでしょう。
やはりそうなんですね。どっちでもできるのでどうかと思ってました。
最初のポータルに移動する分は必要で、途中にはさんであるのは(2行目以降を書くとき)は必要ない。ということでよろしかったでしょうか?
あと、すみません。
スクリプトをテキストにコピペする方法ってないんでしょうか?
質問するときにとても大変でして・・・
Offline
シーラカンスさん
ご返信ありがとうございます
>このスクリプトは
>ポータルに2行追加して
>その後新しいレコードを追加して
>またポータルを2行
>ということですか?
はいそうです。
> レコード/検索条件確定 [ ダイアログなし ] <== なくてもいいように思います
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
> End Loop
以前作成したスクリプトをコピペで流用しているのですが、当時作成したときに確定を挟まないと、次のレコードに移動したときの処理でおかしくなったはずです。
> Loop
> ポータル内の行へ移動 [ 選択 ; 最後の ] <===
>. フィールドへ移動 [ フィールド1 ] <===
<===をつけた2行 入れ替えてみるのもいいかも・・・
なるほど。
やってみます
ありがとうございます。
Last edited by KR (2017-03-28 12:05:17)
Offline
Shinさん
ご返信ありがとうございます
> レコード/検索条件確定 [ ダイアログなし ]
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
の間に、スクリプトを0.2秒程度停止させておくと改善するかもしれませんね。
なるほど!
デバッガだと普通に動きますので早速試してみます。
loop で回してポータルを設定していくより、フィールド1、フィールド2を全置換して、関連テーブル側で親テーブルをインポートして、キーフィールドを取得、目的のフィールドを全置換で設定、を2回行った方が早くて確実かと思います。
すみません。理解力が足りず・・・
ポータル行を4行新しく作るので、全置換だと、ポータル側のテーブルで新規にレコードを作成できないと思うのですが、間違っていますでしょうか?
Offline
Loop
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "BBB" ]
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "CCC" ]
レコード/検索条件確定 [ ダイアログなし ]
スクリプトの一時停止/続行 [ 間隔 (秒) : .2 ]
レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
End Loop
それぞれ修正を加えまして、上記の通りで問題なく動作致しました。
ありがとうございました。
Offline
オータル行を4行作るスクリプトでは無いような。(2行しか作れないはずですが)
それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0
Offline
スクリプトをコピーしたいとのことですが、
MBS plug-in を入れると、コピーできるようになりますよ。
https://www.monkeybreadsoftware.de/filemaker/
ここで右上にある「コピースクリプトテキスト」を押すとクリップボードにコピーされる。
↓
# このスクリプトは OnFirstWindowOpen トリガによって実行されます。ファイルオプション > スクリプトトリガに移動
# 現在実行中のプラットフォームを選択して適切なレイアウトに移動
# 1 = Mac
# 2 = Windows
# 3 = iPad
# 4 = iPhone
# 5 = Android
If [ Get ( デバイス ) = 1 or Get ( デバイス ) = 2 ]
レイアウト切り替え [ 「連絡先詳細」 ]
Else If [ Get ( デバイス ) = 3 ]
レイアウト切り替え [ 「連絡先詳細 | タブレット」 ]
Else If [ Get ( デバイス ) = 4 ]
レイアウト切り替え [ 「連絡先詳細 | 電話」 ]
Else If [ Get ( デバイス ) = 5 ]
If [ Get ( ウインドウ幅 ) + Get ( ウインドウ高さ ) > 1042 ]
レイアウト切り替え [ 「連絡先詳細 | タブレット」 ]
Else
レイアウト切り替え [ 「連絡先詳細 | 電話」 ]
End If
End If
# ズームレベルを 100% に設定して後続の変更をロック
ズームの設定 [ ロック ; 100% ]
# レコードが見つからない場合
If [ Get ( 対象レコード数 ) = 0 ]
新規レコード/検索条件
End If
Last edited by 通りすがりさん (2017-03-28 20:08:16)
通りすがりさんです。
Offline
オータル行を4行作るスクリプトでは無いような。(2行しか作れないはずですが)
それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0
すみません・・・
Loop
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "BBB" ]
ポータル内の行へ移動 [ 選択 ; 最後の ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "CCC" ]
レコード/検索条件確定 [ ダイアログなし ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "DDD" ]
レコード/検索条件確定 [ ダイアログなし ]
フィールドへ移動 [ フィールド1 ]
フィールド設定 [ フィールド1; "AAA" ]
フィールド設定 [ フィールド2; "EEE" ]
レコード/検索条件確定 [ ダイアログなし ]
スクリプトの一時停止/続行 [ 間隔 (秒) : .2 ]
レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
End Loop
Offline
それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0
サンプルの作成ありがとうございます。
FM14だったので開くことが出来ませんでした。
FM14でも開く方法はありますでしょうか?
Last edited by KR (2017-03-29 04:15:22)
Offline
fp7 のファイルを FileMaker のアイコンの上にドラッグ & ドロップすると fp7 から fmp12 に変換することができます。
Last edited by 通りすがりさん (2017-03-29 04:18:23)
通りすがりさんです。
Offline
スクリプトをコピーしたいとのことですが、
MBS plug-in を入れると、コピーできるようになりますよ。
できる様になりました!
ありがとうございます!
Offline
fp7 のファイルを FileMaker のアイコンの上にドラッグ & ドロップすると fp7 から fmp12 に変換することができます。
ありがとうございます!
できる様になりました!
Offline
オータル行を4行作るスクリプトでは無いような。(2行しか作れないはずですが)
それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0
スクリプトを拝見しました。完全に理解することが出来ました。
複数の学びがあり感謝です!
Offline
Pages: 1
[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 576.56 KiB (Peak: 597.47 KiB) ]