/
Примеры скриптов

Примеры скриптов

Примеры построены на основе демо-данных. Для полноценной работы необходимо сначала установить демо-данные.

  1. В следующем примере реализовано:

    • Получение токена с сервера авторизации;

    • Перевод данных экземпляра форм, для которого вызван скрипт, в новый статус.

      import json import requests identity_host = 'http://' + parameters['domain'] + '/idsrv/connect/token' dc_host = 'http://' + parameters['domain'] + '/datacollection/api' # API login = parameters['userName'] # Логин администратора password = '******' # Пароль администратора # Идентификатор экземпляра формы form_instance_id = parameters['formInstance']['Id'] # Группа показателей 'Mediastore. План продаж' # Идентификатор группы показателей measure_group_id = 'measureGroup_Plan_prodazh' # Адрес для работы с элементами группы показателей measure_group_elements_url = dc_host + '/measuregroups/' + measure_group_id + '/elements' # Адрес для работы со статусами экземпляра формы form_states_url = dc_host + '/measuregroups/' + measure_group_id + '/forms/' + form_instance_id + '/states' # Метод для получения header, которые необходимо добавлять в каждый запрос def get_headers(): # Получение токена data = { 'grant_type': 'password', 'scope': 'openid profile email roles viewer_api core_logic_facade', 'password': password, 'username': login, 'response_type': 'id_token token' } authorization_headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic cm8uY2xpZW50OmFtV25Cc3B9dipvfTYkSQ==' } authorization_response = requests.post( identity_host, data=data, headers=authorization_headers, verify=False) authorization_json_response = authorization_response.json() authorization_token = authorization_json_response['access_token'] authorization_headers = { 'X-API-VERSION': '2.0', 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + authorization_token } return authorization_headers query_headers = get_headers() # Получение статуса экземпляра формы response = requests.get(form_states_url, headers=query_headers, verify=False) json_response = response.json() # Идентификатор текущего статуса = 4 # Бизнес-процесс 'Утверждение планов' Статус 'Черновик' current_state_id = json_response['states'][0]['id'] # Идентификатор нового статуса, в который будет осуществлён перевод данных = 5 # Бизнес-процесс 'Утверждение планов' Статус 'Готово к проверке' new_state_id = 5 # Идентификатор бизнес-процесса = 3 business_process_id = 3 # Пользовательский комментарий к переводу статуса state_comment = 'Переведено из скрипта' body = { 'businessProcessId': business_process_id, 'stateId': new_state_id, 'comment': state_comment } # Отправка запроса на перевод данных экземпляра формы в новый статус requests.put(form_states_url, headers=query_headers, data=json.dumps(body), verify=False)



  2. В следующем скрипте реализовано:

    • Получение токена с сервера авторизации;

    • Получение элемента измерения по фильтру;

    • Создание элемента, в случае его отсутствия.

      import json import requests identity_host = 'http://' + parameters['domain'] + '/idsrv/connect/token' dc_host = 'http://' + parameters['domain'] + '/datacollection/api' # API login = parameters['userName'] # Логин администратора password = '******' # Пароль администратора # Измерение 'Mediastore. Филиалы' # Идентификатор измерения dimension_id = 'dim_Filiali' # Адрес для работы с элементами измерения dimension_elements_url = dc_host + '/dimensions/' + dimension_id + '/elements' # Метод для получения header, которые необходимо добавлять в каждый запрос def get_headers(): # Получение токена data = { 'grant_type': 'password', 'scope': 'openid profile email roles viewer_api core_logic_facade', 'password': password, 'username': login, 'response_type': 'id_token token' } authorization_headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic cm8uY2xpZW50OmFtV25Cc3B9dipvfTYkSQ==' } authorization_response = requests.post( identity_host, data=data, headers=authorization_headers, verify=False) authorization_json_response = authorization_response.json() authorization_token = authorization_json_response['access_token'] authorization_headers = { 'X-API-VERSION': '2.0', 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + authorization_token } return authorization_headers query_headers = get_headers() # Создание нового элемента измерения 'Mediastore. Филиалы' # Фильтр для получения необходимых элементов измерения # Необходимо получить элементы с наименованием 'Екатеринбург' filter_for_element = { 'type': 'name', # Фильтрация осуществляется по наименованию элемента 'value': 'Екатеринбург', # Наименование элемента сравнивается со строкой 'Екатеринбург' 'condition': 'equals' # Наименование элемента должно полностью совпадать с переданной строкой ('Екатеринбург') } # Отправка запроса для получения элементов измерения response = requests.get(dimension_elements_url, headers=query_headers, data=json.dumps(filter_for_element), verify=False) # Получение тела запроса в JSON формате json_response = response.json() # Получение списка элементов измерения elements = json_response['elements'] # Если элементов измерения с наименованием 'Екатеринбург' не найдено if len(elements) == 0: # То необходимо создать новый элемент # Описание элемента new_elements = [ { 'Name': 'Екатеринбург', # Наименование элемента 'Path': [], # Создать элемент в корне измерения, т.е. элемент не должен находится ни в каком каталоге 'Attributes': [{ "AttributeId": "attr_Tip_filiala", "Value": 1 }] # Атрибут "Тип филиала" соответствует значению справочника с идентификатором 1 } ] # Отправка запроса на создание элемента response = requests.post(dimension_elements_url, headers=query_headers, data=json.dumps(new_elements), verify=False) # Получение тела запроса в JSON формате json_response = response.json() print('Количество созданных элементов: ' + str(json_response['added']))
  3. В следующем скрипте реализовано:

    • Получение токена с сервера авторизации;

    • Получение элементов группы показателей по фильтру;

    • Создание новых элементов группы показателей из существующих, путём изменения даты (т.е. элементы за 1 квартал 2020 года копируются в элементы за 1 квартал 2021 года) и увеличением значения на 10%.

      import json import requests identity_host = 'http://' + parameters['domain'] + '/idsrv/connect/token' dc_host = 'http://' + parameters['domain'] + '/datacollection/api' # API login = parameters['userName'] # Логин администратора password = '******' # Пароль администратора # Группа показателей 'Mediastore. План продаж' # Идентификатор группы показателей measure_group_id = 'measureGroup_Plan_prodazh' # Адрес для работы с элементами группы показателей measure_group_elements_url = dc_host + '/measuregroups/' + measure_group_id + '/elements' # Метод для получения header, которые необходимо добавлять в каждый запрос def get_headers(): # Получение токена data = { 'grant_type': 'password', 'scope': 'openid profile email roles viewer_api core_logic_facade', 'password': password, 'username': login, 'response_type': 'id_token token' } authorization_headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic cm8uY2xpZW50OmFtV25Cc3B9dipvfTYkSQ==' } authorization_response = requests.post( identity_host, data=data, headers=authorization_headers, verify=False) authorization_json_response = authorization_response.json() authorization_token = authorization_json_response['access_token'] authorization_headers = { 'X-API-VERSION': '2.0', 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + authorization_token } return authorization_headers query_headers = get_headers() # Получение элементов группы показателей # Фильтр для получения элементов группы показателей # Осуществляется получение элементов за 1 квартал 2020 года filter_for_elements = { 'type': 'calendar', # Фильтрация осуществляется по календарю 'value': '2020-01-01', # Дата элемента группы показателей сравнивается со значением '2020-01-01' 'condition': 'equals' # Дата элемента группы показателей должна совпадать с переданным значением } # Отправка запроса для получения элементов группы показателей по фильтру response = requests.get( measure_group_elements_url, headers=query_headers, data=json.dumps(filter_for_elements), verify=False) # Получение результата запроса в формате JSON json_response = response.json() # Получение списка элементов из результата elements = json_response['elements'] # Список новых элементов группы показателей new_elements = [] # Для каждого полученного элемента for element in elements: # Создание нового элемента, но с новой датой (1 квартал 2021 года) new_element = { 'value': element['value'] * 1.1, 'dimensions': [], 'calendars': [ { 'id': json_response['measureGroup']['calendar']['id'], 'name': json_response['measureGroup']['calendar']['name'], 'date': '2021-01-01' } ], } # Копирование элементов измерений в новый элемент группы показателей for coordinate in element['dimensionElements']: new_element['dimensions'].append({ 'id': coordinate['dimensionId'], 'elementId': coordinate['elementId'] }) # Добавление нового элемента в список new_elements.append(new_element) # Если есть хотя бы один элемент для создания if len(new_elements) > 0: # Отправка новый элементов в DataCollection response = requests.post(measure_group_elements_url, headers=query_headers, data=json.dumps(new_elements), verify=False) json_response = response.json() print('Количество созданных элементов: ' + str(json_response['created']))
  4. В следующем скрипте реализовано:

    • Получение токена с сервера авторизации;

    • Получение элементов группы показателей по фильтру из экземпляра формы;

    • Обновление комментария у полученных элементов группы показателей.

  5. В следующем скрипте реализовано:

    • Получение токена с сервера авторизации;

    • Получение элементов группы показателей из экземпляра формы;

    • Копирование данных из формы в аналогичную форму другой группы показателей, при условии, что оригинальная форма в статусе "согласовано".

Примечание:

  • В скриптах отключена проверка HTTPS сертификата для демонстрации логики написания скриптов. На реальных задачах отключение проверки сертификата не рекомендуется.

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

Related content

Описание переменных переданных в скрипт из SmartForms
Описание переменных переданных в скрипт из SmartForms
Read with this
Примеры скриптов
Примеры скриптов
More like this
Изменение конфигурации сервиса выполнения скриптов
Изменение конфигурации сервиса выполнения скриптов
Read with this
Примеры скриптов
Примеры скриптов
More like this
Установка Visiology на российских ОС
Установка Visiology на российских ОС
Read with this
Примеры скриптов
Примеры скриптов
More like this