Build-On Tutorial:

Committees

Committees: Lesson 2

See members of the committee

Lesson Overview

In this lesson, you will add features to allow members to be assigned to a committee. You will create a join table to allow for a many-to-many relationship between Member and Committee: one member can be assigned to many committees and one committee can have many members.

You will then update the detail layout you created in Lesson 1 to show the members of each committee. From there you can click-through to the member to show the member details.

Step 1 - Create a table, add fields, and relate table occurrences

Create a new table and fields for assigning members to a committee, and set up relationships.

  1. Open the Manage Database dialog (File > Manage > Database...) and activate the Tables tab.
  2. Duplicate the Template table by selecting it, then click Copy, then Paste, at the bottom of the dialog.
  3. Rename the new table to “Assignment” and click Change.
  4. Double-click the Assignment table to see the list of fields it contains.
  5. Create the following additional fields in the Assignment table:
    1. ID_Committee (number)
    2. ID_Member (number)
    3. Role (text)
    4. Date_Added (date)
    The ID_Committee field in the Assignment table is a foreign key that will be used to relate assignments back to committees. The ID_Member is a foreign key that will be used to relate assignments back to members.There is a one-to-many relationship from Committee to Assignment. There is a one-to-many relationship from Member to Assignment. You will now set up the relationships graph to reflect this.
  6. Switch to the Relationships tab of the Manage Database dialog.Note that a new table occurrence named Assignment was automatically added to the graph when you created the new table.
  7. Double-click the Assignment table occurrence and rename it to "ASSIGNMENT".This is done for consistency with the graph organization techniques used in the file.
  8. Drag the ASSIGNMENT table occurrence to the left column of table occurrences, and place it below the COMMITTEE table occurrence.
  1. Select COMMITTEE, ASSIGNMENT, and any other table occurrence in the left column of the graph, and use the Arrange tools to Align Left Edges and Resize to Largest Width so that ASSIGNMENT and COMMITTEE match the other table occurrences in the graph.
  1. Select and duplicate the ASSIGNMENT table occurrence using Command-D (macOS) / Control-D (Windows).
  2. Double-click the new table occurrence and rename it to “committee_ASSIGNMENT”.
  3. Drag the committee_ASSIGNMENT table occurrence up the graph and position it besides the COMMITTEE table occurrence.
  4. Create a relationship between COMMITTEE and committee_ASSIGNMENT by clicking on the ID field in COMMITTEE and dragging over to the ID_Committee field in committee_ASSIGNMENT.

    Note: Click the window icon at the top right of the COMMITTEE and committee_ASSIGNMENT table occurrence to minimize them so they match the height of the others.

    Position committee_ASSIGNMENT in the second ‘column’ of table occurrences: select committee_ASSIGNMENT and interaction_MEMBER tables, use the Arrange buttons to Align Left Edges, Distribute Vertically, and Resize to Largest Width.
  1. Double-click the line that connects COMMITTEE and committee_ASSIGNMENT to open the Edit Relationship dialog. Click the option on the right that reads Delete related records in this table when a record is deleted in the other table.

    This is called a "cascading delete" and means that if a Committee record is deleted, any related Assignment records will also be deleted.

    Click OK to exit the Edit Relationship dialog.
  1. Select and duplicate the MEMBER table occurrence using Command-D (macOS) / Control-D (Windows).
  2. Double-click the new table occurrence and rename it to “committee_assignment_MEMBER”.
  3. Drag the committee_assignment_MEMBER table occurrence down the graph and position it to the right of the committee_ASSIGNMENT table occurrence.
  4. Create a relationship between committee_ASSIGNMENT and committee_assignment_MEMBER by clicking on the ID field in committee_assignment_MEMBER and dragging over to the ID_Member field in committee_ASSIGNMENT.
  1. Select and duplicate the MEMBER table occurrence (again). Rename it to “assignment_MEMBER”.
  2. Drag the assignment_MEMBER table occurrence down the graph and position it besides the ASSIGNMENT table occurrence.
  3. Create a relationship between ASSIGNMENT and assignment_MEMBER by clicking on the ID_Member field in ASSIGNMENT and dragging over to the ID field in assignment_MEMBER table occurrence.
  1. Select and duplicate the COMMITTEE table occurrence and rename it to “assignment_COMMITTEE”.
  2. Drag the assignment_COMMITTEE table occurrence down the graph and position it to the right of the ASSIGNMENT table occurrence, above assignment_MEMBER.
  3. Create a relationship between ASSIGNMENT and assignment_COMMITTEE by clicking on the ID_Committee field in ASSIGNMENT and dragging over to the ID field in assignment_COMMITTEE table occurrence.
  1. Switch to the Fields tab of the Manage Database dialog.
  2. Create a calculation field named "Member_Name" in the Assignment table.
  3. In the Specify Calculation dialog, set the calculation to assignment_MEMBER::Member_Name and set the calculation result to Text.
  1. Close the Specify Calculation dialog and exit the Manage Database dialog.
  2. When you created the Assignment table, FileMaker automatically created an ASSIGNMENT layout as well. Keep this layout for use in scripts, but rename it:
    1. Open the Manage Layouts dialog (File > Manage > Layouts...)
    2. Drag the ASSIGNMENT layout to the Developer folder.
    3. Double click the layout and in the Layout Setup dialog to rename it to “Assignment_DEV” and verify that Include in layout menu is unchecked. Click OK and then exit the Manage Layouts dialog.

