Bridge: Stuck! GET /users/{{inputs.userId}} Child Flow not running

Options
NeilKY
NeilKY ✭✭✭✭✭
edited 06/21/25 in Add Ons and Integrations

I can't get my child CHILD WORKFLOW B (See Below) workflow to run. I've been on ChatGPT all day and it keeps making me run in circles.

It works GREAT up until Child workflow B. there is nothing in the run log showing why :(

WHAT I'M TRYING TO ACCOMPLISH: Should be fairly simple, right? Not for me. :)

  1. This Parent workflow gets all users,
  2. Child A publishes the user list and some details to a sheet (Email, Name, Status, Admin Boolean, etc),
  3. Child B publishes the other user details to the newly populated sheet with more user details (Company, Department, Title, locale, role, timezone, office phone, mobile phone).
{11772B8F-9315-4266-B999-5EEA453DF9F5}.png {69A3F269-3CF7-4FE7-B91F-21CFCCDC250B}.png

How my workflows are all setup:

══════════════════════════════════════════════════════════════
PARENT WORKFLOW · “Parent-Users2Sheet”
══════════════════════════════════════════════════════════════

START

Get Sheet – Find Column Info
→ Type: Get Sheet
→ Sheet: 4168714359361412
→ Results Per Page: 10000
→ Output: sheetId, columns[]


Call API – Get Users List ALL
→ Type: Call API
→ Endpoint: GET /users
→ API profile: Smartsheet
→ Output: users[] (basic info only)


JavaScript – UniversalUsersOnly (optional filter)
→ Input:
users: {{states.Get Users List ALL.call_api.make_api_call.response.data}}
→ Output: filteredUsers[]


Run Child Workflow A – Insert users to sheet
→ Child : Child1-Users2Sheet
→ Number of Runs:
{{states.UniversalUsersOnly.javascript.run_script.chunked.length}}
→ Child Entity Values:
usersChunk: {{states.UniversalUsersOnly.javascript.run_script.chunked[run_index]}}
sheetId : {{states.Get Sheet-Find Column Info.smartsheet.get_sheet.sheet.id}}


Get Sheet – Refresh Contacts Sheet (second pull)
→ Type: Get Sheet
→ Sheet: 4168714359361412
→ Results Per Page: 10000
→ Output: rows[], columns[] (now includes new rows)


JavaScript – Child B Javascript-Map userId and rowId
→ Maps user.id ↔ rowId using “User ID” column
→ Script Parameters:
users : {{states.Get Users List ALL.call_api.make_api_call.response.data}}
columns : {{states.Get Sheet Round 2.smartsheet.get_sheet.sheet.columns}}
sheetRows : {{states.Get Sheet Round 2.smartsheet.get_sheet.sheet.rows}}
→ Output: {{javascript.run_script.result}} → array [{ userId, rowId }]

WHERE IT BREAKS


Run Child Workflow B – Enrich user rows
→ Child : Child2-Users2Sheet
→ Number of Runs:
{{states.Child B Javascript-Map userId and rowId.javascript.run_script.result.length}}
→ Child Entity Values:
userId : {{states.Child B Javascript-Map userId and rowId.javascript.run_script.result[run_index].userId}}
rowId : {{states.Child B Javascript-Map userId and rowId.javascript.run_script.result[run_index].rowId}}
columns : {{states.Get Sheet Round 2.smartsheet.get_sheet.sheet.columns}}
sheetId : {{states.Get Sheet-Find Column Info.smartsheet.get_sheet.sheet.id}}

══════════════════════════════════════════════════════════════
WORKING: CHILD WORKFLOW A · “Child1-Users2Sheet” (bulk insert ≤ 500 rows)
══════════════════════════════════════════════════════════════

Trigger (inputs: usersChunk[], sheetId)

Call API – POST /sheets/{{inputs.sheetId}}/rows
→ API profile: Smartsheet
→ HTTP Body : {{runtime.data}} (the usersChunk array)


══════════════════════════════════════════════════════════════
CHILD WORKFLOW B · “Child2-Users2Sheet” (per-user enrichment)
══════════════════════════════════════════════════════════════

Trigger (inputs: userId, rowId, columns[], sheetId)

Call API – Get User Details
→ Endpoint: GET /users/{{inputs.userId}}
→ API profile: Smartsheet
→ Output: user


JavaScript – Build Row Update Payload
→ Script Parameters:
user : {{states.Call API – Get User Details.call_api.make_api_call.response}}
columns : {{inputs.columns}}
rowId : {{inputs.rowId}}
→ Output: rowUpdateArray ( [ { id: rowId, cells:[ … ] } ] )


Call API – PUT /sheets/{{inputs.sheetId}}/rows
→ API profile: Smartsheet
→ HTTP Body : {{states.Build Row Update Payload.javascript.run_script}}

==============

Script that runs just before Child B: MapUserIDstoRowIDs

/*************************************************************************

  • Build a lookup of sheet-row IDs keyed by the “User ID” cell value,
  • then emit an array that Child B can iterate over.
    *************************************************************************/
    const USER_ID_COL = "User ID";

/* 1 – build {title → columnId} map */
const columnMap = new Map(columns.map(c => [c.title, c.id]));

/* 2 – build {userId → rowId} map */
const rowIdByUserId = new Map();
for (const row of sheetRows) {
if (!row || typeof row.cells !== "object") continue;
const cell = row.cells[USER_ID_COL];
if (cell && cell.value != null) rowIdByUserId.set(String(cell.value), row.id);
}

/* 3 – return an array of {userId,rowId} for every match */
return users
.map(u => {
const rowId = rowIdByUserId.get(String(u.id));
return rowId ? { userId: u.id, rowId } : null;
})
.filter(Boolean);

I humbly summon my favorite Bridge Experts to this post—Alakazam! @SSFeatures , @Genevieve P. , @Brian_Richardson , @Paul Newcome, @Darren Mullen , @jmyzk_cloudsmart_jp, :) Thanks all!

-Neil

Tags:

Best Answers

Comments