Custom deep link to show a table view on another AppSheet

Hi,

i'd like to create an action button from AppSheet1 to show a table view on a AppSheet2 

"appsheet://<AppSheet2-111111>/table/<AGENDA>/view/<TUTTI>?filter=MYRECORDSID=[_THISROW].[ID]"

Where

AGENDA is the table of my AppSheet2 (Google Sheet)

TUTTI is the Table View in my AppSheet2

MYRECORDSID is the Column in my AppSheet2 that contains records with ID of my AppSheet1

I receive this error message (i've access to my 2Appsheet App with my same account).

Screenshot 2025-03-02 alle 11.29.37.png

 

0 18 374
18 REPLIES 18

@FaCe 

 Solution: Use LINKTOFILTEREDVIEW

Since you want to filter TUTTI (a table view in AppSheet2) based on MYRECORDSID, use:

LINKTOFILTEREDVIEW("TUTTI", "MYRECORDSID" = [_THISROW].[ID])

 

Explanation: LINKTOFILTEREDVIEW("TUTTI", "MYRECORDSID" = [_THISROW].[ID])

"TUTTI" → The table view in AppSheet2.

"MYRECORDSID" = [_THISROW].[ID] → This filters the table in AppSheet2 to show only rows where MYRECORDSID matches the ID from AppSheet1.

 How to Open AppSheet2?

However, LINKTOFILTEREDVIEW() only works within the same app. To open AppSheet2, you'll need to combine it with HYPERLINK() or construct an AppSheet deep link manually.

Try this in AppSheet1:

HYPERLINK(

  "https://www.appsheet.com/start/<AppSheet2_App_ID>#view=TUTTI&table=AGENDA&filter=MYRECORDSID=" & ENCODEURL([_THISROW].[ID]),

  "Open Filtered View in AppSheet2")

Steps to Make This Work:

  1. Find Your AppSheet2 App ID:
    • Go to AppSheet2 → Click on "Manage" → "Deploy" → Copy the App ID from the URL.
  2. Update the Link:
    • Replace <AppSheet2_App_ID> with the copied App ID.

In action i insert External go to a website correct ?

Screenshot 2025-03-02 alle 14.16.10.png

Because if i leave go to another Appsheet i receive this error in Expression form.

The expression is valid but its result type 'Url' is not one of the expected types: App

Changing in External go to a website now receive this error:

The URL was: start/%myidapp%3E

App Template '<fd541e46-a529-4381-beb1-b217f51e770a>' not found.

Just wonder i link to TUTTI that is my table view, is it correct or i need to create a slice in it ?

@FaCe 

Yes, you're on the right track, but there are a few things to check and correct in your approach. Let's go through them step by step.

1. Use the Correct Deep Link Format

The format you're trying to use (appsheet://<AppSheet2-111111>/table/<AGENDA>/view/<TUTTI>?filter=MYRECORDSID=[_THISROW].[ID]) is not correct.

For navigating to another AppSheet app, the correct format is:

LINKTOAPP("AppID", LINKTOVIEW("TUTTI", "AGENDA", [MYRECORDSID] = [_THISROW].[ID]))

 

However, since you are using an external link (Go to a website), the correct structure is:

CONCATENATE(

  "https://www.appsheet.com/start/", 

  "Your-App-ID", 

  "#view=TUTTI&table=AGENDA&filter=", 

  ENCODEURL("MYRECORDSID = " & [_THISROW].[ID]))

 

2. Replace "Your-App-ID"

  • Go to AppSheet2 > Manage > App Info and copy the App ID.
  • Replace "Your-App-ID" in the formula above.

3. Ensure Correct Action Type

  • Do NOT use "Go to another App" because AppSheet expects an App ID reference, not a URL.
  • Instead, use "External: Go to a Website" and insert the URL from Step 1.

4. Debugging the "App Template Not Found" Error

This error usually happens if:

  1. The App ID is incorrect.
  2. The View (TUTTI) does not exist.
  3. The Table (AGENDA) does not exist or is not accessible.

Try manually opening:

https://www.appsheet.com/start/YOUR-APP-ID#view=TUTTI

 

  • If it doesn't work, check that the view name (TUTTI) matches exactly.
  • If it still doesn’t work, you might need to create a slice in AppSheet2 that filters only MYRECORDSID = [_THISROW].[ID], then link to that slice.

Ok, we're quite arriving at the solution (i hope) 🙂

Try manually opening:

https://www.appsheet.com/start/YOUR-APP-ID#view=TUTTI

Done it it works properly

Now the AppSheet2 is opened with the table view TUTTI but no records are displayed.

I've now created a slice in TUTTI view name it SLICETEST and insert this expression:

MYRECORDSID = [_THISROW].[ID]

And change the expression in action AppSheet1 as:

CONCATENATE(

"https://www.appsheet.com/start/",

"fd541e46blabla",

"#view=SLICETEST&table=AGENDA&filter=",

ENCODEURL("MYRECORDSID = " & [_THISROW].[ID]))

 

But still not works ... any more help please ?

I'm doing some test ...

  1. If i leave VIEW TUTTI, all my records of my table AGENDA are shown, so that last part of the link: 

ENCODEURL("MYRECORDSID = " & [_THISROW].[ID]))

