みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
使用環境はmac os10.6、filemaker12 advanceです
ポータルにリレーションによるデータが、「フィールドA」「フィールドB」「フィールドC」と表示される状態で、複数行(リレーションで該当する複数データ)あります。
filemakerのポータルで表示されているデータを、applescriptを使用してInDesignのドキュメントに流し込む作業をしたいのですが、ポータル1行目にあるデータは、applescriptで「cell "リレーション先のテーブル::フィールドA"」「cell "リレーション先のテーブル::フィールドB"」「cell "リレーション先のテーブル::フィールドC"」と言った設定で、filemaker上のデータは取得できます。
しかし、ポータルで表示されている2行目、3行目にある「フィールドA」「フィールドB」「フィールドC」のデータは、2行目以降は1行目のようではデータは取得できません。どのようにすれば取得できるのでしょうか?
よろしくお願いします。
Offline
AS、全然知りませんが
関連フィールドに改行が無ければ、それを計算フィールドでListしたら
2行目は
set x to cell "リスト" of current record
set y to paragraph 2 of x
なら簡単?
計算フィールドが関連フィールドの数だけ要るけど・・・
Offline
旅人さま、お答えありがとうございます。なるほど、「改行なし」であればそう言う方法もあったのですね。
「改行あり」なら方法はないのでしょうか?
たとえばポータルに表示されてる各レコード、元テーブルのレコードに移動して一旦移動して取得することはできるのだろうか?
Offline
Listする前に改行を特殊な文字にSubstituteしておいて
あとでASで改行に戻す。とか
Offline
recordで取ればポータルフィールドは配列で返ります。
set rec to current record
set portal_field to item 1 of rec
repeat with x in portal_field
-- 何かする
end repeat
Offline
yayaさんにお任せ・・・m(_ _)m
Offline
旅人さま、「改行」を一旦別に変換しておいてと言う手ありましたね。
Offline
yayaさま、なかなかいい感じかもしれませんね。
ひとつ疑問ですがcurrent recordとすると全てを拾っちゃうのでは?
ポータル部分だけのレコードだけ拾うには「current recordのポータル部分」って感じで指定できるのでしょうか
Offline
current recordで全部拾っておいて、2行目で任意のフィールドに絞っています。
どうしても1行にするなら
set portal_field to item 1 of current record
だけど、必要なフィールドが何番目にあるか確かめないといけないので無理に1行にすることはないですね。
用語説明を見てもポータルに関するものは無いので、こうするしかないと思います。
Offline
yayaさま、用語説明を見てもポータルに関するものないですよね。それでここでお知恵をお借りしたいと思った次第です。
やや私の説明不足だったのかもしれません。
current recordで全部拾っておいて、2行目で任意のフィールドに絞っています。
どうしても1行にするなら
set portal_field to item 1 of current record
と言うことはレコード上の全てのデータを拾ってる訳ですよね?
Offline
>用語説明を見てもポータルに関するものないですよね。それでここでお知恵をお借りしたいと思った次第です。
用語説明にないことはよっぽどトリッキーな方法(画面の座標を使ったり、マウスの軌跡を追ったり)を取らない限りできないです。
>と言うことはレコード上の全てのデータを拾ってる訳ですよね?
ですが、問題ありますか?
どうしても余分なフィールドのデータを拾いたくないなら、AppleScript用のレイアウトで行うとか、方法はあると思います。
Offline
関連レコードに移動してからやったらどうかな。
yayaさま、いろいろとありがとうございます。
なんとかポータル部分だけのレコードだけを直接取り出したかったのですが、
現在のレコード上のデータ(ポータル以外部分とポータル部分)をひらって、
そこからAppleScriptでポータル部分のフィールドを取得することになる訳ですね
Offline
scripterさんの、関連レコード移動後なら基本的なASでできそうですよね。
Offline
set rec to current record
が、ポータル含めた全データをどっかにコピーしてるのかどうか疑問だったのでちょっと調べたけど、用語辞書では名詞としか書いてないしわかりませんでした。
普通は参照だからレコードIDが保存されるだけのような気がしたんですが。
旅人さま、scripterさま、ありがとうございます。
「set rec to current record」は「ポータル含めた全データ」ですね。
関連レコード移動後というのはそれなりにイメージは出来てるのですが・・・
現在のレコードからポータル内の関連レコード移動し、ポータル内に表示されていたレコード件数分だけのデータをAppleScriptで取得と言う感じになるのですかね?
Offline
取り込みたいポータルのフィールド値を、
一時保管するフィールドに移して、
そのフィールドからASで取り込むのはどうでしょう。
ポータル行を指定して、一時保管に値を移すのは
FMのスクリプトでできますよね。
Offline
チポさま、ありがとうございます。
なるほど!と言いたいのですが、ポータル行を指定して一時保管に値を移すという作業がどのようにすれば?と言う感じでいまいち理解できてなくて・・・
Offline
ポータルの表示がリレーションのソート順になっていることが条件です
スクリプトで
フィールド設定 [ 一時保管 ; GetNthRecord (ポータルテーブル::フィールドA ; N ) ]
これで、
ポータルのN行目のフィールドAの値が一時保管に入ります。
Nを変数にして、Loopで変化させれば次々と値を入れ替えられますね。
Offline
チポさま、わかりやすく教えていただきありがとうございます。
この方法でいくとポータルのフィールド数だけ一時保管するフィールドを用意すればいいわけですね。
Offline
そうでもいいでしょうし、
一つにして、
順にポータルのフィールドの値を入れ替えて、ASで変数に入力してゆく
でもいいのでは。
Offline
チポさま、ありがとうございます。
順にポータルのフィールドの値を入れ替えるということは、GetNthRecordでフィールド部分を変数にして入れると言うことですね
Offline
GetNthRecordでフィールド部分を変数にして入れる
これはポータル行の移動です。
一つのポータル行の中野フィールドに移動は、
全て並べないとダメでしょう。
一時保管をフィールド数分作った方が簡単かな。
Offline
どうしてフィールドをFileMakerで絞らなければならないのかが全然分かりません。
目的はInDesignに入力することなんだから、私だったらもっと大雑把に
tell application "FileMaker Pro"
tell layout "TEST"
set recs to every record -- 検索されたレコードの値が全部入る
end tell
end tell
tell application "InDesign"
activate
repeat with aRec in recs -- レコードごとに繰り返し
set x to item 1 of aRec -- 通常のフィールド
set y to item 2 of aRec -- 同じく
set array to item 3 of aRec -- ポータル内のフィールドを変数に
repeat with v in array -- ポータルの値ごとに繰り返し
-- x, y, vを使ってなんかする
end repeat
end repeat
end tell
てな感じで、InDesignで何かする時に値を取り出すような作りにしますけどね。
これなら、使いたいフィールドが変わってもFileMakerの部分は何もしなくていい。
純粋にAppleScriptの処理だけ考えればいいですから。
これをFileMakerのスクリプトでループを回して、その度にAppleScriptを起動して変数を溜めていくなんてやろうとしたら、面倒だと思いますよ。
Offline
yayaさま、ありがとうございます。
なるほど!おっしゃる通りかもしれません。FileMakerで少しでも楽に取得したいと言う考えが先行していたみたいです。
教えていただいた方法で、試してみます。まだまだ知識が少ないので、またいろいろご質問させていただくかと思いますがよろしくお願いしますね
Offline
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 569.55 KiB (Peak: 590.09 KiB) ]