Using groupsApi
async function getGroupUserList(groupId) => { const groupResult = await alfrescoApi.core.groupsApi.getGroupMembers(groupId); console.log(groupId + ', # users: ' + groupResult.list.entries.length); return groupResult.list.entries; }
Using Search PATH
async function getGroupUserList(groupId) { const query = `PATH:'/sys:system/sys:authorities/cm:GROUP_${groupId}/*'`; const groupResult = await search(query); console.log(groupId + ', # users: ' + groupResult.list.entries.length); return groupResult.list.entries; }
Using Search ANCESTOR
async function getGroupUserList(groupId) { const authoritiesParentNode = await this.searchAndExpectOneNode(`PATH:'/sys:system/sys:authorities/cm:GROUP_${groupId}'`); const query = `ANCESTOR:'workspace://SpacesStore/${authoritiesParentNode.entry.id}'`; const searchResult = await this.search(query); const groupResult = searchResult.list.entries.filter(oneNode => oneNode.entry.nodeType === 'cm:person'); console.log('# users: ' + groupResult.length); return groupResult; }
As follows, there are some methods required to support the previous methods
const AlfrescoApi = require('alfresco-js-api-node'); const alfrescoApi = new AlfrescoApi({hostEcm: 'your-host'}); // make sure to login on alfresco to use the API async function searchAndExpectOneNode(query, displayError) => { const searchResult = this.search(query); if (searchResult.list.entries.length > 1) { if (displayError) { console.error('found multiple elements with query', query); } else if (searchResult.list.entries.length === 1) { return searchResult.list.entries[0]; } else { return null; } } } function search(query, size = 500, skipCount = 0) => { // adding cm:name:* forces alfresco to use Solr, to make sure we retrieve totalItems return alfrescoApi.search.searchApi.search(getQueryBody(query + ' AND cm:name:*', size, skipCount)); } function getQueryBody(query, size = 500, skipCount = 0) { return { query: { query: query }, include: ['properties'], paging: { maxItems: size, skipCount: skipCount } }; }