初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-03-28 02:22:30

KR
Member

ポータルに連続で書き込むスクリプトステップの書き方について

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

#2 2017-03-28 02:30:19

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

質問させていただいた書き方の前、つまり最初の段階では下記の様に書いており普通に作業ができました。

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

#3 2017-03-28 09:07:58

チポ
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

無限ループってどうなるのですか?

書かれたステップでは無限になり様がなさそうですが。。
このポータルのリレーションは新規レコード作成の許可をしていますよね?

Loopの中にスクリプト一時停止を入れてLoop1回ごとの状態を見てみたらいかがでしょう。


それと、、
  フィールド設定
はそのフィールドが選択されていなくても実行できますから、
  フィールド移動
は特に必要ないでしょう。

Offline

#4 2017-03-28 09:25:44

Re: ポータルに連続で書き込むスクリプトステップの書き方について

このスクリプトは
ポータルに2行追加して
その後新しいレコードを追加して
またポータルを2行

ということですか?

そういうことなら チポ さんの書かれていることに加えて
> レコード/検索条件確定 [ ダイアログなし ]  <== なくてもいいように思います
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
> End Loop

もし違うとなると
ここに書かれたスクリプトと
実際のスクリプトに違いがあるように思えるのです。
もう一度、全体を見直してはいかがかと。

書き終えてから思ったこと
> Loop
>  ポータル内の行へ移動 [ 選択 ; 最後の ]   <===
>. フィールドへ移動 [ フィールド1 ]           <===

<===をつけた2行 入れ替えてみるのもいいかも・・・

Offline

#5 2017-03-28 09:37:49

Shin
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

>   レコード/検索条件確定 [ ダイアログなし ]
>   レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
の間に、スクリプトを0.2秒程度停止させておくと改善するかもしれませんね。

loop で回してポータルを設定していくより、フィールド1、フィールド2を全置換して、関連テーブル側で親テーブルをインポートして、キーフィールドを取得、目的のフィールドを全置換で設定、を2回行った方が早くて確実かと思います。

Last edited by Shin (2017-03-28 09:44:37)

Offline

#6 2017-03-28 11:59:22

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

チポさん
ご返信ありがとうございます。

>無限ループってどうなるのですか?
>書かれたステップでは無限になり様がなさそうですが。。
正確には無限ループっぽくなる。です。一行目でずっと動かなくなります。



>このポータルのリレーションは新規レコード作成の許可をしていますよね?
>Loopの中にスクリプト一時停止を入れてLoop1回ごとの状態を見てみたらいかがでしょう。
こうすると、なぜか普通に作成できてしまうのです・・・


>  フィールド設定
>はそのフィールドが選択されていなくても実行できますから、
> フィールド移動
>は特に必要ないでしょう。


やはりそうなんですね。どっちでもできるのでどうかと思ってました。
最初のポータルに移動する分は必要で、途中にはさんであるのは(2行目以降を書くとき)は必要ない。ということでよろしかったでしょうか?


あと、すみません。
スクリプトをテキストにコピペする方法ってないんでしょうか?
質問するときにとても大変でして・・・

Offline

#7 2017-03-28 12:03:54

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

シーラカンスさん
ご返信ありがとうございます


>このスクリプトは
>ポータルに2行追加して
>その後新しいレコードを追加して
>またポータルを2行
>ということですか?

はいそうです。


> レコード/検索条件確定 [ ダイアログなし ]  <== なくてもいいように思います
> レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
> End Loop
以前作成したスクリプトをコピペで流用しているのですが、当時作成したときに確定を挟まないと、次のレコードに移動したときの処理でおかしくなったはずです。




> Loop
>  ポータル内の行へ移動 [ 選択 ; 最後の ]   <===
>. フィールドへ移動 [ フィールド1 ]           <===
<===をつけた2行 入れ替えてみるのもいいかも・・・
なるほど。
やってみます
ありがとうございます。

Last edited by KR (2017-03-28 12:05:17)

Offline

#8 2017-03-28 12:17:55

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

Shinさん
ご返信ありがとうございます


