среда, 24 октября 2012 г.

Получение MD5 файла Sharepoint

Если быть точнее то эта статья описывает как создать дополнительное действие для Sharepoint Designer. Которое как раз и будет получать MD5 текущего документа.



Начнем с создание проекта:
Выбираем в меню файл, создать, проект.
Выбираем проект 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.

Комментариев нет:

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