filesoft.Discuss a project

FILESOFT / WORKFLOW CASE STUDY

Review incoming contacts before adding them to FileMaker.

A missing name, a repeated ID and a shared email should not all lead to the same decision. Give incoming rows a review area, explain what needs attention, and add only the rows that are ready.

Eight incoming rows.
Two ready to add.

These four native screenshots follow the tested sample workflow from the first review to the final Contacts list. Open an image at full size to inspect the details.

Contact Import Study: Eight incoming rows: two ready, five blocked and one to review. Six rows fit in the visible portal; scroll inside the native list to see the remaining two.
1. Review incoming. Eight incoming rows: two ready, five blocked and one to review. Six rows fit in the visible portal; scroll inside the native list to see the remaining two. Open full-size screenshot ↗
Contact Import Study: Contacts starts with one fictional record: C001, Maya Chen. Her email and postal code provide useful checks for the incoming rows.
2. Existing contact. Contacts starts with one fictional record: C001, Maya Chen. Her email and postal code provide useful checks for the incoming rows. Open full-size screenshot ↗
Contact Import Study: C101 and C102 now show Added. Five blocked rows and one possible match remain in the review area; they were not silently imported.
3. Add ready rows. C101 and C102 now show Added. Five blocked rows and one possible match remain in the review area; they were not silently imported. Open full-size screenshot ↗
Contact Import Study: The original C001 plus C101 and C102 make three contacts. The leading zeros in 00540, 02108 and 00123 remain visible.
4. Check the result. The original C001 plus C101 and C102 make three contacts. The leading zeros in 00540, 02108 and 00123 remain visible. Open full-size screenshot ↗

The screenshots use fictional data in FileMaker Pro on macOS. The reviewer also repeated Add ready contacts: the total stayed at three, with no duplicate additions.

01 / SEPARATE

Keep incoming rows apart

Review proposed additions without changing the existing Contacts table.

02 / EXPLAIN

Show a reason beside each row

A missing value, repeated ID or possible match leads to a specific next action.

03 / ADD

Keep a record of the decision

Added rows stay in the review area so another click can recognize work already done.

01 / THE STARTING POINT

Importing a row is not the same as accepting a contact.

A spreadsheet can be valid CSV and still contain records that should not become contacts. The columns may line up correctly while a name is missing, two rows use the same source ID, or an email already belongs to someone in the app.

Our CSV pre-import guide addresses the file before it reaches FileMaker. This case study adds a second check inside the app: an Incoming table where a person can inspect the proposed additions before they reach Contacts.

The result is a small, add-only workflow. It never merges people based on a matching name or email, and it does not overwrite an existing contact. This is Filesoft’s own demonstration, not a customer project or a claim of measured time savings.

02 / MAKE THE RULES VISIBLE

A reason is more useful than a warning icon.

The sample begins with one existing contact, C001 / Maya Chen, and eight incoming rows. Source IDs are compared after trimming outer spaces and converting to lowercase. This assumes one consistent source-ID scheme; IDs from unrelated systems would need a source name as part of the key.

Incoming rowDecisionReason / next action
C101 · Ana GarcíaReadyRequired values are present; the source ID is new.
C102 · Rivera, SamReadyAnother new ID. The comma in the name is ordinary field content.
C103 · No nameBlockedSupply the missing full name before adding it.
C104 · Jo ParkBlockedThe same ID is used by Lee Tran in the incoming rows.
C104 · Lee TranBlockedCorrect the ID or exclude the unwanted row; do not choose a winner automatically.
No ID · Mina PatelBlockedA source ID is required for repeat-import checks.
C001 · Maya ChenBlockedThis source ID already exists in Contacts. This study only adds new contacts.
C105 · Alex ChenReviewThe email matches Maya’s. Check whether it is a shared address or a duplicate.

The starting counts are 2 ready, 5 blocked and 1 to review. “Ready” means the row passed these specific checks. It does not prove the person’s identity, confirm that an email is deliverable or establish that the data is otherwise accurate.

Treat an ID conflict differently from a possible person match.

A repeated source ID is blocked. An exact normalized name or email match is a review clue. A shared family or team address can be legitimate, so the example asks for an explicit decision instead of merging records.

The review screen supports correcting the row, excluding it, or confirming a possible match as a different contact. Exclusion retains the row. Confirmation applies to the current source ID, name, email and postal code; changing those values can require review again when a possible match remains. Confirmation cannot override a missing required value or an existing source ID.

03 / FOLLOW THE TESTED PATH

Add two contacts. Keep the other decisions visible.

  1. Load the fictional samples. Incoming shows all eight rows and their reasons. Contacts contains only C001. The first two screenshots capture this state.
  2. Choose Add ready contacts and confirm. The workflow rechecks eligibility before creating contacts. It does not simply trust a status label left on screen.
  3. Return to Incoming. C101 and C102 now show Added. The five blocked rows and the possible match remain for review. Nothing has been silently discarded.
  4. Open Contacts. C001, C101 and C102 make three records. The original contact remains, and postal codes retain their leading zeros.
  5. Repeat Add ready contacts. The reviewer confirmed the total stayed at three. The already-added rows were recognized and not added again.

The observed result: two accepted additions, six incoming rows still needing a decision, and no duplicates when the add action was repeated. That is the behavior confirmed by this review; correction, exclusion, match confirmation and failure recovery need their own tests.

04 / INSIDE THE FILE

Separate the review decision from the write.

The example keeps the four source columns—SourceID, FullName, Email and PostalCode—in Incoming. It adds an internal ID, normalized matching keys, a review status and reason, and an AddedContactID marker. Contacts has its own internal ID and a reference back to the incoming row.

Source IDs and postal codes are text fields. Converting 00123 to a number would lose information before the review even began. Do not apply postal-code rules from one country to every row.

Check duplicates among active incoming rows.

The MatchKey helper field contains the lowercase, trimmed source ID. This calculation, used by the evaluator, counts matching incoming rows that are neither excluded nor already added:

FileMaker calculation

ExecuteSQL (
    "SELECT COUNT(*) FROM \"Incoming\" " &
    "WHERE \"MatchKey\" = ? " &
    "AND (\"Excluded\" IS NULL OR \"Excluded\" = 0) " &
    "AND \"AddedContactID\" IS NULL" ;
    "" ; "¶" ; Incoming::MatchKey
)

A count greater than one blocks the row, because the count includes the current row. A separate check looks for the same MatchKey in Contacts. A SQL error must stop the operation; it must not be treated as “no match.” Claris documents the question-mark error result and parameter placeholders for ExecuteSQL. IS NULL tests a missing SQL value; it is used here for an unset added marker.

Return a decision; let the controller save it.

The evaluator returns JSON with status and reason. In the refresh controller, the current Incoming record has already been found by its internal ID before this excerpt runs:

FileMaker script

Perform Script [ "Evaluate current row" ]
Set Variable [ $evaluation ; Value: Get ( ScriptResult ) ]
If [ JSONGetElement ( $evaluation ; "status" ) = "Error" ]
    Exit Script [ Text Result:
        JSONGetElement ( $evaluation ; "reason" ) ]
End If

This is a reading excerpt from the example, not a complete script that can be pasted as plain text into Script Workspace. Evaluate current row and the Incoming fields must exist. The full controller then writes ReviewStatus and ReviewReason, checks each write and commit, and returns to the review layout.

Save the contact and its receipt together.

The add controller writes the new Contact and the Incoming row’s AddedContactID in one native transaction. That keeps “the contact exists” and “this incoming row was added” in the same save operation. It captures errors and reports a failed operation rather than presenting it as success.

The Contacts table also requires unique source keys and unique incoming-row IDs. These checks supplement the visible review rules. FileMaker transactions group record changes for commit or rollback in the originating window. This design still needs explicit failure and concurrent-user testing before production use.

