0

Filemaker 11に、次のフィールドを持つテーブルがありますthingID, infoNumber (#), itemHistoryinfoNumberアイテム履歴が発生したと思われる順序を表示します(これが正しくない場合があり、再配置する必要があります)。

thingsID、#、itemHistory

物1、1はアダムと一緒でした

物1、2はクレアと一緒だった

物1、3はベンと一緒だった

物1、4はデイブと一緒だった

これらをリストビュー(infoNumber ascで並べ替え)に表示すると、ユーザーは実際に「1,3,2,4」になったことに気付きます。ユーザーがそれらを切り替えるために、上下の矢印を表示したいと思います。 infoNumber = 3のレコードの上矢印をクリックすると、2に設定され、古いinfoNumber=2は3に設定されます。

ユーザーがリストビューのボタンをクリックしたときにこれらを切り替えるスクリプトを作成するにはどうすればよいですか?

私の考え:

Set Variable [$ clickedDown、infoNumber]#クリックしたレコードのinfoNumber

[$ clickedDown!=1]の場合

フィールドを設定[infoNumber、clickedDown -1]

#しかし、infoNumber = clickedDown-1のレコードに移動するにはどうすればよいですか?

終了する場合

4

2 に答える 2

0

私がこれを行った方法は、いくつかの検索を行うことです。これが一方向に進むための私の解決策です。

#最初に何かをクリックし、現在のinfoNumberを記録します

変数を設定[$infoNumber、infoNumber]

#一時的なプレースホルダーとして-2(任意)を使用する

フィールドの設定[infoNumber=-2]

エラーキャプチャ[オン]

検索を実行します[thingID=$ thingsID、infoNumber = $ infoNumber-1]

If [Get(LastError = 401)]

#結果がない場合は、一時的に再検索して元の状態に戻します

検索を実行します[thingID=$ thingsID、infoNumber = -2]

フィールドを設定[infoNumber、$ infoNumber]

そうしないと

フィールドを設定[infoNumber、$ infoNumber]

検索を実行します[thingID=$ thingsID、infoNumber = -2]

フィールドを設定[infoNumber、$ infoNumber -1]

終了する場合

#前のレイアウトに戻る

もっと良い方法があるかどうか知りたいです!

于 2012-06-06T12:31:40.563 に答える
0

リレーションシップを使用してこれを行うことができます。新しいテーブルオカレンス(たとえば、History Previous )を作成し、次の述語を使用してリストレイアウトのテーブルオカレンス(たとえば、History )にリンクします。

History::ThingID = History Previous::ThingID
History::infoNumber > History Previous::infoNumber

履歴Previous::infoNumber、降順で関係を並べ替えます。

これにより、関連するThingのリストの前半に表示される一連の関連する履歴レコードが提供されます。ソートのおかげで、最初のレコードは直前のレコードになります。

これで、スクリプトを実行すると、次のことができます。

If [ Count ( History Previous::ThingID ) > 0 ]
Set Variable [ $infoNumber, History Previous::infoNumber ]
Set Field [ History Previous::infoNumber, History::infoNumber ]
Set Field [ History::infoNumber, $infoNumber ]
End If

以前の履歴リレーションシップは複数のレコードを参照する場合がありますが、リレーションシップの並べ替えを利用して、最初のレコードからデータを取得するとき([変数の設定]ステップで)とデータを設定するとき( [変数の設定]ステップ)の両方で、最初のレコードにアクセスできることに注意してください。最初の[フィールドの設定]ステップで)。

于 2012-06-13T22:47:08.147 に答える