seems not to have any effect ...

This is the URL i use:

CONCATENATE(

"https://www.appsheet.com/start/",

"fd541e46blabla",

"#view=TUTTI&table=AGENDA&filter=",

ENCODEURL("MYRECORDSID = " & [_THISROW].[ID]))

 

2. If i use instead the SLICETEST in the URL and i insert in Appsheet2

[MYRECORDSID] =  [_THISROW].[ID]

no data are shown ... 

CONCATENATE(

"https://www.appsheet.com/start/",

"fd541e46blabla",

"#view=SLICETEST&table=AGENDA&filter=",

ENCODEURL("MYRECORDSID = " & [_THISROW].[ID]))

 

How to Create a Slice in AppSheet2 for Filtering Records

A slice will ensure that the view (TUTTI) only shows records where MYRECORDSID matches the ID from AppSheet1.

Step 1: Create a Slice in AppSheet2

  1. Go to AppSheet2
  2. Navigate to Data > Slices
  3. Click “+ New Slice”
  4. Set the following:
    • Slice Name: Filtered_TUTTI
    • Table: AGENDA

Row filter condition:
[MYRECORDSID] = [_THISROW].[ID]  

  •  
  • Select all columns (or only the necessary ones for the view).
  • Save the slice.

Step 2: Create a View for the Slice

  1. Go to UX > Views in AppSheet2
  2. Click “+ New View”
  3. Set the following:
    • View Name: Filtered_TUTTI_View
    • For this data: Filtered_TUTTI (the slice you just created)
    • View Type: Table, Deck, or any format you prefer
    • Save the view.

Step 3: Update the Deep Link in AppSheet1

Now, modify your AppSheet1 action button to use this new slice.

If using "Go to a website", set this as the URL:

CONCATENATE(

  "https://www.appsheet.com/start/", 

  "Your-App-ID", 

  "#view=Filtered_TUTTI_View")

 

If using "Go to another App", use:

LINKTOAPP("Your-App-ID", LINKTOVIEW("Filtered_TUTTI_View", "Filtered_TUTTI"))

 

Step 4: Test the Button

  1. Click on the button in AppSheet1.
  2. Ensure it opens AppSheet2 and correctly filters the records in TUTTI.

All done (i use "Go to a website")

The table sliced view is open correctly but it's incredible still no records are shown in it ... 

If no records are showing in your Filtered_TUTTI_View, let's debug step by step.

1. Check the Slice Filter Condition

Go to Data > Slices > Filtered_TUTTI and confirm the row filter condition:

[MYRECORDSID] = [_THISROW].[ID]  

Possible Issues:

  • Does MYRECORDSID actually store the ID from AppSheet1?
    • If not, check the column data in AGENDA.

Try changing the filter to:
[MYRECORDSID] = "123456"  

  •  (replace 123456 with an actual ID from AppSheet1)
  • If this works, then _THISROW_ might not be passing correctly from AppSheet1.

2. Check if the Slice Contains Records

  1. Go to AppSheet2 > Data > Slices > Filtered_TUTTI.
  2. Click View Data (below the filter formula).
  3. If it’s empty, the filter isn’t working.

Solution if No Data Shows:

Try changing the filter condition to:

IN([MYRECORDSID], LIST([_THISROW].[ID]))  

or

IN([ID], SELECT(AGENDA[ID], [MYRECORDSID] = [_THISROW].[ID]))  

Then Save & Check View Data Again.

3. Check the AppSheet View Settings

  1. Go to UX > Views > Filtered_TUTTI_View.
  2. Ensure For this data is set to Filtered_TUTTI (the slice).
  3. If the data source is empty, try changing to AGENDA just to see if it works.
  4. 4. Test Manually in AppSheet2
  1. Go to AppSheet2 > Data > AGENDA > View Data.
  2. Find a row where MYRECORDSID should match an ID from AppSheet1.
  3. If no matches exist, AppSheet1 is not passing the ID correctly.

5. Update the Deep Link (Force Pass ID)

Modify the AppSheet1 action Go to a website URL:

CONCATENATE(

  "https://www.appsheet.com/start/", 

  "Your-App-ID", 

  "#view=Filtered_TUTTI_View&row=", ENCODEURL([ID]))

