Использование штрихкодов в SharePoint 2010

Многие компании в качестве корпоративного портала используют SharePoint, в котором есть малоизвестная возможность, автоматически генерировать и назначать уникальный штрихкодовый идентификатор элементу списка или документу. Штрихкод незаменим для обеспечения контроля как над документами в печатном виде так и над другими физическими элементами организации (офисная/компьютерная техника, мебель и прочее).
К сожалению, данная возможность доступна только в SharePoint Standart и Enterprise.

Пример штрихкода в SharePoint 2010

Пример штрихкода в SharePoint 2010

Штрихкоды в SharePoint

По умолчанию SharePoint использует для генерации штрихкодов стандарт Code39 (он же Code 3 of 9, Alpha39). Для поддержки штрихкодов других стандартов необходимо зарегистрировать в SharePoint соответствующие провайдеры. Генерация штрихкода происходит автоматически средствами самого SharePoint при создании нового элемента и не требует от пользователя никаких дополнительных действий.

В соответствие со стандартом Code39 в штрихкоде могут быть использованы латинские символы A-Z, цифры и спецсимволы. SharePoint позволяет указать, будут ли использоваться символы при генерации кода:

Параметры генерации штрихкода в SharePoint 2010

Параметры генерации штрихкода в SharePoint 2010

Штрихкодовые идентификаторы в SharePoint реализованы в виде политики управления сведениями типа содержимого. Сами политики могут быть настроены как на уровне коллекции сайтов, так и для конкретного типа содержимого в конкретном списке или библиотеке документов.

Политика для коллекции сайтов

Для настройки политики на уровне коллекции сайтов надо на странице параметров узла в разделе Администрирование семейства сайта перейти по ссылке Политики семейства сайтов:

На странице Политики можно просмотреть все политики управления сведениями, созданные для данной коллекции сайтов:

Для добавления штрихкодов в политику управления сведениями необходимо в разделе Штрихкоды поставить флаги:

  • Включить Штрихкоды элементу списка/библиотеки документов будет присваиваться штрихкодовый идентификатор;
  • Запрашивать вставку штрихкода перед сохранением или печатью - при попытке распечатать документ, используя Microsoft Office, пользователю будет предложено предварительно вставить в документ штрихкод;

Политика для типа содержимого

Также SharePoint позволяет настроить политику и включить в неё генерацию штрихкода для конкретного типа содержимого в списке или библиотеке документов. Для этого необходимо на странице свойств типа содержимого перейти по ссылке Параметры политики управления сведениями:

После чего будет предложено выбрать политику из списка тех, которые присутствуют в данной коллекции сайтов или определить свою политику:

Результат добавления штрихкода

После включения штрихкода в политику управления сведениями типа содержимого будут добавлены следующий поля:

  • Штрихкод - картинка (ссылка на неё);
  • Значение штрихкода;

Работать с этими полями можно так же как и с обычными полями списка: добавлять в представления списка, делать вычисляемые поля на их основе и прочее. API позволяет реализовать этот механизм программно. Об этом чуть ниже.

Штрихкод и документ Microsoft Office

При использовании Microsoft Office можно запретить печать документов без предварительной вставки в него штрихкода. Если в политике управления сведениями стоит флаг Запрашивать вставку штрихкода перед сохранением или печатью, то Microsoft Office предложит это сделать при попытке распечатать документ:

Также это можно сделать самостоятельно простым нажатием соответствующей кнопки на панели инструментов:

Применение штрихкодов в решениях

С применением штрихкодов пользователями все просто и понятно. Теперь о том, как применять штрихкоды в своих решениях.

Поддержка штрихкодов в LINQ to SharePoint

Для начала я покажу как реализовать поддержку новых полей при использовании в качестве провайдера доступа к данным Linq to SharePoint. В классах, описывающий тип содержимого (content type) достаточно создать два поля (для штрихкода и значения штрихкода):

/// <summary>
/// Значение штрихкода
/// </summary>
[Column(Name = "_dlc_BarcodeValue", Storage = "_barCodeValue", 
 ReadOnly = true, FieldType = "Text")]
public string BarCodeValue
{
    get
    {
        return _barCodeValue;
    }
}
 