Step 2 - View members of committees

Add a new portal to the Committee Detail layout that shows related committee members.

  1. Enter Layout mode.
  2. Navigate to the Desktop > Member > Member Detail layout and select the Donations tab.
  3. Select and copy the member_DONATION portal using the Edit > Copy menu item, or the keyboard shortcut Command-C (macOS) / Control-C (Windows).
  4. Navigate to the Desktop > Committee > Committee Detail layout.
  5. Paste the member_DONATION portal using the Edit > Paste menu item, or the keyboard shortcut Command-V (macOS) / Control-V (Windows).
  6. Double-click the portal to open the Portal Setup dialog. Set the Show records from: option to committee_ASSIGNMENT.
  1. Click the Specify... button next to Sort portal records to open the Sort Records dialog and update the sort options. Remove the existing field from the Sort Order column and add the Member_Name field. Choose the Ascending order option and then click OK and then OK again to exit the Portal Setup dialog.
  1. With the portal selected, navigate to the Positions tab of the Inspector and change the Name to “Portal CommitteeMembers”.
  2. Double-click the the Date_Donation field in the portal. The Specify Field dialog will open. Select the committee_assignment_MEMBER table occurrence from the drop down menu. Select the Member_Name field.
  1. Repeat this step for the Name field in the portal, but change the table occurrence to committee_ASSIGNMENT. Change the field to Role.
  1. Remove the Amount field, and organize the fields in the portal so that it looks similar to the screenshot below.
  1. Select the Text tool in the status toolbar, click above the portal and type “Members”. For the COMMITTEE::Name field above the portal change the label from Name to Committee Name
  2. With the "Members" label still selected, activate the Inspector (View > Inspectors > Inspector) and select the Styles tab. Select subhead Left from the list of styles.
  1. Select the Status field and switch to the Data tab of the Inspector.
    1. Select the Control style: to Pop-up Menu.
    2. Set Values from: to the Status value list.
    3. Select Include arrow to show and hide list option.
  1. Using the Styles tab of the Inspector, style the Status field as Default andthe Name field as txt Black.Left.
  2. Your layout should look similar to this:
  1. Activate the Position tab of the Inspector.
  1. Select the Member_Name field in the portal, and then in the Autosizing options, set left, top and right anchors. This will allow the field to stretch horizontally to display more text as the window is resized.
  2. For the Role field, set top and right anchors. This field will move to the right as the window is resized.
  3. Enter Browse mode to save and review your work.

Step 3 - Create layouts for Add Member and Assign Role