This forces AppSheet2 to open with a specific row.

2. Check if the Slice Contains Records

  1. Go to AppSheet2 > Data > Slices > Filtered_TUTTI.
  2. Click View Data (below the filter formula).
  3. If it’s empty, the filter isn’t working.

Do you mean in the row filter for slice to click "test" in Expression assistant ?

In my case clicking on test all my records are shown of table AGENDA (in appsheet template)

 

I've rechecked every passage, no records still shown in table view

 

Just thinking: are we sure that the Slice of AppSheet2

[MYRECORDSID] = [_THISROW].[ID]  

and in particulary ... [_THISROW].[ID]   is correct here ?

We're in Appsheet2 and the value of [_THISROW].[ID]  is the ID of AppSheet1 ... how Appsheet2 could know that value ? 

 

Solution: Pass the ID in the Deep Link

Since AppSheet2 doesn’t automatically inherit the row from AppSheet1, we need to pass the ID manually in the URL.

Step 1: Modify the Deep Link in AppSheet1

Instead of using: appsheet://Your-App-ID/table/AGENDA/view/TUTTI?filter=MYRECORDSID=[_THISROW].[ID]

 

Use:CONCATENATE(

  "https://www.appsheet.com/start/", 

  "Your-App-ID", 

  "#view=Filtered_TUTTI_View&row=", 

  ENCODEURL([ID]))

This ensures that when AppSheet2 opens, it knows which row (ID) to filter by.

Step 2: Modify the Slice in AppSheet2

Since we now receive the ID via the URL, update the slice filter like this:

[MYRECORDSID] = CONTEXT("RowKey")

 

  • CONTEXT("RowKey") retrieves the passed row ID from the deep link.
  • MYRECORDSID should match the ID passed from AppSheet1.

Now in my AppSheet2 are shown all the records of my AGENDA table and not only the records that match:

[MYRECORDSID] = CONTEXT("RowKey")

Any more help please ?

Btw it's the first time that something finally appears in my Slice table view after all 🙂 

 

Great! Now that records are appearing, it means AppSheet2 is at least opening correctly. The issue now is the slice is not filtering records correctly.

Why Is It Showing All Records?

Your filter condition:

[MYRECORDSID] = CONTEXT("RowKey")  

Problem:

  • CONTEXT("RowKey") only works if AppSheet2 is opened with a specific row.
  • But your deep link (#view=Filtered_TUTTI_View&row=...) only passes one row, while you need to filter multiple records (i.e., all rows in AGENDA that match the given ID).

Fix: Use ANY(SELECT(...)) to Pass the ID Properly

Modify the slice filter condition in AppSheet2:

[MYRECORDSID] = ANY(SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = CONTEXT("RowKey")))

Why This Works?

  • SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = CONTEXT("RowKey")) retrieves all IDs that match the passed ID.
  • ANY(...) ensures we compare it correctly against [MYRECORDSID].

 Alternative Fix: Use IN() for Multiple Matches

If you expect multiple records (not just one), use this filter instead:

IN([MYRECORDSID], SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = CONTEXT("RowKey")))

Why This Works?

  • This allows multiple records to be included in the slice.

Final Steps

  1. Update the Slice filter in AppSheet2 (Data > Slices > Filtered_TUTTI).
  2. Click View Data in the slice settings and confirm only matching records appear.
  3. Test by clicking the button in AppSheet1 and see if the correct records appear in Filtered_TUTTI_View.

Now, only the relevant records should appear! 🚀 Let me know if you need more tweaks.

Unfortunately still not works.

My scenario is to expect one or multiple records, so i've updated the slice filter as suggested (and tried also the other one):

IN([MYRECORDSID], SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = CONTEXT("RowKey")))

All my AGENDA records are shown ... and not only the one with [MYRECORDSID] = (to my AppSheet1 key)

btw when you said Final steps when click on View Data in slice are shown all records cause probably there's no incoming deeplink to wake it.

And clicking the AppSheet1 action it shown all my records of my AppSheet1 not Appsheet2 ... 

 

You're right! The issue is that CONTEXT("RowKey") is not being passed correctly when opening AppSheet2. This means the slice filter isn't receiving the ID and is therefore showing all records.

Let’s fix this step by step:

Step 1: Pass the ID Correctly in the Deep Link

Currently, your deep link might not be setting RowKey properly. Modify your AppSheet1 action to use this:

CONCATENATE(

  "https://www.appsheet.com/start/", 

  "Your-App-ID", 

  "#view=Filtered_TUTTI_View&row=", 

  ENCODEURL([ID]))

 Why This Works?

  • &row= tells AppSheet2 which specific record ID to focus on.
  • ENCODEURL([ID]) ensures the ID is properly formatted.

