Динамически вставлять поля поиска в список - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть сценарий, в котором пользователь будет загружать файлы Excel в библиотеке документов, созданной в Root Web, в предопределенном формате.В библиотеке документов есть два свойства для SiteName и ListName.Теперь задание таймера будет отвечать за вставку данных в файл Excel в Site / List, указанный в свойствах.

Проблема, с которой я сталкиваюсь, состоит в том, что в целевых списках будет несколько столбцов поиска иПользователь предоставит только значения в файле Excel без идентификаторов поиска, и поскольку сайт и списки являются динамическими, я не смогу запросить исходный список для столбцов поиска.

using (SPWeb web = site.RootWeb)
{
    SPDocumentLibrary docLib = (SPDocumentLibrary)web.Lists[BulkUploadLibraryName];

    SPQuery docLibQuery = new SPQuery();
    docLibQuery.Query = "<Where><Geq><FieldRef Name='Created'/><Value Type='DateTime'>" + DateTime.Now.AddDays(-1) + "</Value></Geq></Where>";
    SPListItemCollection collection = docLib.GetItems();

    foreach (SPListItem listItem in collection)
    {
        LinkFieldValue webField = (LinkFieldValue)listItem["SiteName"];
        LinkFieldValue listField = (LinkFieldValue)listItem["ListName"];
        var data = ExcelHelper.Read(web.Url + "//" + listItem.Url);
        List<ConfigItem> errorList = new List<ConfigItem>();

        using (SPWeb targetWeb = site.OpenWeb(webField.NavigateUrl))
        {
            SPList targetList = targetWeb.GetList(listField.NavigateUrl.Replace(" ", "%20"));                        

            foreach (ConfigItem configItem in data)
            {                            
                SPListItem item = targetList.Items.Add();
                SPFieldLookupValueCollection category = item["Category"] as SPFieldLookupValueCollection;
                SPFieldLookupValueCollection subCategory = item["SubCategory"] as SPFieldLookupValueCollection;

                item["Title"] = configItem.Title;
                item["City"] = configItem.City;
                item["Longitude"] = configItem.Longitude;
                item["Latitude"] = configItem.Latitude;
                item["Address"] = configItem.Address;
                item["Region"] = configItem.Region;
                item["WorkingDays"] = configItem.WorkingDays;
                item["WorkingHours"] = configItem.WorkingHours;
                item["LocationID"] = configItem.BranchID;
                item["Category"] = category;
                item["SubCategory"] = subCategory;
                try
                {
                    item.Update();
                }
                catch (Exception ex)
                {
                    configItem.Exception = ex.Message;
                    errorList.Add(configItem);
                }
            }
        }
    }
}
...