The portal you created in Step 2 is perfect for viewing members of the committee. For adding members, or assigning roles, however, you will make two new layouts.

  1. Open the Manage Layouts dialog (File > Manage > Layouts...).
  2. Locate the Blank > Blank | Desktop - List layout and Duplicate it.
  3. Move the layout to the Committee folder.
  4. With the new layout selected, click the Edit button to open the Layout Setup dialog, and make the following changes:
    1. Set the Layout Name to “Select Member Card"
    2. Set Show records from: to MEMBER
  1. Click OK to exit the Layout Setup dialog. Open the layout in Layout mode so you can begin to modify it.
  2. In the Position tab of the Inspector, in the Size area, set the Width for this layout to 544 pts.
  3. Remove the sample field and its label.
  4. Remove the g_Logo field.
  5. Change the title to “Select Members”.
  6. Set the Height for the different parts of the layout.
    1. Header - 72 pts
    2. Body - 64 pts
    3. Footer - 72 pts
  7. Add the following fields from the Member table (with no labels) to the Body part of the layout (Insert > Field..., uncheck Create Label) and apply styles:
    1. Member_Name - style: txt Minimal.Black.Left
    2. Address_City_State - style: txt Minimal.Gray.Left
  1. In the Data tab of the Inspector, uncheck Browse Mode under Field Entry for both fields.
  2. In the Fields tab of the Object pane, create a new calculation field in the MEMBER table, “z_Flag_Selected”, with the following formula: not IsEmpty ( FilterValues ( $$SELECTED ; ID ) )

    Choose Number for the Calculation result. Click the Storage Options... button, and check Do not store calculation results — recalculate when needed and click OK.
  1. Drag the new field z_Flag_Selected on to the Body of the layout (if the were not automatically added), to the left of Member_Name, with no label.
    1. In the Data tab of the Inspector, set the Control Style to Checkbox Set.
    2. Select the value listnamed 1 from the Values from: drop-down menu.
    3. Disable Field Entry in both Browse and Find Mode.
  1. In the Position tab, adjust the object's size to Width: 25 pt and Height: 33 pt. Set the field object name to “selected”.
  1. In the Manage Layouts dialog, duplicate this layout. With the new layout selected, click the Edit button to open the Layout Setup dialog, and make the following changes:
    1. Set the Layout Name to “Edit Committee".
    2. Set the Show records from: to ASSIGNMENT.
  1. Click Open to navigate to the layout, then enter Layout mode to edit it. On the new layout, change the text at the top to "Edit Committee" and remove the z_Flag_Selected field.
  2. Double-click the Member_Name field. Select the assignment_MEMBER table occurrence from the drop-down menu. Leave the Member_Name field selected and click OK.
  1. Double-click the Address_City_State field. Select the Current Table (“ASSIGNMENT”) table occurrence from the drop-down menu. Select the Role field.
  1. In the Data tab of the Inspector, add "Role" as the Placeholder text for the Role field. Ensure that under Field Entry, Browse Mode and Find Mode are both checked. Then in the Styles tab, change the style to txt Black.Left.
  1. Enter Browse mode to save and review your work.

Step 4 - Create scripts

In this step you will create the scripts that handle the workflow related to committees, such as adding a member to a committee, assigning a role to a member, and removing a member from a committee.

  1. Open the Script Workspace (Scripts > Script Workspace...).
  2. Create a new script by duplicating the Template Script.
    1. Name the script “Select Member for Committee - Start”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  3. Modify the script so that it contains following steps:

    NOTE: See Step 4 for details on the Go to Related Records script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]

