Skip to content

Instantly share code, notes, and snippets.

@sreekrishnan1993
Last active June 29, 2019 10:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sreekrishnan1993/2de62ce0d4840e24c075f532ac36cc09 to your computer and use it in GitHub Desktop.
Save sreekrishnan1993/2de62ce0d4840e24c075f532ac36cc09 to your computer and use it in GitHub Desktop.
GetDatasourceItemByQuery
public class GetDataSourceItemByQuery
{
public void Process(ParseDataSourceArgs args)
{
if (args.DataSource.StartsWith("query:"))
{
return;
}
List<SearchStringModel> list = SearchStringModel.ParseDatasourceString(args.DataSource).ToList<SearchStringModel>();
if (list.Count == 0)
return;
using (IProviderSearchContext searchContext = this.CreateSearchContext(args))
{
foreach (SearchResultItem searchResultItem in (IEnumerable<SearchResultItem>)this.GetItems(list, searchContext))
{
Item obj = searchResultItem?.GetItem();
if (obj != null)
args.Items.Add(obj);
}
args.AbortPipeline();
}
}
protected virtual IQueryable<SearchResultItem> GetItems(List<SearchStringModel> items, IProviderSearchContext searchContext)
{
return LinqHelper.CreateQuery<SearchResultItem>(searchContext, (IEnumerable<SearchStringModel>)items);
}
protected virtual IProviderSearchContext CreateSearchContext(ParseDataSourceArgs args)
{
Assert.ArgumentNotNull((object)args, nameof(args));
return ContentSearchManager.GetIndex((IIndexable)(SitecoreIndexableItem)Context.Item).CreateSearchContext(SearchSecurityOptions.Default);
}
<parseDataSource>
<processor patch:instead="*[@type='Sitecore.ContentSearch.Client.Pipelines.ParseDataSource.GetDataSourceItemByQuery, Sitecore.ContentSearch.Client']" type="Myproject.Foundation.Extensions.Pipelines.ParseDataSource.GetDataSourceItemByQuery, Myproject.Foundation.Extensions" />
</parseDataSource>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment