2

I have SharePoint online and I want to add external content to the index.

So far I have it set up that the external content is put into an external list using BCS. The content passes through a WCF service.

I know that SP does not allow external content to be added to the index by default so I want to create a custom solution.

Any ideas on how to accomplish that?

From what I understand, external content has to flow through the BCS, and has to be placed in an external list.

My first thoughts were to somehow clone the external list and have the content copied to an internal list, but this just seems like a lot of effort for something that should be easier.

Has anyone dealt with this? Making external content searchable?

Is there any way to achieve this in cloud only? I do not have the option of doing it as a hybrid solution.

here is code of the app I'm currently building to accomplish this.

var siteUrl = '/Lists';

 function retrieveListItems() {

var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('Wikis');

//var camlquery = new sp.camlquery();
//camlquery.set_viewxml('<view><query><where><geq><fieldref name=\'title\'/>' + 
//    '<value type=\'string\'></value></geq></where></query><rowlimit>10</rowlimit></view>');
//this.colllistitem = olist.getitems(camlquery);

clientContext.load(oList);     //(collListItem);

clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));        

}

function onQuerySucceeded(sender, args) {

var listItemInfo = '';

var listItemEnumerator = collListItem.getEnumerator();

while (listItemEnumerator.moveNext()) {
    var oListItem = listItemEnumerator.get_current();
    listItemInfo += '\nTitle: ' + oListItem.get_title() + 
        '\nAuthor: ' + oListItem.get_item('Author') + 
        '\nBody: ' + oListItem.get_item('Body');
}

alert(listItemInfo.toString());
  }

   function onQueryFailed(sender, args) {

alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}
6

To second Matt's answer, what you're asking to do is simply not possible.

The reason why you can't index external content is because Microsoft doesn't provide access to the Crawl configuration. This area of the SharePoint Online implementation is a black box managed by Microsoft and Microsoft alone. It's not hidden, obfuscated or disabled "by default" - it simply is not available. As to why that is the case, remember that SPO is a (complex) multi-tenant implementation of SharePoint, where behind the scenes multiple domains are shared within single deployments. Add to that the fact that Search crawl is one of the most variable and highly impactful processes you can possibly configure within a farm. Together, it's understandable why the option is not available (at this point in time).

As far as workarounds, Matt listed your only real options plus some good advice (federating or content import/sync).

If you want ideas on how best to import or sync external data to SPO (so that it can be locally indexed), you should create that as a new question and mark this one as answered.

|improve this answer|||||
  • Thank you, looking back now, having done more research in addition to asking this question, I see now that it was worded terribly - and I will indeed ask it in a better format. – Scubacode Feb 17 '14 at 7:21
3

You cannot add a content source to SharePoint Online (SPO). There are techniques to "Federate Search" between On Premise and the Cloud, but that configuration is more than I can answer here.

If federation is not an option, I would suggest, now that you know this limitation, you readdress the business problem. For example, if you need to search for the "External List" you could write client code that synchronizes an actual list in SPO with your data source. Then that list will be available to search. Of course the challenge is maintaining the data in two places.

|improve this answer|||||
  • when you say "write client code that synchronizes an actual list in SPO with your data source", do you mean the actual WCF Source? Or are you agreeing with my option to synchronize with my external list? – Scubacode Jan 27 '14 at 9:42
  • Client Code vs. Server Code. You cannot write server side code in SPO so you would need some kind of utility to perform the sync. Generally the approach is to use the Client Side Object Model and/or REST to sync the list. – Matthew McDermott Jan 28 '14 at 12:53
  • ok I've edited my question above with the code for my (first) app I've written that should sync the external list with an internal list to achieve the indexing – Scubacode Jan 28 '14 at 15:01
  • I don't see your point. You asked if you can index external content in SPO. You can't. That's the answer to your question. – Matthew McDermott Jan 28 '14 at 17:57
  • Actually my question was how. I know it can't be done by default, but there must be a way around that by building a custom solution - that was my question – Scubacode Jan 29 '14 at 9:01
1

The best solution for an external search is to create a hybrid services with SharePoint 2019. Build the SharePoint 2019 standalone box, hybrid it with SP online. Then add a content source for external data sources such as local drives. If Active Directory is hybrid, you can keep permissions of the on-prem Active Directory for those local drives. Additionally, content sources for other services used by your company can be added (I.e. URLs for Servicenow, salesforce, Jira etc...). This is better solution than making a page in sharepoint with the links exposed.

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.