How to build master-detail screens from scratch

What am I missing here???
I have 1 table named 'members'
If I create an app using the wizard I can create a detailed member's screen plus a member form. I see that clicking on a member navigates to the member details screen using the 'thisrow()' and the =$[InputRow] variables. Works like a charm.

Now...I'm trying to understand all of the mechanics of passing information from the primary screen to a secondary screen for both the purposes of the master-detail screen navigation and other screens where information would be selected from a parent screen to another screen that is related by primary keys.

If I create my own screens for members and member details I do not have access to the 'thisrow()' and =$[InputRow] variables. What gives? What am I missing?

When I create my screens using the 'quick create automation' I can specify the member details screens but cannot set any variables. The app when run will indeed invoke the member details screen without any data :frowning:

In the member details screen, I cannot set the source to anything. The error message indicates that 'specifies the table row that will be specified using something like =FindRow(table). Unfortunately, it doesn't seem to allow me to enter anything into the 'set source' input prompt.

Any references to documentation or hints or?? would be appreciated.

Thanks in advance
RoyMac

Here's a step-by-step guide to set up Members and Member details screens from scratch. As far as I can tell there isn't any detailed documentation on this yet.

Step 1: Create a list of members on your Members screen
I assume you've already done this.

Step 2: Add a data cell to your Member details screen
The next step is to add a data cell to your Member details screen. You can give the data cell the name InputRow if you'd like, you can leave it with the generic DataCell1 name it's automatically assigned, or you can name it anything you want. It's just a convention to use the name InputRow for data cells used in this way. For the sake of this guide, I'll assume you decided to stick to convention and named it InputRow.

The important thing is to change the data cell type from the default Shared to Variable. This is done within the DATA CELL PROPERTIES section that you can access by selecting the data cell.

Screenshot from 2020-07-20 22-12-01

Click the Variable button circled in the screenshot to change the type from Shared.

Step 3: Configure the list
Now we need to go back to the Members screen and configure the list to use this new data cell. On the Members screen, select the list object to open the LIST PROPERTIES section. Next click on the ACTIONS tab.

This is the ACTIONS tab.

The dropdown list at "A" allows you to choose which screen to switch to when a member in the list is clicked on by the user. In your case, you will want to select the Member details screen here if it's not already selected for you.

Below the dropdown list, we are able to configure which variables will be set in the Member details screen. Note that we can only set data cells on the Member details screen that are variables, that is, data cells that we've given the Variable type. Shared type data cells cannot be set from here.

We've only created one Variable type data cell on the Member details screen, so we will only have the option of setting one variable. Click on the blue text "Set variable (1 available)" and then click "$[InputRow]" to open the box labeled "B" in the screenshot. The "=THISROW()" formula will be automatically filled for you. Don't change it.

Step 4: Design the Member details screen however you'd like
Now go back to the Member details screen. Suppose you want to display the member's email address. You can now do that by adding a new data cell to the Member details screen. This time, you will want to keep the default Shared type. Where it says "Set shared source" in the DATA CELL PROPERTIES section, put =$[InputRow][Email]. In a similar manner, you can add any other information about the member you want to include. Click the checkbox Editable under DATA CELL PROPERTIES if you want to allow the user to make changes that will immediately go into effect for all app users.

Step 5: ???

Step 6: Profit!

4 Likes

Hi @Roym-9890,

Thanks for your question, and thanks to @Isaiah for the detailed answer.

Let me describe the concepts behind parameter passing between screens.

Let's say you have a FROM screen and a TO screen.

In the TO screen, you define one ore more Variables to receive the parameter. Most often you pass a Rowlink (i.e. the row you intend to display on the TO screen), but you are not limited to Rowlinks - you can pass any variable(s). If you are passing a Rowlink, you can then use this Variable as a Source for a Block to allow edit or display of a record. If you pass any other variable, you can use that in a Filter expression or any other way.

In the FROM screen, you can pass one or more variables using the Navigation Action. If the navigation is from a List, then you can use =THISROW() since this refers to the current row you are navigating from. If on the other hand you do not have a list, and you want to pass a Rowlink, then you have to somehow figure out how to get the rowlink and then pass it. You can also pass any other variable to the TO screen, and you can even pass a value, that you can then use to find the row as well.

I am going to illustrate this with an example where I will pass three variables. First, say you have two tables: Clients and Transactions. On the FROM screen, we will ask the user for a single input to provide a Transaction ID. Using this Transaction ID, we will determine the Client ID, and the Rowlink to the Transaction row given the Transaction ID.

We will then pass all three of these variables to the TO screen - Transaction ID, Client ID, and Transaction Rowlink. On the TO screen, we will then display the Transaction record using the Transaction ID passed in, also display the same Transaction record using the Transaction Rowlink, and finally display the Client record using the Client ID.

Transaction Table:
Transaction Table

Clients Table:
Clients Table

On the following screen, user enters a transaction ID of 4, and we determine the Client ID and the Transaction Rowlink from the Transaction ID:

We pass three variables to the TO screen. On the TO screen, we have defined three variables InputTransactionID, InputClientID, and InputTransactionRowlink. We map these three variables to the variables from the FROM screen:

Here is how the TO screen looks like. There are three blocks displayed below the blue block, each using the Input variable parameter to determine its source:

This block displays the values of the incoming variables value:

First block displays the Transaction record using the InputTransactionID in a FindRow() function:

Second block displays the Transaction record using the InputTransactionRowlink directly:

Third block displays the Clients record using the ClientID in a FindRow() function:

Hope this helps.

Thanks,
Razi

3 Likes

Thanks very much for the response. I've tried out your solution and it works as prescribed. Much appreciated.
My problem stems from confusing other system variables that have the format of $[----]. Once recognizing that format I thought that the $[InputRow] was a system variable to use rather than a variable that was user-defined.
I see the light.... :slight_smile:
Thanks for your information and prompt response.
Roy Mac

1 Like