SharePoint Online External Content Connector is not returning correct content to users Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } The SharePoint Online External Content Connector is not returning correct content to users. When searching for 'Employee Policy Manual' and filtering results for Table = sn_ext_conn_spo_external_search_schema, the expected result 'Employee Policy Manual.pdf' appears as the #1 result when not impersonating a user. However, when impersonating user, no results are returned, despite the SharePoint admin confirming access. Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } NA Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } The user was not part of the SharePoint groups granted access to the 'Employee Policy Manual.pdf' document, as identified via the script output and user mapping table. This mismatch in group membership caused the search results to fail when impersonating the user. Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 1. Run the provided script in a background script on the environment to identify groups with access to the document. Replace '***' in queryRequest.userQuery() with the document name (e.g., 'Employee Policy Manual').2. Verify user mappings in the sn_ext_conn_spo_user_mapping_sharepoint_online table to ensure the user is part of the required groups.3. If access issues persist, request the customer to add the user to the appropriate SharePoint groups and re-crawl the document and user mappings to reflect changes.4. Confirm the resolution by re-running the script and verifying the user can now see the document.Script: var tableName= 'sn_ext_conn_spo_external_search_schema'; //sn_ext_conn_cc_external_search_schema';//or sn_ext_conn_spo_external_search_schema// new sn_ais_ec.SearchExternalContentIngestionApi().purgeAllDocuments(tableName);// var crawlStore = new GlideRecord("sn_ext_conn_crawl_store");// crawlStore.query();// crawlStore.deleteMultiple(); dumpAisDocument(tableName); function dumpAisDocument(tableName, locale) {// initialize all objectsvar communicationModule = new Packages.com.glide.ais.communication.CommunicationModule();var injector = Packages.com.google.inject.Guice.createInjector(communicationModule);var connection = injector.getProvider(Packages.com.glide.ais.communication.SearchConnection).get();var provider = new Packages.com.glide.ais.communication.ApiClientProvider(connection);var client = provider.get("query");var queryApi = new Packages.com.attivio.module.aisapi.v20.node.QueryApi(client);var queryRequest = new Packages.com.attivio.module.aisapi.v20.node.model.QueryRequest();var gson = new Packages.com.google.gson.Gson();var partitionId = Packages.com.glide.ais.common.IAisProperties.AIS_PARTITION_ID.getValue(); if(!locale)locale = 'en';// prepare query requestqueryRequest.userQuery("***").locale(locale).searchProfile("dumpDebug"); // Update actual document name in userQuery.if(tableName)queryRequest.addFiltersItem(["table", tableName].join(':')); //gs.info("AIS Request" + gson.toJson(queryRequest)); // dump AIS documentvar jsObject = JSON.parse(gson.toJson(queryApi.search([queryRequest], partitionId)));gs.info("\n" + JSON.stringify(jsObject, null, 2));}