Использование штрихкодов в SharePoint 2010
Многие компании в качестве корпоративного портала используют SharePoint, в котором есть малоизвестная возможность, автоматически генерировать и назначать уникальный штрихкодовый идентификатор элементу списка или документу. Штрихкод незаменим для обеспечения контроля как над документами в печатном виде так и над другими физическими элементами организации (офисная/компьютерная техника, мебель и прочее).
К сожалению, данная возможность доступна только в SharePoint Standart и Enterprise.
Штрихкоды в SharePoint
По умолчанию SharePoint использует для генерации штрихкодов стандарт Code39 (он же Code 3 of 9, Alpha39). Для поддержки штрихкодов других стандартов необходимо зарегистрировать в SharePoint соответствующие провайдеры. Генерация штрихкода происходит автоматически средствами самого SharePoint при создании нового элемента и не требует от пользователя никаких дополнительных действий.
В соответствие со стандартом Code39 в штрихкоде могут быть использованы латинские символы A-Z, цифры и спецсимволы. SharePoint позволяет указать, будут ли использоваться символы при генерации кода:
Штрихкодовые идентификаторы в 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 минут можно создать для этих целей отдельный сайт, список на нем, описывающий инвентаризуемые ценности и назначить соответствующие права пользователям: