Додатково до кореневих сервісів на сервері є велика кількість функціональних сервісів, ці сервіси надають функціонал модулів системи: виконання завдань, створення доручень і подій в календарі і т.д.
Кореневі сервіси системи
До кореневих сервісів відносяться:
Для всіх кореневих сервісів передбачено 2 точки входу: WCF HTTP і WCF SOAP. Отримати доступ до тій чи іншій точці можна наступним чином:
/ API / REST /<Имя сервиса>/ Help. для AuthorizationService це буде
У режимі WCF HTTP всі сервіси (крім MetadataService) підтримують як XML так і JSON формати даних. Формат встановлюється за допомогою заголовка:
- Accept: application / xml (або Content-Type: application / xml для POST запиту) - для обміну в форматі XML
- Accept: application / json (або Content-Type: application / json для POST запиту) - для обміну в форматі JSON
Сервіс MetadataService підтримує тільки XML формат обміну даними
Довірені програми та сесії з'єднання
Токен додатки можна налаштувати і подивитися на сторінці сервера Елма
Налаштування токенов зовнішніх додатків здійснюються в розділі адміністрування, при цьому є ряд системних токенов термін закінчення яких встановлюється окремо для кожної програми.
Створення нового зовнішнього застосування і токена
Створимо зовнішню програму і токен для нього. Для цього потрібно перейти в розділ Адміністрування -> Система -> Зовнішнє додатки і натиснути на кнопку «Додати».
Далі заповнюємо необхідні поля для нашого застосування і натискаємо «Зберегти».
Після цього потрібно перейти в створене додаток і включити його.
Тепер можна додати токен. Переходимо у вкладку «Токени додатки», натискаємо на «Додати токен» і вибираємо термін закінчення.
Нове зовнішні додаток готове, і тепер можна з ним працювати.
Довідка поWebAPI
Існує автогенеріруемая довідка по WebAPI. У ній міститься інформація про те, які є доступні сервіси, об'єкти, перерахування та типи даних для властивостей. Вона розташована по відносній посиланням
Розглянемо більш детально кожен з цих пунктів.
Список доступних публічних веб-сервісів
Містить інформацію про те, які веб-сервіси системи доступні для виклику сторонніх додатків.
Кожен з веб-сервісів містить інформацію про методи, які можна викликати з даного веб-сервісу, а також про параметри методу і повернутому значенні.
Також кожен сервіс містить інформацію про способи виклику методів: або через WSDL. або через Http запити.
Інформація про виклик через WSDL
Інформація про виклик через Http запити
Перейшовши всередину методу, можна дізнатися інформацію про те, в якому форматі необхідно створювати запит і в якому вигляді прийде відповідь.
Список типів об'єктів (сутностей)
Містить інформацію про всі об'єкти системи, в тому числі і про процеси.
Кожен представлений тут тип містить інформацію про своїх властивостях. У процесах міститься інформацію про їх контексті.
список перерахувань
Містить інформацію про всі доступні перерахування системи.
Кожне представлене тут перерахування зберігає інформацію про своїх значеннях.
Список типів даних для властивостей
Містить інформацію про ідентифікатори типу даних. тут:
- Сутність (72ed98ca-f260-4671-9bcd-ff1d80235f47)
- Тип проекту (d1397b84-f5ab-4665-984f-fdeb8f77eb0b)
- Тип документа (a3a41ae4-30e2-4c46-bba2-ee55efdc7b90)
- Тип РКК (691ed407-4007-4530-834b-0c6a34bb9af1)
- Перерахування (849c1ac9-4d46-4194-8cbb-43f84adf9c17)
2. Ідентифікатор підтипу даних - це унікальний ідентифікатор кожного типу об'єкта. Даний ідентифікатор неможливо повтори.
приклад іспользованіяWebAPI
Є два варіанти взаємодії з WebAPI кодом: через WSDL- сервіси і через Http- запити. Нижче представлені приклади мінімальної роботи з веб апі для кожного варіанта.
Робота черезHttp-запити
Оскільки йде робота з потоком, після використання функції ReadToEnd () символів у змінній sr НЕ буде (залишиться тільки порожній рядок). Результатом виконання функції буде ось така відповідь:
<
"AuthToken": "39c45713-59c0-48db-aeee-77e93579b330",
"CurrentUserId": "1",
"Lang": "ru-RU",
"SessionToken": "0B56F7016540A75C5352942FDD3E40FAC7E73663B3BD1279B39780215603285F28432FD2D2940842A5BFF83BA97830A07577004F6CE61E10E2A9C1885A74192B"
>
- typeUid - унікальний ідентифікатор типу «Завдання».
- entityId - ідентифікатор об'єкта
Тут представлена лише частина відповіді, тому що вся відповідь занадто великий. Якщо вам потрібна тільки частина полів будь-якого об'єкта, використовуйте функцію LoadTree. Щоб завантажити декілька об'єктів одним запитом, використовуйте функцію Query (для завантаження всіх полів об'єкта) або QueryTree (для завантаження певних полів об'єкта).
Нижче наведено код виклику функції Query.
- typeUid - унікальний ідентифікатор типу «Завдання».
- eqlQuery - запит на мові EQL.
- limit - кількість одержуваних елементів
- offset - початковий елемент
- sort - сортування
- filterProviderUid - унікальний ідентифікатор провайдера фільтрації
- filterProviderData - дані для провайдера фільтрації
- filter - значення полів для фільтра суті
В поле «Result» повернулося True. Це означає, що завдання було успішно завершена. Якщо з якої-небудь причини цього не вдалося зробити, в поле «Result» повернеться False.
РаботачерезWSDL
При успішному додаванні сервіс з'явиться в «Обозревателе рішень».
Аналогічним чином додаємо посилання на IEntityService.
Тут нам знадобиться простір імен System.ServiceModel.Web.
Приступаємо до роботи. Для зручності створимо клас WsdlService і почнемо в ньому роботу.
Мінлива _entityServiceFactory (і подібні) служить для створення каналу зв'язку з сервером. Вони не започатковано в функції TestStart (). Сам же канал зв'язку створюється за допомогою CreateChannel ().
Розглянемо функцію GetAuthToken (). Мінлива authorizationService - це вже створений сервіс, всередині себе містить методи, які описані в довідці по WebAPI.
Використання каналу відбувається всередині using (...) <…>. Це потрібно для передачі необхідних заголовків при використанні різних функцій сервісу.
Відловив цю помилку, можна отримати наступну інформацію:
- Повідомлення про помилку
- Веб-код помилки (приклад: 400, 401, 500)
- Внутрішню помилку (якщо така є)
і багато іншого.
Помилка з кодом 500 пов'язана з внутрішньою помилкою сервера. Найчастіше причиною для неї можуть бути:
- Помилка при виконанні коду на сервері
- Відсутність конкретного об'єкта (приклад: використання функції Load)
- Відсутність певного типу об'єкта (коли typeUid не існує)
Теоретично можливі помилки і з іншими кодами, але вони дуже рідкісні.
Переходимо до завантаження завдання. Додамо в створений клас функцію LoadTask ().
Тут представлена лише частина полів, що повертаються функцією.
Деякі функції може відобразитися наступна помилка:
Додаткові відомості: Перевищено квота максимального розміру повідомлення для вхідних повідомлень (65536). Для збільшення квоти використовуйте властивість MaxReceivedMessageSize відповідного елемента прив'язки »
Це відбувається тому, що відповідь від сервера приходить занадто великий, і обмеження на вашому додатку не може його пропустити. Щоб цього уникнути, використовуйте ініціалізацію змінних _entityServiceFactory наступним чином: