Есть множество способов сделать это. Это быстрый способ заставить его работать.
Допустим, у вас есть две такие таблицы:
Contacts Events
-------- --------
ContactID EventID
FirstName EventDate
LastName EventDetails
Создайте между ними новую таблицу связей, в которой также будет храниться дополнительная информация о RSVP.
RSVP
--------
fk_ContactID
fk_EventID
PaymentInfo
Создать таблицу FORM
FORM
--------
ContactSearch
cContactMatch = Calculation, If(isEmpty(ContactSearch) ; "ALL" ; ContactSearch)
EventSearch
cEventMatch = Calculation, If(isEmpty(EventSearch) ; "ALL" ; EventSearch)
Добавьте следующие поля в таблицы контактов и событий:
Contacts
--------
cMatchField = Calculation, Stored, (FirstName + NEWLINE + LastName + NEWLINE + ALL + NEWLINE + Firstname LastName)
Events
--------
cMatchField = Calculation, Stored, (EventDate + NEWLINE + EventDetails + NEWLINE + ALL)
Это означает, что cMatchField for Contacts будет выглядеть примерно так:
John
Smith
John Smith
ALL
В диаграмме взаимосвязей соедините таблицы следующим образом:
FORM
--------
cContactMatch = CONTACTS/cMatchText
cEventMatch = EVENTS/cMatchText
Создайте макет с именем FORM на основе таблицы FORM.
Добавьте поля ContactSearch и EventSearch в макет. Добавьте поле PaymentInfo.
Добавьте два ПОРТАЛА к макету, один для таблицы контактов, один для событий.
По умолчанию вы должны видеть все записи на каждом из этих порталов.
Напишите сценарий или используйте триггер сценария, который обновляет макет всякий раз, когда одно из этих полей поиска закрывается или изменяется. Это должно обновить порталы и показать интересующие вас записи.
Добавьте кнопку в каждую строку в порталах и вызовите скрипт, который устанавливает глобальную переменную для идентификатора строк этого портала.
Например:
Script: Set Selected Contact ID
Set Variable ($$ContactID ; Contacts::ContactID)
Script Set Selected Event ID
Set Variable ($$EventID ; Events::EventID)
Добавьте еще одну кнопку в макет и новый скрипт.
Script: Create RSVP
# Check that a contact and event have been selected
If(isEmpty($$ContactID) or isEmpty($$EventID)
Exit Script
End If
# Get the payment info that has been entered
Set Variable ($PaymentInfo ; FORM::PaymentInfo)
# Create the RSVP Link record
Go To Layout(RSVP)
Create New Record
Set Field(fk_ContactID ; $$ContactID)
Set Field(fk_EventID ; $$EventID)
Set Field(PaymentInfo ; $PaymentInfo)
Commit Records
Go to Layout (Original Layout)
# Clear the search fields
Set Field(PaymentInfo; "")
Set Field(ContactSearch; "")
Set Field(EventSearch; "")
Set Variable($$ContactID; "")
Set Variable($$EventID; "")
Commit Records
Refresh Screen
Уф.
И вы должны вернуться, чтобы найти контакты, события и «отправить» форму для создания дополнительных RSVP.
FileMaker - это весело, а?