none
Загружаемый тип файла в библиотеку RRS feed

  • Вопрос

  • Добрый день, подскажите как для библиотеки документов ограничить тип загружаемых файлов,

    то есть например есть библиотека документов sharepoint 2007, надо чтобы туда пользователи загружали .pdf и .xsn файлы, а при выборе других типов файлов .doc, .docx не было возможности загрузить

    как это можно реализовать? в параметрах библиотеках смотрел не нашел, мне нужно по конкретному библиотеки, а не по всему узлу,  

    можно написать workflow который будет смотреть тип файла, если не будет соответствовать к определенным типом(pdf, xsn)то удалять этот файл, это корректный подход ? или можно реализовать по другому ?

    у кого есть идеи?

    24 апреля 2014 г. 3:35

Ответы

  • Типы загружаемых файлов (точнее блокируемых) задаются в Central Administration -> параметры Веб-приложения -> типы блокируемых файлов.

    Но такая настройка не даст результата на конкретной библиотеке документов, а применится ко всему сразу.

    Необходимо создать custom event reciever на событие onItemAdding и в нем проверять тип файла. Reciever привязываем по URL библиотеки. В случае добавления запрещенного файла делать отмену событию:

    properties.Cancel = true;
    properties.ErrorMessage = "Ай-ай-ай, запрещено добавлять такой-то тип файла";
    

    и не вызывать base metod. (займет минут 10 кодинга)

    Второй вариант: устанавливаем iLoveSharePoint, добавляем workflow action 'Execute PowerShaell Script' и в рабочем процессе в коде на PowerShell проверяем тип файла, при несоответствии удаляем. (плюсы -  нет компилируемого кода. минусы - отладка кода на PowerShell)

    24 апреля 2014 г. 5:01
  • это код на visual studio 2010. а есть на visual studio 2008 для sharepoint 2007

    Я не приводил код для конкретной версии VS/SP, я привел код для решения задачи. Вариант реализации - ваш выбор.

    Беглый поиск:

    Creating custom list event receivers in SharePoint 2007

    HOWTO: Create an Event Handler for SharePoint(MOSS 2007)

    sharepoint 2007 create event receiver

    24 апреля 2014 г. 8:49
  • Добрый день!

    Сделать такое настройками не получится. Написать workflow можно, и это будет работать, но это не совсем наилучший вариань - есть задержка в запуске и все действия осуществятся уже после того, как документ загружен. Самое правильное - написать Event Receiver на событие ItemAdding и просто не давать загружать файлы с неправильным расширением.

    24 апреля 2014 г. 4:42

Все ответы

  • Добрый день!

    Сделать такое настройками не получится. Написать workflow можно, и это будет работать, но это не совсем наилучший вариань - есть задержка в запуске и все действия осуществятся уже после того, как документ загружен. Самое правильное - написать Event Receiver на событие ItemAdding и просто не давать загружать файлы с неправильным расширением.

    24 апреля 2014 г. 4:42
  • спасибо! попробую так сделать, 

    24 апреля 2014 г. 4:54
  • Типы загружаемых файлов (точнее блокируемых) задаются в Central Administration -> параметры Веб-приложения -> типы блокируемых файлов.

    Но такая настройка не даст результата на конкретной библиотеке документов, а применится ко всему сразу.

    Необходимо создать custom event reciever на событие onItemAdding и в нем проверять тип файла. Reciever привязываем по URL библиотеки. В случае добавления запрещенного файла делать отмену событию:

    properties.Cancel = true;
    properties.ErrorMessage = "Ай-ай-ай, запрещено добавлять такой-то тип файла";
    

    и не вызывать base metod. (займет минут 10 кодинга)

    Второй вариант: устанавливаем iLoveSharePoint, добавляем workflow action 'Execute PowerShaell Script' и в рабочем процессе в коде на PowerShell проверяем тип файла, при несоответствии удаляем. (плюсы -  нет компилируемого кода. минусы - отладка кода на PowerShell)

    24 апреля 2014 г. 5:01
  • спасибо, есть пример создание Event Reciver на библиотеку документов, точнее как привязать событие к конкретным библиотеком, в моем случаи к нескольким

    писал Sequence Workflow. там при создание выбираешь, Event Reciver еще не создовал

    можете скинуть настройку feature.xml

    24 апреля 2014 г. 5:21
  • Вот пример привязки к библиотеке по URL:

    <?xml version="1.0" encoding="utf-8"?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
      <Receivers ListUrl="DocLib1">
          <Receiver>
            <Name>EventReceiver1ItemAdding</Name>
            <Type>ItemAdding</Type>
            <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
            <Class>TestEventReciever.EventReceiver1.EventReceiver1</Class>
            <SequenceNumber>10000</SequenceNumber>
          </Receiver>
      </Receivers>
    </Elements>
    

    Замените параметр ListUrl на свой.

    Далее пишем код:

    public class EventReceiver1 : SPItemEventReceiver
    {
        public override void ItemAdding(SPItemEventProperties properties)
        {
            if (properties.List is SPDocumentLibrary)
            {
                if (properties.AfterProperties != null)
                {
                    if (properties.AfterProperties["vti_filesize"] != null)
                    {
                        if (properties.AfterUrl != null)
                        {
                            if (properties.AfterUrl.Contains("docx") || 
                                 properties.AfterUrl.Contains("exe"))
                            {
                                properties.Cancel = true;
                                properties.ErrorMessage = "Нельзя загружать файлы типа docx или exe!";
                            }
                        }
                    }
                }
            }
        }
    }

    Отпишитесь о результате, код написал без проверки по интуиции.

    24 апреля 2014 г. 5:37
  • это код на visual studio 2010. а есть на visual studio 2008 для sharepoint 2007
    24 апреля 2014 г. 8:17
  • это код на visual studio 2010. а есть на visual studio 2008 для sharepoint 2007

    Я не приводил код для конкретной версии VS/SP, я привел код для решения задачи. Вариант реализации - ваш выбор.

    Беглый поиск:

    Creating custom list event receivers in SharePoint 2007

    HOWTO: Create an Event Handler for SharePoint(MOSS 2007)

    sharepoint 2007 create event receiver

    24 апреля 2014 г. 8:49
  • спасибо!
    24 апреля 2014 г. 9:35
  • в целом алгоритм правильный, но есть мелкие ошибки
    28 апреля 2014 г. 10:26
  • Ну а в конечном итоге получилось у вас реализовать поставленную задачу?

    Сообщество может подсказать как сделать, направить на best way реализации, а дальше всё в ваших руках :)

    28 апреля 2014 г. 23:13
  • да получилось реализовать, спасибо
    29 апреля 2014 г. 4:13