#Process and check variable
Set Variable [ $error; Value: #Assign ( Get(ScriptParameter )) ]
If [ $error = 0 or $committee_id = "" ]
   Close Window [ Current Window ]
   Exit Script [ Result: $null ]
End If

#Make card window dialog
If [ committee_ASSIGNMENT::ID ≠ "" // related records exists ]
   # Omit Members that are already assigned to this committee by selecting them first, then omitting them.
   Go to Related Record [ From table: “committee_assignment_MEMBER”; Using layout: “Select Member Card” (MEMBER) ; New window ]
   Show Omitted Only

  1. For the Go to Related Records step, select the gear icon to the right to open the “Go to Related Record” Options dialog. Update the options to match the screenshot below.

    When you select Show in new window, the "New Window” Options dialog will appear. From there, set the Window Style to Card and uncheck Close under Window Options. Leave the Window Name blank. Set the Height to Get (WindowHeight) - 40 and Width to 560. Set the From Top Position to Get (WindowTop) - 60.
  1. Continue editing the script by adding following steps:

    NOTE: See step 6 for details on the New Window script step.

Else
   New Window [ Style: Card; Name: "Select Members"; Using layout: “Select Member Card” (MEMBER); Height: Get(WindowHeight) - 40; Width: 560; Top: Get(WindowTop) - 60 ]
   Show All Records

End If

  1. The New Window step should look like the screenshot below. Set the Height to Get (WindowHeight) - 40. Set the From Top Position to Get (WindowTop) - 60 and Width to 560. Uncheck Close under Window Options.
  1. Complete the script by adding these steps:

    NOTE: See step 8 for details on the Sort Records script step.

#Reduce the list to show only active Members
Enter Find Mode [Pause: Off ]
Set Field [ MEMBER::Status; "Active" ]
Set Error Capture [ On ]
Constrain Found Set [ ]
Set Error Capture [ Off ]

Sort Records [ Restore ; With dialog: Off]
Go to Record/Request/Page [ First ]

#Reset global to receive selected member ID's & field zz_g_Filter_By for quickfind
Set Variable [ $$SELECTED; Value: "" ]
Set Field [ MEMBER::zz_g_Filter_By; "" ]

Exit Script [ Result: $null ]

  1. The Sort Records step window should look like this:
  1. The finished script should look like this:
  1. Create a new script by duplicating the Template Script.
    1. Name the script “Select Member for Committee”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so that it contains following steps:

    NOTE: See step 12 for details on the Set Variable script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]

#Process and check variable
Set Variable [ $error; Value: #Assign ( Get(ScriptParameter )) ]
If [ $error = 0 or $member_id = "" ]
  Close Window [ Current Window ]
  Exit Script [ Result: $null ]
End If

#Add or remove member ID's from $$SELECTED_members list
Set Variable [ $$SELECTED; Value:If ( FilterValues ( $$SELECTED ; $mem...]

Commit Records/Requests
Refresh Window [ Flush cached join results ]

Exit Script [ Result: $null ]

  1. For the Set Variable step, specify the following formula for the Value:

If ( FilterValues ( $$SELECTED ; $member_id ) = "";
_SuperTrim ( $member_id & "¶" & $$SELECTED) ;
_SuperTrim ( Substitute ( "¶" & $$SELECTED & "¶" ; "¶" & $member_id & "¶" ; "¶" ) )

)

  1. The final script should look like this:
  1. Create a new script by duplicating the Template Script.
    1. Name the script “Select Member for Committee - Cancel”.
    2. Move it into the Committee folder.
    3. Right-click the Select Member for Committee - Cancel script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so that it contains following steps.

Allow User Abort [ Off ]
Set Error Capture [ Off ]

Set Variable [ $$SELECTED; Value:"" ]|
Close Window [ Current Window ]

Exit Script [ Result: $null ]

  1. Create a new script by duplicating the Template Script.
    1. Name the script “Select Member for Committee - Create”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so that it contains following steps:

    NOTE: See step 18 for details on the New Window script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]

#Close card window
Close Window [ Current Window ]

#Exit script if no members selected
If [ ValueCount ( $$SELECTED ) < 1 ]
   Exit Script [ Result: $null ]
Else
   Set Variable [ $selected; Value: $$SELECTED ]
End If

Set Variable [ $committee_id; Value:COMMITTEE::ID ]

#Create off-screen window and make Committee Member records
New Window [ Style: Document; Name: "Create CommitteeMembers"; Using layout: “Assignment_DEV” (ASSIGNMENT); Height: 20; Width: 20; Top: -2000; Left: -2000 ]
Enter Browse Mode [Pause: Off]

Loop
   New Record/Request
   Set Field [ ASSIGNMENT::ID_Committee; $committee_id ]
   Set Field [ ASSIGNMENT::ID_Member; GetValue ( $$SELECTED ; 1 ) ]
   Set Variable [ $$SELECTED; Value: RightValues ( $$SELECTED ; ValueCount ( $$SELECTED )-1 ) ]

   Exit Loop If [ ValueCount ($$SELECTED ) < 1 ]
End Loop
Commit Records/Requests [ With dialog: Off ]

Close Window [ Current Window ]

Commit Records/Requests [ No dialog ]

Exit Script [ Result: $null)

  1. The New Window options should be set up similar to this:
  1. The finished script should look like this:
  1. Create a new script by duplicating the Template Script.
    1. Name the script “Remove Committee Member”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so it contains the following steps:

    NOTE: See step 22 for details on the Show Custom Dialog script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]
Freeze Window

#Ask for confirmation
Show Custom Dialog [ Message: "Do you want to remove this member from the committee?"]

If [ Get(LastMessageChoice) = 2 // No ]
   Exit Script [ Result: $null ]

Else

   Delete Portal Row [ With dialog: Off ]

End If

Commit Records/Requests [With dialog: On]

Exit Script [ Result: $null ]

  1. The Show Custom Dialog script step should look similar to this:
  1. The final script should look like this:
  1. Select the Committee - Go To Related Record (context) script. You will extend the navigation options by adding the highlighted code.

    NOTE: See step 25 for details on the Go to Related Record script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]
Freeze Window

# Parse the parameters
Set Variable [ $parameter_parsing_ok; Value: #Assign ( Get(ScriptParameter ) ) ]
If [ $parameter_parsing_ok = False ]
   # Parameters could not be parsed, exit this script and report back
   Exit Script [ Result: False ]
End If

If [ $context = "Committee_List to Committee_Detail" ]
   #Committee List to Committee Detail

   Go to Layout [ “Committee Detail” (COMMITTEE) ]

Else If [ $context = "Committee_Detail to Member_Detail" ]
  # Committee Detail to Member Detail
  Go to Related Record [ From table: “committee_assignment_MEMBER”; Using layout: “Member Detail” (MEMBER) ]

End If

Exit Script [ Result: $null ]

  1. The Go to Related Record script step should be set up like this:
  1. The final script should look like this:
  1. Create another script by duplicating the Template Script.
    1. Name the script “Edit Assignments”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so that it contains following steps.

    NOTE: See steps 29 and 30 for details on the Go to Related Record and Sort Record steps.

Allow User Abort [ Off ]
Set Error Capture [ Off ]
Freeze Window

Go to Related Record [ From table: “committee_ASSIGNMENT”; Using layout: “Edit Committee” (ASSIGNMENT) ] [ Show only related records; New window ]

Sort Records [Restore ; With Dialog: Off]
Go to Record/Request/Page [ First ]

Exit Script [Text Result: $null]

  1. In the “Go to Related Record" Options match the screenshot below. In the “New Window" Options dialog:
    1. Set the Window Style to Card.
    2. Change the Height to Get (WindowHeight) - 40.
    3. Uncheck Close under Window Options.
  1. Set the Sort Record script step to sort as follows:
  1. The final script will look like this:
  1. Create one last script by duplicating the Template Script.
    1. Name the script “Delete Assignment”.
    2. Move it into the Committee folder.
    3. Right-click the script and select the option to Exclude from Scripts Menu (if not already selected).
  2. Modify the script so that it contains the following steps.

    NOTE: See step 34 for details on the Show Custom Dialog script step.

Allow User Abort [ Off ]
Set Error Capture [ Off ]
Freeze Window

Show Custom Dialog [ “Remove Member” ; Message: "Do you want to remove " & assignment_MEMBER::Member_Name & ...]

If [ Get(LastMessageChoice) = 2 // Yes ]
   # Delete record
   Delete Record/Request [ With dialog: Off ]
End If
Exit Script [Text Result: $null

  1. For the “Show Custom DialogOptions, set the Message to "Do you want to remove " & assignment_MEMBER::Member_Name & " from " & assignment_COMMITTEE::Name & “?”

    Update the buttons and title to match the screenshot:
  1. The final script should look like this:
  1. Save all the the scripts and close the Script Workspace.

Step 5 - Adding buttons

With all of the scripts now in place, your final task is to make buttons to trigger them. On the Committee Detail layout, you will create buttons for adding members and assigning roles.

On the Select Member card window, you will add the script to select member, you will add buttons to cancel or confirm the creation of new members to committee.

On the Edit Committee card window, you will add a close button and a delete button.

  1. Enter Layout mode and navigate to the Donations tab of the Member Detail layout.
  2. Copy the Add Donation button, then navigate to the Committee Detail layout and paste it below the portal.
  3. In the Button Setup dialog, set the following properties for the button:
    1. Set the button name to "Add Member".
    2. Change the script to Select Members for Committee - Start script.
    3. Set the Optional Script Parameter to:
# ( "committee_id" ; COMMITTEE::ID )
  1. Duplicate this button and set the properties for this button:
    1. Set the button name to “Assign Roles".
    2. Change the script to Edit Assignments.
    3. Clear out the script parameter.
  1. On the Data tab of the Inspector, add a hide condition to this button by setting Hide object when to IsEmpty( committee_ASSIGNMENT::ID ).
  2. Duplicate the Add Member button. Apply the btn Icon.Delete style via the Styles tab in the Inspector.
  3. Resize the button to Width: 48pt and Height: 44pt.
  4. Double-click the new button. In the Button Setup dialog:
    1. Choose to Display only an icon (no label for the button) and select the small X icon.
    2. Change the script to Remove Committee Member (ID_CommitteeMember)
    3. Remove the Optional Script Parameter.
  5. Place the button to the right of the Role field in the portal. In the Autosizing options, set top and right anchors for it.
  6. Double-click the transparent button by clicking on the white space behind the fields in the portal. In the Button Setup window:
    1. Change the script to Committee - Go To Related Record (context) script.
    2. Set the script parameter to # ( "context" ; "Committee_Detail to Member_Detail" )
  7. After all of these changes, your layout should now look similar to the image below.
  1. Copy the Add Member button, then navigate to the Select Member Card layout and paste it in the corner at the bottom right of the Footer part.
  2. In the Button Setup dialog:
    1. Set the button name to “OK".
    2. Change the script to Select Members for Committee - Create.
    3. Clear out the script parameter.
  3. Duplicate the OK button, and change the style of the new button to btn White.
  4. In the Button Setup dialog, set the following properties for the new button:
    1. Set the button name to "Cancel".
    2. Change the script to Select Members for Committee - Cancel.
  5. For both the OK and Cancel buttons, set top and right anchors in the Autosizing options.
  6. Select the Button tool from the status toolbar, and drag a button that covers the whole body of the layout (do not include the Header or Footer part). The Button Setup dialog will open.
    1. Keep the default selection to Display only a label, but leave the label blank. This will be a hidden button.
    2. Set the action to Perform Script.
    3. Select the Select Member for Committee script.
    4. Set the script parameter to: # ( "member_id" ; MEMBER::ID ).
  7. Apply the btn Row.Hover style and set left, top, and right anchors.
  8. Send the button object to the background using the Arrange > Send To Back menu item.
  9. Your layout should look similar to the image below:
  1. Copy the OK button, navigate to the Edit Committee layout, and paste it into the Footer part of that layout.
  2. In the Specify Button window:
    1. Set the button name to “Close”.
    2. Change the script to Close Window. This is an existing script located in the General Scripts folder.
    3. Clear out the script parameter.
  3. Duplicate the Close button. Apply the btn Icon.Delete style to the new button.
  4. Resize the button to Width: 48pt and Height: 44pt.
  5. In the Button Setup dialog:
    1. Change the button type to Display only an icon and select the icon shown below.
    2. Change the script to Delete Assignment.
  1. Place the button to the right of the Role field. Your layout should look similar to the image below.
  1. Enter Browse mode to save and review your work.

Step 6 - Review your work

With all of the schema, interface, and scripting now in place, you can test the new committee assignment features.

  1. When you go to the Committee Detail layout (by selecting a committee from the Committee List layout), you should see a portal that lists the members for that committee (you may need to add sample data). In the portal row, there is a button to remove a member from the committee.
  2. When you click the Add Member button, you should see the Select Member Card layout. The header should display “Select Members" and the buttons at the bottom should be Cancel and OK.
  3. You should be able to select and de-select members from the card window.
  4. If you click the Cancel button, you should get no confirmation dialog, and there should be no new record in the portal.
  5. If you click the OK button, the window should close and there should be one or more (depending on how many members you selected) new portal rows displaying the (new) members for the committee.
  6. When you click the Assign Roles button, you should see the Edit Committee Card layout. The header should display “Edit Committee”. There is only one button, which closes the card window.
  7. If you click on a portal row, you will navigate to the related record on the Member_Detail layout.