Step 2: Ensure AppSheet2 Uses RowKey Properly

Since we pass only one ID in row=, we need to store it in AppSheet2.

Create a User Setting for the Passed ID

  1. Go to AppSheet2 > Data > User Settings

  2. Create a new column:

    • Name: Selected_ID
    • Type: Text
  3. Modify AppSheet2's Deep Link Behavior

    • Go to AppSheet2 > Behavior > App Actions
    • Create a new action:
      • Name: Set Selected_ID
      • For this data: Usersettings
      • Action Type: Data: set the values of some columns
      • Set this column:
        • Selected_ID → CONTEXT("RowKey")`
  4. Set this action to run on app startup

    • Go to AppSheet2 > Behavior > Event Actions
    • Set "On App Launch" → Set Selected_ID

Step 3: Update the Slice to Use Selected_ID

Now, modify the slice filter condition in AppSheet2 (Filtered_TUTTI😞

IN([MYRECORDSID], SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = USERSETTINGS("Selected_ID")))

 Why This Works?

  • USERSETTINGS("Selected_ID") holds the ID passed from AppSheet1.
  • Now, AGENDA records will filter only for matching MYRECORDSID.

Step 4: Test the Fix

  1. Test Deep Link in AppSheet1

    • Click the button and verify if AppSheet2 opens.
    • Ensure the correct row=ID is passed in the URL.
  2. Test If Selected_ID Is Set in AppSheet2

    • Open AppSheet2 manually.
    • Check User Settings → Selected_ID should have the passed ID.
  3. Check If Slice Now Filters Records

    • Go to Data > Slices > Filtered_TUTTI → Click View Data.
    • If no data appears, manually set Selected_ID in User Settings and check again.

 

Expected Result

Now, when AppSheet1 sends the ID, AppSheet2 will store it and filter AGENDA records correctly.

Let me know if this works

 I've to create Selected_ID here, i.e. at Option 9 or where else ?

Screenshot 2025-03-03 alle 20.55.58.png

When create the action don't have an option to Set 

  • For this data: Usersettings

Screenshot 2025-03-03 alle 20.57.28.png

Here is the Solution FACE, Based on the screenshot shared, I see two issues:

  1. UserSettings cannot be modified by actions → That’s why you don’t see an option to "Set" Selected_ID.
  2. UserSettings works only per user session → Even if we set it, it wouldn't persist correctly across users.

Correct Approach: Store Selected_ID in a Global Table Instead

Instead of using UserSettings, let's create a Global Table in AppSheet2 to store Selected_ID.

Step 1: Create a New Table to Store Selected_ID

  1. In AppSheet2, create a new Google Sheet called GlobalVariables.

  2. Add the following columns:

    • ID (Text, key column, default: "1")
    • Selected_ID (Text)
  3. Go to AppSheet2 > Data > Tables:

    • Add GlobalVariables as a table.
    • Ensure it has only 1 row, with ID "1".

 Step 2: Modify the Deep Link in AppSheet1

In AppSheet1, update the deep link action: CONCATENATE( "https://www.appsheet.com/start/",  "Your-App-ID",  "#view=Filtered_TUTTI_View&row=",  ENCODEURL([ID]))

This ensures AppSheet2 receives ID correctly.

 Step 3: Create an Action in AppSheet2 to Store Selected_ID

  1. Go to AppSheet2 > Behavior > Actions
  2. Create a new action:
    • Name: Set Selected_ID
    • For this data: GlobalVariables
    • Action Type: Data: set the values of some columns in this row
    • Set these columns:
      • Selected_IDCONTEXT("RowKey")
    • Row filter condition: [ID] = "1"

Step 4: Modify the Slice Filter in AppSheet2

Now, update the slice filter in Filtered_TUTTI:

IN([MYRECORDSID], SELECT(AGENDA[MYRECORDSID], [MYRECORDSID] = ANY(SELECT(GlobalVariables[Selected_ID], [ID] = "1"))))

Why This Works?

  • GlobalVariables[Selected_ID] stores the ID passed from AppSheet1.
  • ANY(SELECT(...)) retrieves it.
  • The slice filters only records where [MYRECORDSID] matches this ID.

Step 5: Set Action to Run on App Start

  1. Go to AppSheet2 > Behavior > Event Actions
  2. Set "On App Launch" → Set Selected_ID

This method correctly transfers the ID and filters records in AppSheet2.

Oh Face, about the review, that’s still totally much appreciated. Please kindly reach out via: https://linktr.ee/love_lina I look forward to more close work with you.

You can contact me through https://linktr.ee/love_lina so we can talk better about your project because am not always online here 

Top Labels in this Space