Если быть точнее то эта статья описывает как создать дополнительное действие для 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.






Комментариев нет:
Отправить комментарий