Shin wrote:

>   レコード/検索条件確定 [ ダイアログなし ]
>   レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
の間に、スクリプトを0.2秒程度停止させておくと改善するかもしれませんね。

なるほど!
デバッガだと普通に動きますので早速試してみます。


Shin wrote:

loop で回してポータルを設定していくより、フィールド1、フィールド2を全置換して、関連テーブル側で親テーブルをインポートして、キーフィールドを取得、目的のフィールドを全置換で設定、を2回行った方が早くて確実かと思います。

すみません。理解力が足りず・・・
ポータル行を4行新しく作るので、全置換だと、ポータル側のテーブルで新規にレコードを作成できないと思うのですが、間違っていますでしょうか?

Offline

#9 2017-03-28 13:36:02

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

Loop
  ポータル内の行へ移動 [ 選択 ; 最後の ]
  フィールドへ移動 [ フィールド1 ]
  フィールド設定 [ フィールド1; "AAA" ]
  フィールド設定 [ フィールド2; "BBB" ]
  ポータル内の行へ移動 [ 選択 ; 最後の ]
  フィールドへ移動 [ フィールド1 ]
  フィールド設定 [ フィールド1; "AAA" ]
  フィールド設定 [ フィールド2; "CCC" ]
  レコード/検索条件確定 [ ダイアログなし ]
  スクリプトの一時停止/続行 [ 間隔 (秒) : .2 ]
  レコード/検索条件/ページへ移動 [ 次の ; 最後まできたら終了 ]
End Loop

それぞれ修正を加えまして、上記の通りで問題なく動作致しました。
ありがとうございました。

Offline

#10 2017-03-28 15:26:53

Shin
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

オータル行を4行作るスクリプトでは無いような。(2行しか作れないはずですが)

それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0

Offline

#11 2017-03-28 20:05:20

Re: ポータルに連続で書き込むスクリプトステップの書き方について

スクリプトをコピーしたいとのことですが、
MBS plug-in を入れると、コピーできるようになりますよ。

https://www.monkeybreadsoftware.de/filemaker/

test



ここで右上にある「コピースクリプトテキスト」を押すとクリップボードにコピーされる。

# このスクリプトは 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

#12 2017-03-29 04:11:59

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

Shin wrote:

オータル行を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

#13 2017-03-29 04:15:01

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

Shin wrote:

それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0

サンプルの作成ありがとうございます。
FM14だったので開くことが出来ませんでした。
FM14でも開く方法はありますでしょうか?

Last edited by KR (2017-03-29 04:15:22)

Offline

#14 2017-03-29 04:17:06

Re: ポータルに連続で書き込むスクリプトステップの書き方について

fp7 のファイルを FileMaker のアイコンの上にドラッグ & ドロップすると fp7 から fmp12 に変換することができます。

Last edited by 通りすがりさん (2017-03-29 04:18:23)


通りすがりさんです。

Offline

#15 2017-03-29 04:47:22

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

通りすがりさん wrote:

スクリプトをコピーしたいとのことですが、
MBS plug-in を入れると、コピーできるようになりますよ。

https://www.monkeybreadsoftware.de/filemaker/

できる様になりました!
ありがとうございます!

Offline

#16 2017-03-29 04:51:06

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

通りすがりさん wrote:

fp7 のファイルを FileMaker のアイコンの上にドラッグ & ドロップすると fp7 から fmp12 に変換することができます。

ありがとうございます!
できる様になりました!

Offline

#17 2017-03-29 04:58:28

KR
Member

Re: ポータルに連続で書き込むスクリプトステップの書き方について

Shin wrote:

オータル行を4行作るスクリプトでは無いような。(2行しか作れないはずですが)

それは置いておいて、上と同じ事を行うサンプルを。
https://www.dropbox.com/s/k05yg35a6agbo … 7.zip?dl=0

スクリプトを拝見しました。完全に理解することが出来ました。
複数の学びがあり感謝です!

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.016 seconds, 9 queries executed - Memory usage: 570.7 KiB (Peak: 591.61 KiB) ]