/// <summary>
/// Ссылка на изображение штрихкода
/// </summary>
[Column(Name = "_dlc_BarcodePreview", Storage = "_barCodeUrl", 
 ReadOnly = true, FieldType = "Url")]
public string BarCodeURL
{
    get
    {
        return _barCodeUrl;
    }
}

Сами поля в типе содержимого описывать не надо. При включении в политике управления сведениями штрихкода SharePoint на эти поля никакого внимания не обратит, и создаст новые поля. Сложность здесь заключается в том, что этих полей при развертывании решения нет. И указывать в инструкции по установке, что для работы необходимо включать в политику управления сведениями штрихкод нет смысла - эти инструкции никто не читает. Поэтому необходимо делать это программно.

Добавление штрихкодов в политику программно

Вот пример метода FeatureActivated из FeatureReceiver'а который включает политику для определенного типа содержимого.

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    // ID политики штрихкодов
    const string featureId = "Microsoft.Office.RecordsManagement.PolicyFeatures.Barcode";
    // Данные для политики штрихкодов
    const string customData = "<barcode />";
    // Получаем текущий сайт
    var web = properties.Feature.Parent as SPWeb;
    if (web == null) return;
    // Получаем список для которого будем добавлять поитику
    var list = web.Lists["Employees"];
    // Получаем тип содержимого
    var ct = list.ContentTypes["Employee"];
    // Получаем текущую политику для данного типа содержимого
    var policyAudit = Policy.GetPolicy(ct);
    if (policyAudit == null)
    {
        // Если политика отсутствует, то создаем её
        Policy.CreatePolicy(ct, null);
        policyAudit = Policy.GetPolicy(ct);
    }
    policyAudit.Name = ct.Name;
    // Проверяем включен ли штрихкод в политику
    if (policyAudit.Items[featureId] == null)
    {
        // Включаем штрихкод в политику
        policyAudit.Items.Add(featureId, customData);
        // Сохраняем внесенные изменения
        policyAudit.Update();
    }
}

Теперь при активации фичи для типа содержимого Employee в списке Employees будет создана политика управления сведениями с включенной в неё генерацией штрихкодов.

Ошибки при активации фичи

При развертывании решения во время активации фичи, возможно возникновение вот такого исключения:

System.ArgumentException: Invalid field name.

Причина в том, что не активирована фича на уровне коллекции сайтов Инфраструктура публикации SharePoint Server (SharePoint Server Publishing Infrastructure), которая используется политиками управления сведениями. Для того, чтобы указать эту зависимость, необходимо описать её в определении фичи:

<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
  <ActivationDependencies>
    <ActivationDependency FeatureId="{f6924d36-2fa8-4f0b-b16d-06b7250180fa}" />
  </ActivationDependencies>
</Feature>

После этого SharePoint при активации фичи будет предупреждать о том, что есть другие фичи, активация которых предварительно необходима.

Заключение

В заключении я приведу пару примеров применения штрихкодов.

Первое, что приходит на ум - операция обратная печати документа. Т.е. поиск документа на портале, имея на руках его печатную версию. Без применения штрихкодовых идентификаторов эта операция может продолжаться сколь угодно долго и в 80% случаев закончится ничем.

Второй, не менее популярный сценарий инвентаризация имущества, потребность в которой есть у любой организации. Используя SharePoint 2010 в качестве корпоративного портала, всего за 20-30 минут можно создать для этих целей отдельный сайт, список на нем, описывающий инвентаризуемые ценности и назначить соответствующие права пользователям:

Виталий Жуков

Виталий Жуков

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.

Смотрите также

Новый сайт группы SharePoint. Как это работает

Новый сайт группы SharePoint. Как это работает

SharePoint 2019 Preview

SharePoint 2019 Preview

Управление большими списками/библиотеками в SharePoint

Управление большими списками/библиотеками в SharePoint

SharePoint 2013/2016. Настройка хлебных крошек

SharePoint 2013/2016. Настройка хлебных крошек

SharePoint 2016. Кастомизация меню SuiteBar

SharePoint 2016. Кастомизация меню SuiteBar

SharePoint 2016. Кастомизация SuiteBar

