Перейти к содержанию

Web-сервисы в JS

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

Использование методов Valhalla

ℹ️ API веб-сервиса можно посмотреть, добавив в браузере к адресу вашего приложения "Первая Форма" строку /swagger:

https://\<your_1forma>/swagger Для методов Valhalla самым простым способом вызова является использование jQuery методов $.get() и $.post(), они используются для http и ajax запросов.

Конкретный метод jQuery выбирается на основании типа используемого метода приложения (указано в описании самого метода).

В качестве первого параметра передается адрес самого метода (можно использовать относительные, а не абсолютные ссылки).

В качестве второго параметра передаются сами данные для обработки в формате json (необходимая конструкция присутствует в описании самого метода).

Пример использования методов Valhalla:

//создание новой задачи

$.post ('http://1forma.obi.info/app/v1.1/api/tasks?9;,
   {
   "subcatId": 123,
   "text": "",
   "owner": 3,
   "createFromParentOwner": true,
   "performers": [],
   "separateTaskForEachPerformer": true,
   "subscribers": [],
   "subscribeGroups": [],
   "copySubscribers": true,
   "notifyUsers": [],
   "orderedTime": "",
   "lockOrderedTime": false,
   "taskStartTime": "",
   "plannedStartTime": "",
   "plannedEndTime": "",
   "priority": 0,
   "extParams": [
                   {
                   "id": 44,
                   "value": Name
                   },

                   {
                   "id": 55,
                   "value": Adress
                   },

                   {
                   "id": 66,
                   "value": AddDriver[1]
                   }
                ],
   "parentTaskId": null ,
   "linkedTaskId": null ,
   "linkedEmailId": null,
   "parentCommentId": null,
   "extParamSourceTaskId": null,
   "preuploadedFiles": [],
   "linkFiles": [],
   "parentFiles": "DoNotCopy",
   "isConfidential": false,
   "isConsisImplement": false,
   "location": "",
   "guid": "",
   "userComment": "",
   "onSuccessParams": 
       {
       "onSuccessJs": "",
       "openInSecFrame": "",
       "returnUrl": "",
       "returnJs": "",
       "refreshRadWindowParent": ""
       }
});

Еще пример использования вызова метода:

Повышение приоритета задачи (вызов метода Valhalla)

Использование методов TCWebService (Устаревшее, не используется)

ℹ️ tcwebservice.asmx доступен только с установкой TaskCenter, является устаревшим и не рекомендуется к использованию. Для обращения к методам рекомендуется использовать API, swagger

Для методов TCWebService можно использовать jQuery метод $.ajax(), позволяющий более тонко настроить отправляемый запрос.

Методы $.get() и $.post() по сути являются сокращенной формой записи метода $.ajax(), поэтому метод $.ajax() применим и для вызова Valhallа методов.

Методы TCWebService используют данные в формате xml, поэтому требуется явное указание типа передаваемых данных.

  • webServiceURL — адрес вызываемого метода (можно использовать относительные, а не абсолютные ссылки),

  • soapMessage — данные для обработки в формате SOAP-запроса (необходимая конструкция присутствует в описании самого метода),

  • OnSuccess — функция, вызываемая при получении успешного ответа от веб-сервиса (опционально),

  • OnError — функция, вызываемая при получении ошибки от веб-сервиса (опционально).

Пример использования методов TCWebService:

// написание комментария в задаче

var webServiceURL = 'http://1forma.obi.info/tcwebservice.asmx?op=AddUserComment'
var soapMessage = '<?xml version="1.0" encoding="utf-8"?>' +
 '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">' +
   '<soap12:Body>' +
     '<AddUserComment xmlns="http://taskcenter.ru/">' +
       '<taskId>123456</taskId>' +
       '<commentRecipients></commentRecipients>' +
       '<userId>9999</userId>' +
       '<text>Тестовый комментарий</text>' +
       '<needSubscribe>false</needSubscribe>' +
     '</AddUserComment>' +
   '</soap12:Body>' +
 '</soap12:Envelope>'
$.ajax({
   url: webServiceURL, 
   type: "POST",
   dataType: "xml", 
   data: soapMessage, 
   processData: false,
   contentType: "text/xml; charset=\"utf-8\"",
  //success: OnSuccess, 
  //error: OnError
});

Загрузка файла в таблицу через API

Для постановки задачи с заполнением ДП Таблица с колонкой типа "Мультифайл" сперва загружаем base64 файл через /api/files/preupload/base64?initiatorUserId={initiatorUserId}:

{
 "fileData": "0YLQtdGB0YLQvtCy0YvQuSDRhNCw0LnQuw==",
 "fileName": "1.txt"
}

В ответ получаем JSON вида:

{
    "data": [
        {
            "fileName": "1.txt",
            "fileId": 0,
            "fileVersion": 0,
            "preUploadFileId": 677735,
            "date": null,
            "fileSize": null,
            "fileMime": null
        }
    ]
}

Вызываем апи создания задачи /app/v1.1/api/tasks с полученным preUploadFileId:

{
 "subcatId": 58740,
 "owner": 29101,
 "text": "",
 "pinToChat": false,
 "preuploadedFiles": [],
 "subscribers": [],
 "subscribeGroups": [],
 "notifyUsers": [],
 "extParams": [
   {
     "value": "{\"rows\":[{\"id\":-1,\"modifyType\":\"create\",\"cols\":[{\"id\":33131,\"value\":\"[{\\\"file\\\":{},\\\"name\\\":\\\"файл1.txt\\\",\\\"fileName\\\":\\\"файл1.txt\\\",\\\"preuploadId\\\":677735,\\\"fileId\\\":null}]\"},{\"id\":32111,\"value\":null,\"dataSourceItemId\":null}]}]}",
     "id": 83410,
     "type": "Table"
   }
 ],
 "preUploadedFileKeys": []
}

В данном примере 83410 — ID ДП "Таблица", а 33131 — ID колонки в таблице с типом "Файл" и признаком "Мультифайл".