2015-12-23 10 views
1

Мне нужно использовать метод 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
Ссылка на документ

Однако удаление исходного файла не отключает ссылку. Он все еще работает нормально. Так что это не ссылка в конце концов.

+0

Я могу предложить только это сообщение в блоге, которое могло бы помочь: https://erroreimprevisto.wordpress.com/2014/05/10/sharepoint-2013-programmatically-add-link-to-a-document-file -в-документ-библиотека /. Не самая элегантная помощь, которую я знаю! –

ответ

0

Мне удалось найти решение с сообщением this.
Вкратце:
Невозможно добавить SPLink напрямую, вы должны подделать его. Сообщение описывает, как создать файл .aspx, который будет генерироваться sharepoint при добавлении ссылки с использованием графического интерфейса. Этот файл затем добавляется как новый элемент в библиотеке и представляет ссылку.