SharePoint 2016. Кастомизация SuiteBar

Домашняя страница сайта SharePoint

Домашняя страница сайта SharePoint

Презентация и скрипты со встречи сообщества по SharePoint и Office 365

Презентация и скрипты со встречи сообщества по SharePoint и Office 365

PowerShell DSC. SharePoint

PowerShell DSC. SharePoint

PowerShell DSC. Сертификат для шифрования пароля

PowerShell DSC. Сертификат для шифрования пароля

PowerShell DSC. Учетные записи

PowerShell DSC. Учетные записи

Встреча сообщества по SharePoint и Office 365

Встреча сообщества по SharePoint и Office 365

SharePoint 2016. QR-code

SharePoint 2016. QR-code

Возможности SharePoint 2010/2013/2016

Возможности SharePoint 2010/2013/2016

Gmail IIS SMTP relay

Gmail IIS SMTP relay

SharePoint 2016. Извещения мозаикой

SharePoint 2016. Извещения мозаикой

Сертификация SharePoint по-новому

Сертификация SharePoint по-новому

SharePoint. Получение списка сайтов

SharePoint. Получение списка сайтов

Планирование фермы SharePoint

Планирование фермы SharePoint

Обзор SharePoint Education. Часть 3

Обзор SharePoint Education. Часть 3

SharePoint Excel Services. Отображение диаграммы на странице

SharePoint Excel Services. Отображение диаграммы на странице

SharePoint 2016 Release Candidate

SharePoint 2016 Release Candidate

Обзор SharePoint Education. Часть 2

Обзор SharePoint Education. Часть 2

Обзор SharePoint Education. Часть 1

Обзор SharePoint Education. Часть 1

SharePoint 2013 Образование. Установка и настройка

SharePoint 2013 Образование. Установка и настройка

SharePoint 2016 IT Preview

SharePoint 2016 IT Preview

SharePoint и SMS. Часть 2. Регистрация OMS-сервиса

SharePoint и SMS. Часть 2. Регистрация OMS-сервиса

SharePoint и SMS. Часть 1. Создание OMS веб-сервиса

SharePoint и SMS. Часть 1. Создание OMS веб-сервиса

SharePoint Day: 14 декабря, Москва

SharePoint Day: 14 декабря, Москва

RuSUG 17.10.2013. Презентация с моего доклада о новом поиске в SharePoint 2013

RuSUG 17.10.2013. Презентация с моего доклада о новом поиске в SharePoint 2013

SharePoint 2013 Ribbon API. Версии 14.3 и 15.4

SharePoint 2013 Ribbon API. Версии 14.3 и 15.4

Встреча RuSUG 17-го октября

Встреча RuSUG 17-го октября

SharePoint 2013. Служба ServiceDesk за 8 часов либо правильный проект

SharePoint 2013. Служба ServiceDesk за 8 часов либо правильный проект

SharePoint 2010/2013. Локализация данных

SharePoint 2010/2013. Локализация данных

Список возможностей SharePoint 2013

Список возможностей SharePoint 2013

SharePoint 2013. Типы полей

SharePoint 2013. Типы полей

SharePoint 2013 Enterprise Search. Часть 2. Создание обработчика контента

SharePoint 2013 Enterprise Search. Часть 2. Создание обработчика контента

SharePoint 2013 Enterprise Search. Часть 1. Логическая архитектура

SharePoint 2013 Enterprise Search. Часть 1. Логическая архитектура

SharePoint Ribbon. Создание многоуровневого меню

SharePoint Ribbon. Создание многоуровневого меню

SharePoint Ribbon. Использование ColorPicker'а

SharePoint Ribbon. Использование ColorPicker'а

Разработка для SharePoint. Как это было и как это будет

Разработка для SharePoint. Как это было и как это будет

SharePoint. История социализма за 10 лет

SharePoint. История социализма за 10 лет

SharePoint 2013 Preview

SharePoint 2013 Preview

Unable to locate the xml-definition for FieldName

Unable to locate the xml-definition for FieldName

SharePoint 2010. Апрельский накопительный пакет обновлений

SharePoint 2010. Апрельский накопительный пакет обновлений

Не удалось найти XML-файл в указанном расположении

Не удалось найти XML-файл в указанном расположении

Служба синхронизации профилей пользователей. Ошибки

Служба синхронизации профилей пользователей. Ошибки

Делаем сайт на SharePoint 2010. Построение иерархии страниц

Делаем сайт на SharePoint 2010. Построение иерархии страниц

Делаем сайт на SharePoint 2010. Брендинг Wiki-страниц

Делаем сайт на SharePoint 2010. Брендинг Wiki-страниц

Делаем сайт на SharePoint 2010. Оптимизация

Делаем сайт на SharePoint 2010. Оптимизация

Делаем сайт на SharePoint 2010. Брендинг

Делаем сайт на SharePoint 2010. Брендинг

Обработка большого количества элементов в SharePoint

Обработка большого количества элементов в SharePoint

Получение уникальных значений поля списка

Получение уникальных значений поля списка

DeskWork 5. Функциональность (продолжение)

DeskWork 5. Функциональность (продолжение)

Сокрытие информации о пользователе создавшем/изменившем элемент

Сокрытие информации о пользователе создавшем/изменившем элемент

Error : Code blocks are not allowed in this file

Error : Code blocks are not allowed in this file

SharePoint Client Object Model. Управляемый код

SharePoint Client Object Model. Управляемый код

Использование контрола HtmlEditor. Часть 3

Использование контрола HtmlEditor. Часть 3

SharePoint 15 SDK

SharePoint 15 SDK

PeopleEditor и Internet Explorer 9

PeopleEditor и Internet Explorer 9

Использование контрола HtmlEditor. Часть 2

Использование контрола HtmlEditor. Часть 2

Использование контрола HtmlEditor. Часть 1

Использование контрола HtmlEditor. Часть 1

Пропадающий контрол выбора представления списка

Пропадающий контрол выбора представления списка

Развертывание библиотеки документов с файлами

Развертывание библиотеки документов с файлами

Отключенные учетные записи и PeoplePicker

Отключенные учетные записи и PeoplePicker

Пропадающий TextBox в Telerik Reporting

Пропадающий TextBox в Telerik Reporting

Длительные операции в SharePoint. Request timed out

Длительные операции в SharePoint. Request timed out

Длительные операции в SharePoint. Изнутри

Длительные операции в SharePoint. Изнутри

Длительные операции в SharePoint. Снаружи

Длительные операции в SharePoint. Снаружи

DeskWork. Версия 5.1

DeskWork. Версия 5.1

DeskWork 5. Часть 2. Функциональность

DeskWork 5. Часть 2. Функциональность

DeskWork 5. Часть 1. Установка

DeskWork 5. Часть 1. Установка

SharePoint 2010. Random ListItem

SharePoint 2010. Random ListItem

Custom ListDefinition. Отключаем диалоги

Custom ListDefinition. Отключаем диалоги

SharePoint 2010 UpdatePanel. Request Notification

SharePoint 2010 UpdatePanel. Request Notification

Получение размера вложений SPListItem'а

Получение размера вложений SPListItem'а

SharePoint 2010. Переопределение форм типа содержимого

SharePoint 2010. Переопределение форм типа содержимого

SharePoint 2007/2010. Привязываем EventReceiver к типу содержимого

SharePoint 2007/2010. Привязываем EventReceiver к типу содержимого

Изменяем appSettings в config-файле

Изменяем appSettings в config-файле

SharePoint 2010. Добавляем сборку в пакет

SharePoint 2010. Добавляем сборку в пакет

SharePoint 2007/2010. The security validation for this form is invalid

SharePoint 2007/2010. The security validation for this form is invalid

SharePoint 2010. JavaScript IntelliSence

SharePoint 2010. JavaScript IntelliSence

SharePoint 2010. Локализация SiteDefinition

SharePoint 2010. Локализация SiteDefinition

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Получение данных из нескольких списков и узлов

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Максимальное/минимальное значение поля в списке

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. Свой контрол на панели свойств веб-парта

SharePoint 2007. База данных содержимого

SharePoint 2007. База данных содержимого

SharePoint 2007. Проверка на наличие элемента в списке

SharePoint 2007. Проверка на наличие элемента в списке