Довідковий матеріал

Отримання списку спільних інформаційних баз

Описано отримання списку спільних інформаційних баз через 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, цей список додаватиметься до списку інформаційних баз програми запуску після виконання аутентифікації.

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