Мне нужно использовать метод SPFileCollection.Add для добавления нового элемента в библиотеку документов, но перегрузка этого метода, похоже, не подходит.Как создать новый элемент в качестве ссылки на файл в библиотеке документов?
Szenario: Если файл добавляются в библиотеку документов и отделы выбора поля с множественным выбором (флажками) выбрал значение того событие itemUpdated предполагается создать ссылки на добавленный файл в выбранном отделов покупки папки.
В настоящее время: Код добавляет файл как новый файл не как ссылку.
Я попробовал следующее ...
string departments = Convert.ToString(properties.ListItem[Constants.Departments]);
if (!string.IsNullOrEmpty(departments))
{
string[] linkTargets = departments.Split(';', '#');
string purchasingLink = string.Concat(properties.Web.Url, "/", properties.List.RootFolder.Url, "/", Constants.Purchasing, "/");
foreach (string linkTarget in linkTargets)
{
if (!string.IsNullOrEmpty(linkTarget))
{
SPFolder targetFolder = properties.Web.GetFolder(purchasingLink + linkTarget);
SPFileCollection targetLibFiles = properties.List.RootFolder.Files;
targetLibFiles.Add()
string fileUrl = string.Concat(purchasingLink, linkTarget, "/", properties.ListItem.File.Name);
SPFile newFile = targetLibFiles.Add(fileUrl, properties.ListItem.File.OpenBinary());
SPListItem newItem = newFile.Item;
newItem[SPBuiltInFieldId.ContentType] = SPBuiltInContentTypeId.LinkToDocument;
SPFieldUrlValue linkFieldValue = new SPFieldUrlValue();
linkFieldValue.Url = fileUrl;
newItem[SPBuiltInFieldId.URL] = linkFieldValue;
newItem.Update();
}
}
}
UPDATE: Так я проверил blog post связанный Джеймсом Михал Лукас в своем комментарии.
Я не смог скопировать его, поскольку перегрузка, используемая в методе, не существует, но у нее были некоторые интересные моменты, такие как хеш-таблица, для предоставления типа содержимого в методе добавления (...). В результате изменения в моем коде:
Hashtable itemProperties = new Hashtable();
SPContentTypeId ctId = SPBuiltInContentTypeId.LinkToDocument;
itemProperties["ContentTypeId"] = ctId.ToString();
string fileUrl = string.Concat(purchasingLink, linkTarget, "/", properties.ListItem.File.Name);
SPFile newFile = targetLibFiles.Add(fileUrl, properties.ListItem.File.OpenBinary(), itemProperties);
Исполнительной это, а затем проверяя тип содержимого нового элемента с помощью PowerShell показывает:
PS C: \ Users \ х> $ file.Item.ContentType.Name
Ссылка на документ
Однако удаление исходного файла не отключает ссылку. Он все еще работает нормально. Так что это не ссылка в конце концов.
Я могу предложить только это сообщение в блоге, которое могло бы помочь: https://erroreimprevisto.wordpress.com/2014/05/10/sharepoint-2013-programmatically-add-link-to-a-document-file -в-документ-библиотека /. Не самая элегантная помощь, которую я знаю! –