Pull to refresh

Простое создание ссылки (cвязь с документом) на документ в SharePoint

Здравствуйте, товарищи!
Не так давно в нашей компании появилась потребность в создании системы документооборота. В частности требовался функционал согласования документов и хранения всех листов согласования в отдельной библиотеке, но при этом иметь к ним доступ из Архива договоров через связь с документом. О рабочих процессах и автоматизации на эту тему написана целая туча статей. Это не удивительно ведь ни один продукт не будет так работать с 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.
Спасибо за внимание и извиняюсь за форматирование текста — это моя первая статья.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.