Если быть точнее то эта статья описывает как создать дополнительное действие для Sharepoint Designer. Которое как раз и будет получать MD5 текущего документа.
Начнем с создание проекта:
Выбираем в меню файл, создать, проект.
using Microsoft.SharePoint.UserCode;
using System.Security.Cryptography;
Как видите в коде есть комментарии, так, что разобраться можно :)
Начнем с создание проекта:
Выбираем в меню файл, создать, проект.
Выбираем проект Sharepoint 2010. Вводи название, в нашем случае GetMD5
Выбираем развернуть как изолированное решение
Добавляем в уже созданное решение, новый файл класса с называем GetMD5.cs
В самом начале вновь созданного файла добавляем следующие ссылки:
using System.Collections;
using Microsoft.SharePoint;using Microsoft.SharePoint.UserCode;
using System.Security.Cryptography;
А в самом классе нам необходимо создать функцию тип которой будет Hashtable, а в качестве аргументов переменная типа SPUserCodeWorkflowContext, так же при необходимости можно добавить еще несколько аргументов, которые возможно будет передать в эту функцию рабочим процессом создаваемым в Sharepoint Designer. Далее можно уже начинать писать, что же будет делать эта функция. Не буду вдаваться в подробности, у меня получился вот такой вот класс:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; using Microsoft.SharePoint; using Microsoft.SharePoint.UserCode; using System.Security.Cryptography; namespace GetMD5 { class GetMD5 { public Hashtable GetMD5Function(SPUserCodeWorkflowContext context) { Hashtable results = new Hashtable(); try { using (SPSite site = new SPSite(context.CurrentWebUrl)) { using (SPWeb web = site.OpenWeb()) { //Пулучаем файл из URL текущего элемента SPFile file = web.GetFile(context.CurrentItemUrl); MD5 md5 =MD5.Create(); //Получаем массив byte MD5 byte[] hash=md5.ComputeHash(file.OpenBinary()); //Конвертируем этот массив в строку StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) sb.Append(hash[i].ToString("X2")); //Записываем его в переменную MD5-hash results["MD5-hash"] = sb.ToString(); } } } catch (Exception e) { //Если в процессе получения md5 возникла ошибка, то в переменную md5-hash запишем эту ошибку results = new Hashtable(); results["MD5-hash"] = e.Message; } return results; } } }
Как видите в коде есть комментарии, так, что разобраться можно :)
Такс. Ну класс мы уже создали. Теперь необходимо добавить xml которая даст знать Sharepoint Designer'у о том, что есть такое действие как получить MD5 файла. Для этого в проект необходимо добавить пустой элемент. Делаем это точно таким же образом как и добавляли класс.
Открываем получившейся xmlТеперь в elements нам необходимо добавить ветку Action следующего содержания:
Где Name - это как это действие будет называться в Sharepoint Designer.
Assembly - ссылка на эту сборку, тут как правило ничего менять не надо.
ClassName - тут мы указываем ссылку на наш класс. <Имя проекта>.<Имя класса>.
FunctionName - Имя функции в этом классе.
Category - Указывает в какой категории будет находится создано действие.
Теперь в в ветку Action необходимо добавить ветку RuleDesigner
Здесь мы указываем, как это действие будет отображаться в редакторе действий в Sharepoint Designer. Указываем текст и ссылку на переменную MD5-hash. Далее в эту же ветку Action необходимо добавить ветвь Parameters следующиего вида:
Здесь мы описываем 2 параметра __Context, который мы будем получать из рабочего процесса и MD5-hashб которую мы будем возвращать в рабочей процесс. Ну что же, у нас почти все готово. Должен был получиться такой XML файл:
Вот как должен выглядеть проект
Теперь необходимо поменять область для Feature1, для этого щелкаем по ней два раза и выбираем в качестве области "Site".
Ну вот и все. Разворачиваем наше решение
Открываем Sharepoint Designer. Создаем новый рабочий процесс для списка. Открываем меню действия и вуаля:
Что делать с переменной полученной в этом шаге рабочего процесса решать только вам. Можно записать ее в журнал рабочего процесса, можно записать это значение в поле элемента списка. В общем выбор за вами.
Ссылка на проект и сам wsp-файл, который можно развернуть в коллекции решений сайта и просто использовать в Sharepoint Designer.
Комментариев нет:
Отправить комментарий