Справочный материал

Получение списка общих информационных баз

Описано получение списка общих информационных баз через Web-сервис, требования к аутентификации и параметры методов CheckInfoBases и GetInfoBases. Приведен пример конфигурации и публикаций Web-сервиса.. Общая информация. Получение через Web-сервис

Два защищённых веб-шлюза передают обновлённый список общих баз: первая проверка открыта, вторая требует ключа доступа.

Общая информация

Получение через Web-сервис

 

Общая информация

Примечание

Доступно только для лицензии КОРП.

При удаленной работе, например через веб-сервер, может возникнуть необходимость в получении списка общих информационных баз. В этом случае параметр CommonInfoBases конфигурационного файла 1cestart.cfg не позволяет получить этот список. Для этого следует воспользоваться возможностью публикации списка общих информационных баз через интернет-сервис. В таком случае список можно получать как через HTTP-запросы, так и через Web-сервисы.

Если список общих информационных баз получается через HTTPS-соединение, сертификат сервера, с которого выполняется получение списка, проверяется с помощью сертификатов корневых удостоверяющих центров, полученных из системного хранилища соответствующей ОС.

Получение через Web-сервис

Чтобы получать список общих информационных баз через Web-сервис, необходимо опубликовать специальный Web-сервис, который будет возвращать этот список. Рассмотрим его работу подробнее.

Описание функционирования

Интерактивная программа запуска (1cv8s) может получать список общих баз как из локальной сети, так и через Интернет. Получение списка баз через Интернет выполняется только при интерактивном запуске и при условии, что указан адрес для получения списка общих информационных баз — параметр InternetService или WebCommonInfoBases файла 1cestart.cfg.

Для надлежащего функционирования механизм получения списка общих информационных баз должен соответствовать следующим требованиям:

  • вызов метода WebCommonInfoBases.CheckInfoBases() должен быть анонимным;
  • вызов метода WebCommonInfoBases.GetInfoBases() должен выполняться с аутентификацией;
  • информационная база, возвращающая списки общих баз, должна содержать список пользователей, которые могут обращаться к ней за списком баз.

На первом шаге анонимно вызывается метод WebCommonInfoBases.CheckInfoBases(). Если интерактивная программа запуска открывается на этом компьютере для этого пользователя впервые, в качестве значений параметров ClientID и InfoBaseCheckCode передается 00000000-0000-0000-0000-000000000000. Если вызов выполняется не впервые, параметрами передаются код клиента и код, идентифицирующий текущий список общих информационных баз. Метод Web-сервиса должен определить, нужно ли обновлять список общих информационных баз для этого клиента. Если это необходимо, выходной параметр InfoBasesChanged должен получить значение True/Истина, а параметр URL должен содержать адрес Web-сервиса, в котором реализован требующий аутентификации метод WebCommonInfoBases.GetInfoBases(). В противном случае параметр InfoBasesChanged должен получить значение False, а параметр URL должен содержать пустую строку.

Алгоритм проверки неизменности списка общих информационных баз не регламентируется и может быть произвольным. Следует учитывать, что интерактивная программа запуска не вычисляет значение кода, идентифицирующего список общих информационных баз, а только сохраняет значение, переданное при предыдущем вызове Web-сервиса.

Если вызов метода WebCommonInfoBases.CheckInfoBases() указал на необходимость обновить список, интерактивная программа запуска вызывает метод Web-сервиса WebCommonInfoBases.GetInfoBases(). Web-сервис расположен по адресу, который функция WebCommonInfoBases.CheckInfoBases() вернула в параметре URL. Метод GetInfoBases() должен сопоставить пользователя, от имени которого выполнена аутентификация Web-сервиса, с каким-либо кодом клиента. Сопоставление может быть «персональным» — пользователь идентифицирует себя персональным именем пользователя и паролем и получает свой персональный список общих информационных баз. Также сопоставление может быть «ролевым» — пользователь идентифицирует свою принадлежность к определенной роли, например Оператор, Кладовщик и т. д., и получает список общих информационных баз, общий для всех пользователей, выполняющих одну роль. Следует учитывать такую особенность: в первом случае информационная база, реализующая метод GetInfoBases(), должна содержать список всех пользователей, которые могут запускать интерактивную программу запуска (1cv8s), подключенную к Web-сервису, а во втором случае в списке пользователей достаточно создать имена ролей.

