Здравствуйте, товарищи!
Не так давно в нашей компании появилась потребность в создании системы документооборота. В частности требовался функционал согласования документов и хранения всех листов согласования в отдельной библиотеке, но при этом иметь к ним доступ из Архива договоров через связь с документом. О рабочих процессах и автоматизации на эту тему написана целая туча статей. Это не удивительно ведь ни один продукт не будет так работать с MS офисом как MS портал. И так приступим.
Данный тип содержимого позволяет хранить ссылку на документ в библиотеке документов вместо самого документа. Это очень удобно для документов, которые хранятся в HTTP (S) Referenceable месте. При добавлении элемента в библиотеке документов и классифицируется как тип контента «Связь с документом». ASPX страница создается и хранится в библиотеке документов в виде файла. Эта страница используется для перенаправления и открытия файла в месте, где связь с документом фактически проживает. Содержание ASPX файла:
Чтож, создадим обычный текстовый файл. Для простоты я создал в корне диска C:\Template.txt и поместим туда вышеуказанный код. Именно этот файл мы и будем изменять при добавлении новой «Связи с документом», а конкретно нас интересует строка:
которая как раз таки и отвечает за транспортировку нас к файлу.
Далее открываем Visual Studio и вставляем код. Для тестирования можно сделать обычную Web Part. И так:
В общем-то всё. Меняем в коде значения на свои и говорим Deploy.
Спасибо за внимание и извиняюсь за форматирование текста — это моя первая статья.
Не так давно в нашей компании появилась потребность в создании системы документооборота. В частности требовался функционал согласования документов и хранения всех листов согласования в отдельной библиотеке, но при этом иметь к ним доступ из Архива договоров через связь с документом. О рабочих процессах и автоматизации на эту тему написана целая туча статей. Это не удивительно ведь ни один продукт не будет так работать с MS офисом как MS портал. И так приступим.
Данный тип содержимого позволяет хранить ссылку на документ в библиотеке документов вместо самого документа. Это очень удобно для документов, которые хранятся в HTTP (S) Referenceable месте. При добавлении элемента в библиотеке документов и классифицируется как тип контента «Связь с документом». ASPX страница создается и хранится в библиотеке документов в виде файла. Эта страница используется для перенаправления и открытия файла в месте, где связь с документом фактически проживает. Содержание ASPX файла:
<%@ Assembly Name='Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' %>
<%@ Register TagPrefix='SharePoint' Namespace='Microsoft.SharePoint.WebControls' Assembly='Microsoft.SharePoint' %>
<%@ Import Namespace='System.IO' %>
<%@ Import Namespace='Microsoft.SharePoint' %>
<%@ Import Namespace='Microsoft.SharePoint.Utilities' %>
<%@ Import Namespace='Microsoft.SharePoint.WebControls' %>
<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<Head> <META Name='progid' Content='SharePoint.Link'>
<!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:URL msdt:dt="string">{0}, {0}</mso:URL>
<mso:ContentType msdt:dt="string">Link to a Document</mso:ContentType>
</mso:CustomDocumentProperties>
</xml><![endif]-->
</head>
<body>
<form id='Form1' runat='server'>
<SharePoint:UrlRedirector id='Redirector1' runat='server' />
</form>
</body>
</html>
Чтож, создадим обычный текстовый файл. Для простоты я создал в корне диска C:\Template.txt и поместим туда вышеуказанный код. Именно этот файл мы и будем изменять при добавлении новой «Связи с документом», а конкретно нас интересует строка:
<mso:URL msdt:dt="string">{0}, {0}</mso:URL>
которая как раз таки и отвечает за транспортировку нас к файлу.
Далее открываем Visual Studio и вставляем код. Для тестирования можно сделать обычную Web Part. И так:
using ( SPSite oSite = new SPSite( "http://Ваш адрес" ) ) {
using ( SPWeb oWeb = oSite.OpenWeb( ) ) {
SPList list = oWeb .Lists["Имя библиотеки"];
//Добавляем ссылку на файл которая будет записана.
string fileLinkUrl = "http://Ссылка на Ваш файл";
//Начинаем редактирование заготовленного файла Template.txt
// Помним, что для использования StringBuilder, TextReader нужно объявить в Reference System.text
StringBuilder builder = new StringBuilder();
using ( TextReader reader = new StreamReader( @"C:\Template.txt" ) ) {
builder.Append( reader.ReadToEnd() );
}
//Заменяем в открытом файле параметр {0} на ссылку
builder.Replace( "{0}", fileLinkUrl );
//Создаем непосредственно файл в библиотеке и говорим, что он .aspx обязательно.
SPFile file = list.RootFolder.Files.Add( "Имя нашей ссылки.aspx", UTF8Encoding.UTF8.GetBytes(builder.ToString()));
//Ну и обновляем библиотеку
SPListItem item = file.Item;
item["Content Type"] = "Связь с документом";
SPFieldUrlValue itemUrl = new SPFieldUrlValue();
itemUrl.Description = "Создано с типового файла";
itemUrl.Url = fileLinkUrl;
item["URL"] = itemUrl;
//Утверждаем изменения
item.Update();
}
}
В общем-то всё. Меняем в коде значения на свои и говорим Deploy.
Спасибо за внимание и извиняюсь за форматирование текста — это моя первая статья.