Workspace Form Controller - How to expand returned data for recordMembers?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago
Hey all, I've been trying to research this, but I'm not able to figure it out...
How do we go about adding more data to the form controller > form > recordMembers array?
I'd love to have phone number setup in here as well, not sure why it's not by default.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 weeks ago - last edited 3 weeks ago
The form controller output is mapped from the form controller state params.
"recordMembers": {
"binding": {
"address": [
"recordMembers"
]
},
"type": "STATE_BINDING"
},The state param is filled from the glide_form_1 data source. Client script Initialize mentions users:
/**
* {params} params
* {api} params.api
* {any} params.event
* {any} params.imports
* {ApiHelpers} params.helpers
*/
function handler({api, event, helpers, imports}) {
// Create a map to store unique record members
let recordMembersMap = new Map();
const fields = api.data?.glide_form_1?.nowRecordFormBlob?.fields;
const activityStreamMembers = api.data?.glide_form_1?.nowActivityStreamConnected?.userReferences;
//Store Activity Stream members in recordMembers
activityStreamMembers.length > 0 && activityStreamMembers.forEach(activityMember => {
const { sysId, displayName, userName, ...rest } = activityMember;
recordMembersMap.set(sysId, {
sys_id: sysId,
name: displayName,
username: userName,
...rest
});
});
// Store users as recordMembers from field of type reference, with reference to sys_user table
Object.keys(fields).forEach(function(key,index) {
const field = fields[key];
// For glide_list, extract each sys_id
if(field.type === 'glide_list' && field.reference === 'sys_user' && field.display_value_list.length > 1 ) {
const sys_ids = field.value.split(',');
field.display_value_list.forEach((name, index) => {
recordMembersMap.set(
sys_ids[index],
{ ...(recordMembersMap.get(sys_ids[index]) || {}),
...{
"sys_id": sys_ids[index],
"name": name
}
}
);
});
}
else if (field.reference === 'sys_user' && field.value) {
recordMembersMap.set(
field.value,
{ ...(recordMembersMap.get(field.value) || {}),
...{
"sys_id": field.value,
"name": field.displayValue
}
}
);
}
});
const recordMembers = Array.from(recordMembersMap.values());
api.setState('recordMembers', recordMembers , false);
}The data source is [sys_ux_data_broker_proxy] with sysid: "dc6e87a5232200100e4bc50947bf654b". Now what a proxied data broker is I have no idea. I am guessing this data source gets its data from other components in some way. Maybe someone more experienced in uib knows
The activity stream component (root component now-activity-stream-connected) dispatches an event called NOW_ACTIVITY_STREAM_CONNECTED#AUTHORS_UPDATED which probably helps if you need to keep the list updating live
/sys_ux_lib_component.do%3Fsys_id%3D4f6f089446890030a5b1f67b340c41f4
I doubt you can alter this exactly but it doesn't mean you can't query and store this information in other manners
Activity Stream | Horizon Design System
Unlock Modern Horizon Design System Components In Your Custom Components Using -fetch-assets-from-instance - DylanLindgren.com