05 / TRY THE EXAMPLE

Start with the saved result, then test one change.

The downloadable review copy below is the latest saved file from this walkthrough. It already contains the three contacts and the two Added markers shown in the final screenshots. Load review samples does not reset the file. Keep a spare copy before experimenting.

  1. Repeat the add check. Choose Incoming review, Refresh checks, then Add ready contacts. With no other changes, Contacts should still contain three records.
  2. Correct a missing value. Open C103 with Review, enter a fictional full name and Save and return. Check that it becomes ready while Contacts remains unchanged until you explicitly add it.
  3. Resolve one repeated ID. Exclude Lee Tran’s C104 row and inspect Jo Park’s status. Include Lee again to check that both are blocked. Alternatively, give one row a genuinely distinct source ID.
  4. Inspect the possible match. Scroll to C105 and review its shared email. Confirm a different contact only after deciding that the match is legitimate; then change one source value and check that confirmation is requested again if the possible match remains.

The last three steps extend the confirmed walkthrough. Test them on fictional data in a spare copy; do not treat the screenshots as evidence that every branch has passed.

Optional: import the supplied CSV into Incoming

The package contains the same eight source rows as a UTF-8 CSV. Importing them into this saved file intentionally repeats IDs; it does not recreate an empty starting state.

  1. On a disposable copy, select Contact Import • Edit incoming, whose table is Incoming.
  2. Choose File > Import Records > File, and select the sample CSV.
  3. Target Incoming with Add new records. Do not choose an update or replacement action on Contacts.
  4. Treat the first row as column names. Map only SourceID, FullName, Email and PostalCode.
  5. Enable auto-enter options for the internal ID, WorkspaceKey and Excluded fields, then return to Incoming review and Refresh checks.

Check the mapping before importing. The quoted comma in “Rivera, Sam” should remain inside the name. See Claris’s import action and field-mapping instructions.

06 / ADAPT THE PATTERN

Make the next decision easy to understand.

For your own app, first agree on the identity rule: which source provides the ID, whether updates are allowed, and who can approve a possible match. Then put a clear reason and the relevant action beside each incoming row. Keep acceptance explicit and preserve enough information to explain what happened.

This study uses exact normalized matches, not fuzzy matching or email verification. It has no automated CSV chooser, batch history, merge/update workflow or production access-control model. Manual full-access edits can bypass the review screen.

The supplied screenshots and repeat-add confirmation cover this desktop review on macOS. The review file targets FileMaker Pro 26; native transactions were introduced in 19.6.1, which is not a claim that this entire example was tested on older versions. Windows, Go and WebDirect have not been validated for this study. Its 1440 × 940 layouts may need scrolling in smaller windows. The native workflow sends no email or network requests and contains no analytics.

INSPECT THE NATIVE EXAMPLE

Try the Contact Import Study.

A free learning example with the review layouts, scripts, fictional saved records, sample CSV and Read Me. This copy starts after the two accepted additions. It is a workflow demonstration, not a production contact-import product.

FileMaker Pro is required and sold separately. Use FileMaker Pro 26 and work on a spare copy.

Download the example

ZIP · .fmp12 file, sample CSV and Read Me · No email required

CONTINUE EXPLORING

From a valid file to a useful workflow.

Check the CSV first

Inspect headers, delimiters and row structure before importing into FileMaker.

Read the CSV guide ↗

Find work that needs attention

See how a review list makes overdue and at-risk projects easier to find.

Read the project case study ↗

Improve your import workflow

Tell us where incoming data causes extra checking and what you want to happen before records are accepted.

Discuss a workflow improvement ↗

The desktop example uses Spring Garden Lite, Filesoft’s free sample theme.

Filesoft counts page loads and selected link clicks in aggregate. These counts do not identify visitors or collect example-file contents. Browser privacy signals and the site’s analytics-off preference disable these counts.