문제

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;
                    }
                }
            });
도움이 되었습니까?

해결책 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!

다른 팁

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...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top