У меня есть сценарий, в котором пользователь будет загружать файлы 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);
}
}
}
}
}