Метод GetInfoBases() должен вернуть три значения:

  • код клиента, если он не указан;
  • список общих информационных баз в формате v8i;
  • значение кода, идентифицирующего переданный список общих информационных баз. Это значение будет передано методу WebCommonInfoBases.CheckInfoBases() при следующей проверке необходимости обновления списка общих информационных баз.

Если список общих информационных баз получается впервые, код клиента — параметр ClientID — будет равен значению 00000000-0000-0000-0000-000000000000.

Также следует учитывать следующие особенности:

  • Информационная база, в которой реализован Web-сервис WebCommonInfoBases, должна быть опубликована в двух разных публикациях — это обусловлено необходимостью обеспечить разный уровень аутентификации для вызова методов CheckInfoBases() и GetIndoBases().
  • Анонимный доступ организуется путем явного указания пользователя, от имени которого выполняется доступ к файлу default.vrd.
  • Пользователь, от имени которого организован анонимный доступ, должен только определять, изменился ли список для переданного значения ClientID, но не иметь возможности вызвать метод получения списка информационных баз.
  • Ни одна публикация, обслуживающая Web-сервис WebCommonInfoBases, не должна предоставлять возможность работать через веб-клиент.
  • Если список общих информационных баз используется мобильным клиентом, в таком файле должны быть корректные значения параметра MobilePublicKey для тех информационных баз, которые будут отображаться в мобильном клиенте.

Описание Web-сервиса

Имя Web-сервиса: WebCommonInfoBases. Тайм-аут выполнения любого метода Web-сервиса составляет 3 секунды.

Методы Web-сервиса приведены ниже.

CheckInfoBases

Описание:

Этот метод используется интерактивной программой запуска (1cv8s) для определения необходимости получения списка общих информационных баз.

Параметры:

ClientID входной

Тип: String/Строка. Содержит идентификатор клиента, для которого проверяется актуальность списка общих информационных баз.

InfoBaseCheckCode входной

Тип: String/Строка. Код, идентифицирующий список информационных баз. Код должен однозначно идентифицировать текущий список информационных баз. При любом изменении списка код должен быть изменен и не должен совпадать ни с одним кодом, ранее использовавшимся для этого идентификатора клиента.

InfoBasesChanged входной

Тип: Boolean/Булево. Признак того, что список общих информационных баз необходимо получить повторно.

URL входной

Тип: String/Строка. URL, по которому следует запрашивать список общих информационных баз в случае его изменения со времени предыдущего обращения.

Возвращаемое значение:

Тип произвольный, значение игнорируется.

GetInfoBases

Параметры:

ClientID входной/выходной

Тип: String/Строка. Содержит идентификатор клиента, для которого выполняется получение списка общих информационных баз. Если идентификатор клиента не задан, то есть равен значению 00000000-0000-0000-0000-000000000000, метод должен назначить идентификатор клиента и вернуть его в этом параметре.

InfoBaseCheckCode входной/выходной

Тип: String/Строка. Значение кода, идентифицирующего список общих информационных баз, возвращаемого этим методом в параметре InfoBases.

InfoBases входной/выходной

Тип: String/Строка. Список общих информационных баз в формате v8i.

Возвращаемое значение:

Тип произвольный, значение игнорируется.

Пример реализации

Рассмотрим пример Web-сервиса для получения списка общих информационных баз.

Примечание

Приведенный пример не является завершенным. Он предназначен для демонстрации работы механизма.

Web-сервис представляет собой простую конфигурацию, содержащую один справочник и один Web-сервис.

Справочник имеет следующие характеристики:

  • Имя CommonBasesList.
  • Тип кода String/Строка, длина 36 символов.
  • Реквизиты:

    • Имя ListCode, тип UUID/УникальныйИдентификатор.
    • Имя IBList, тип String/Строка, неограниченной длины.
  • Другие параметры установлены по умолчанию.

Этот справочник будет хранить список идентификаторов клиентов — стандартный реквизит Code/Код, список общих информационных баз — реквизит IBList, а также текущую версию списка информационных баз — реквизит ListCode, вычисленную при последнем получении списка для этого клиента. Версия списка является уникальным идентификатором, который изменяется при каждом сохранении элемента справочника. Для этого в модуле объекта определен обработчик BeforeWrite:

Procedure BeforeWrite(Cancel)
     ListCode = New UUID;
EndProcedure

Также в конфигурации должен быть создан Web-сервис WebCommonInfoBases, для которого необходимо определить операции:

  • CheckInfoBases, свойство Тип возвращаемого значения установлено в значение string, флажок Возможно пустое значение установлен. Для других свойств заданы значения по умолчанию.
  • GetInfoBases, свойство Тип возвращаемого значения установлено в значение string, флажок Возможно пустое значение установлен. Для других свойств заданы значения по умолчанию.

