Question

I'm querying my Search Server and getting some results... How can i get the SPListItem linked to that object?

I tried with many ways, but every method fails..

Here's my code:

            string fullsite = SPContext.Current.Web.Url + "/sites/ReplyCorp";

            Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite scSite = new SPSite(fullsite))   //Collego impersonificando l'utente
                {
                    using (SPWeb webRoot = scSite.OpenWeb())
                    {
                        KeywordQuery keywordQuery = new KeywordQuery(scSite);
                        keywordQuery.ResultTypes = ResultType.RelevantResults;
                        keywordQuery.RowLimit = 1;
                        keywordQuery.QueryText = "contentId:" + updateContentObj.contentId;
                        ResultTableCollection searchResultTables = keywordQuery.Execute();

                        ResultTable searchResult = searchResultTables[ResultType.RelevantResults];


                        searchResult.Read();                            
                        SPListItem listItem = null; 

                        string url = searchResult["Path"].ToString();
                        Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(delegate()
                        {
                            using (SPSite site = new SPSite(url))
                            {
                                using (SPWeb web = site.OpenWeb())
                                {
                                    debug += "MY URL" + web.Url + "PPPPP" + url;

                                    listItem = web.GetListItem(url);
                                }
                            }
                        });

                        debug += listItem.Name;
                    }
                }
            });
Was it helpful?

Solution 2

I find a way to get that SPListItem... I modified my code this way:

 Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite scSite = new SPSite(fullsite))  
                {
                    using (SPWeb webRoot = scSite.OpenWeb())
                    {
                        scSite.AllowUnsafeUpdates = true;
                        webRoot.AllowUnsafeUpdates = true;
                        SPListItem listItem = null;//= GetItemByContentId(updateContentObj.contentId);

                        KeywordQuery keywordQuery = new KeywordQuery(scSite);
                        keywordQuery.ResultTypes = ResultType.RelevantResults;
                        keywordQuery.RowLimit = 1;
                        keywordQuery.QueryText = "contentId:" + updateContentObj.contentId;
                        ResultTableCollection searchResultTables = keywordQuery.Execute();

                        ResultTable searchResult = searchResultTables[ResultType.RelevantResults];

                        searchResult.Read();

                        string url = searchResult["Path"].ToString();

                        Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(delegate()
                        {
                            using (SPSite site = new SPSite(url))
                            {
                                using (SPWeb web = site.OpenWeb())
                                {
                                    web.AllowUnsafeUpdates = true;
                                    site.AllowUnsafeUpdates = true;

                                    Match m = Regex.Match(url + "&Pippo", "ID=[0-9]+");
                                    int listItemID = int.Parse(Regex.Match(m.Value, "[0-9]+").Value);
                                    listItem = web.Lists["Contenuti"].Items.GetItemById(listItemID);
                                        }
                            }
                        });

                        debug += listItem.Name;
                    }
                }
            });
            return new ResponseObject() { Message = debug, SPResultStatus = ResponseObjectSPResultStatus.SUCCESS };
        }

In simple words i get the ID and the LIST from the URL and then i retrieve manualli the item!

OTHER TIPS

In SharePoint 2013 ListID, ListItemID properties can be added to the result set of KeywordQuery, SearchExecutor:

var properties = keywordQuery.SelectProperties;

properties.Add("ListID");
properties.Add("ListItemID");

See: Overview of crawled and managed properties in SharePoint Server 2013 https://technet.microsoft.com/en-us/library/jj219630.aspx

ur doing searches not related to listitems... Your searching your whole site, so it can return lists, listitems, ... I'd use another way if you want to look for SPListItems...

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top