Forum Discussion

CardinalNight's avatar
CardinalNight
Brass Contributor
Mar 27, 2024

How do I use sp/pnp sp.search to find all Associated sites when querying a hub site Id

I'm making an app which lists all hub sites on an SP tenant. I want a user to click on a hub site and it shows all associated sites.
I cannot figure out how to use [sp.search][1]


[1]: https://pnp.github.io/pnpjs/sp/search/

The documentation is quite assumptive. Here is what I've attempted:

 

export const GetAssociatedSites = async (hubId: string | undefined) => {
const _sp = getSP();
const finalArray: any[] = [];

await _sp.search({
StartRow: 0,
QueryTemplate: "contentclass: STS_Site AND DepartmentId:1111*",
Querytext: 'contentclass:STS_Site contentclass:STS_Web',
//SiteTitle:{searchTerms} AND contentclass:STS_site AND DepartmentID:{{PageContext.hubSiteId}}
SelectProperties: [
"Title",
"SPSiteUrl",
"WebTemplate",
"SPWebUrl",
"SiteName",
"RelatedHubsites",
"IsHubSite",
"ParentLink",
"Department",
"Path"
],
RefinementFilters: [`departmentid:string("${hubId}",linguistics=off)`],
RowLimit: 500,
TrimDuplicates: false,

})
.then((r: SearchResults) => {
r.PrimarySearchResults.forEach((value) => {
finalArray.push(value)
});
currentResults = r
})
console.log(currentResults, 'currentResults')
return currentResults;
}

 


I get an empty array back. Please help.

I managed to get some results using:

export const GetChildSites = async (hubId: string | undefined): Promise<SearchResults> => {
  console.log(hubId, 'hubId in data')
  const _sp = getSP();
  const bracketHubId = hubId;

  await _sp.search({
    StartRow: 0,
    Querytext: '(contentclass:"STS_Site") (contentclass:"STS_Web")',
    QueryTemplate: `contentclass: STS_site AND DepartmentId:${bracketHubId}`,

    SelectProperties: [
      "Title",
      "SPSiteUrl",
      "WebTemplate",
      "WebId",
      "SPWebUrl",
      "SiteName",
      "RelatedHubsites",
      "IsHubSite",
      "ParentLink",
      "Department",
      "DepartmentId",
      "Path"
    ],
    RowLimit: 500,
    TrimDuplicates: false,
  })
    .then((r: SearchResults) => {
      currentResults = r
    })
  return currentResults;
}

But some hubsites will not return any associated sites, whereas some do. I've checked with admin portal to see if these hubsites have associated sites any they do.....What's wrong here?