Текст операций Web-сервиса:

Funсtion CheckInfoBases(ClientID, InfoBasesCheckCode, InfoBaseChanged, URL)
     If ClientID = "00000000-0000-0000-0000-000000000000"
         AND InfoBasesCheckCode = "00000000-0000-0000-0000-000000000000" Then
         // это первое обращение клиента
         InfoBaseChanged = True;
         URL = "/listservice2/ws/WebCommonInfoBases";
         Return "";
     EndIf;
     Client = Catalog.CommonBasesList.FindByCode(ClientID);
     If Client.IsEmpty() Then
         // нет такого клиента
         InfoBaseChanged = False;
     Else
         // проверим, что список клиента и наш список одинаковы 
         If InfoBasesCheckCode = Client.ListCode Then
             // список не изменился
             InfoBaseChanged = False;
             URL = "";
         Else
             // список изменился
             InfoBaseChanged = True;
             URL = "/listservice2/ws/WebCommonInfoBases";
         EndIf;
     EndIf;
     Return "";
EndFunсtion
Funсtion GetInfoBases(ClientID, InfoBasesCheckCode, InfoBases)
     If ClientID = "00000000-0000-0000-0000-000000000000" Then
         CurrentUser = InfoBaseUsers.CurrentUser();
         // необходимо завести нового клиента
         // кодом элемента справочника будет уникальный идентификатор
         // пользователя информационной базы
         Base = Catalog.CommonBasesList.CreateItem();
         Base.Code = String(CurrentUser.UUID);
         // именем клиента будет имя пользователя
         Base.Name = CurrentUser.Name;
         // список ИБ пуст при первом обращении
         Base.IBList = "";
         Base.Write();
         // сформируем возвращаемые значения Web-сервиса.
         InfoBasesCheckCode = Base.ListCode;
         InfoBases = Base.IBList;
         ClientID = Base.Code;
     Else
         // здесь получим данные для существующего кода клиента
         Client = Catalog.CommonBasesList.FindByCode(ClientID);
         If Client.IsEmpty() Then
             // нет такого клиента
             InfoBasesCheckCode = "";
             InfoBases = "";
         Else
             InfoBasesCheckCode = Client.ListCode;
             InfoBases = Client.IBList;
         EndIf;
     EndIf;
     Return "";
EndFunсtion

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

  • http://localhost/listservice — анонимный Web-сервис;
  • http://localhost/listservice2 — Web-сервис с аутентификацией;

В информационной базе должны существовать пользователи Анонимный и, например, пользователи с именами Оператор, Кладовщик, Бухгалтер.

Файл default.vrd, описывающий публикацию по адресу http://localhost/listservice, имеет вид:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://bas-soft.eu/8.2/virtual-resource-system"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        base="/listservice"
        ib="File=X:\DB\ListBase;Usr=Анонимный"
        enable="false">
    <ws>
        <point name="WebCommonInfoBases"
                enable="true"/>
    </ws>
</point>

Файл default.vrd, описывающий публикацию по адресу http://localhost/listservice2, имеет вид:

<?xml version="1.0" encoding=«UTF-8"?>
<point xmlns="http://bas-soft.eu/8.2/virtual-resource-system"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        base="/listservice2"
        ib=«File= X:\DB\ListBase;"
        enable="false">
    <ws>
        <point name="WebCommonInfoBases"
                enable="true"/>
    </ws>
</point> 

В настройках веб-сервера, для которого выполнены публикации Web-сервиса получения списка общих информационных баз, должна быть запрещена обработка HTTP-запроса HEAD, по крайней мере для виртуальных каталогов, через которые выполняется обращение к Web-сервису. Иначе Web-сервис не будет использоваться.

В форме настройки окна запуска необходимо добавить Интернет-сервис с приведенным выше адресом, указав суффикс ws: http://localhost/listservice/ws/.

После завершения настройки следует запустить программу запуска. На запрос ввести имя пользователя и пароль для доступа к Web-сервису следует указать имена Оператор, Кладовщик, Бухгалтер. В справочнике CommonBasesList появятся соответствующие записи. Если в реквизит IBList каждого элемента справочника добавить свой список в формате v8i, этот список будет добавляться к списку информационных баз программы запуска после выполнения аутентификации.

Записаться по телефону