Часто задаваемые вопросы
Проверим что будет, если при составлении pipeline валидации, не указать resultName.
У нас есть данные вида:
first | second |
---|---|
225 | 15 |
12 | 0 |
-
Создаем профиль с RuleName: 'min'. Хотим, чтобы он выбрал минимальное значение среди имеющихся колонок.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e0", "profileName": "calculatedFieldNotPersistTest", "columns": [ { "columnName": "first", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "second", "type": "STRING", "position": 1, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "min", "values": [ { "source": "TABLE", "key": "first" }, { "source": "TABLE", "key": "second" } ], "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e0' \ -F 'taskType=DEMO' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e0' \ -F 'taskType=DEMO' ID которое мы получаем в ответ, ID задания 721edcb1-4354-4d35-8943-b39c8150eb06 Отправляем запрос для получения данных $ curl 'http://localhost:8080/now/721edcb1-4354-4d35-8943-b39c8150eb06/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "dictionaryCode" : "ANY", "versionCode" "versionName" "subsystem" : "items" : [ { : "INIT_1_2021_09_08_19_46_26_902", : "VER.INIT_1_2021_09_08_19_46_26_902", "DICTIONARY_AUTO_UPLOAD", "attrs" : { "code" : "0", "first" : "225", "second" : "15" } }, { "attrs" : { "code" : "1", "first" : "12", "second" : "0" } } ], "dictionaryMultiData" : null }
Как можем наблюдать, вычисленное значение не записалось в БД. Такие случаи удобны при последовательной валидации.
Последовательная валидация данных: профиль колонками A, B, C. Необходимо получить сумму этих колонок, разделить на 10, а потом посмотреть, результат меньше числа 10 или нет.
У нас есть данные вида:
A | B | C |
---|---|---|
225 | 15 | 60 |
Чтобы брать значения из уже вычисленных полей по resultName, надо поставить тип
source : ENV
.-
Создаем профиль.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e8", "profileName": "rulesChainTest", "columns": [ { "columnName": "A", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "B", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "C", "type": "STRING", "position": 1, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "sum", "values": [ { "source": "TABLE", "key": "A" }, { "source": "TABLE", "key": "B" }, { "source": "TABLE", "key": "C" } ], "resultName": "sumOfABC", "ruleType": "CALCULATED_FIELD" }, { "ruleName": "div", "values": [ { "source": "ENV", "key": "sumOfABC" }, { "source": "CONSTANT", "key": "10" } ], "resultName": "divOfSum", "ruleType": "CALCULATED_FIELD" }, { "ruleName": "isMin", "values": [ { "source": "ENV", "key": "sumOfABC" }, { "source": "CONSTANT", "key": "10" } ], "ruleType": "CHECKER" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e8' \ -F 'taskType=DEMO' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e8' \ -F 'taskType=DEMO'
-
Получаем в ответ ID задания.
eba5fbd2-2d8d-4ff9-ad5a-6d2704d71e85
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/eba5fbd2-2d8d-4ff9-ad5a-6d2704d71e85/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "type": "Your request file didn't validate with your validation rules", "title": "Validation Exception", "invalidParams": [ { "rowIndex": 0, "ruleName": "isMin", "field": "", "message": "false" } ], "error": null, "messageChain": null }
В ответе пришло пояснение об ошибке валидации, так как 30 больше, чем 10.
Проверим случай, если случайно ошиблись регистром.
У нас есть данные вида:
A | B | C |
---|---|---|
225 | 15 | 60 |
-
Создаем профиль, в котором ошиблись и вместо 'C' написали 'c'.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e6", "profileName": "rulesChainTest", "columns": [ { "columnName": "A", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "B", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "C", "type": "STRING", "position": 1, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "sum", "values": [ { "source": "TABLE", "key": "A" }, { "source": "TABLE", "key": "B" }, { "source": "TABLE", "key": "c" } ], "resultName": "sumOfABC", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e6' \ -F 'taskType=DEMO' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e6' \ -F 'taskType=DEMO'
-
Получаем в ответ ID задания.
73136df9-14cf-496d-a39c-e5094d3fd2fa
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/73136df9-14cf-496d-a39c-e5094d3fd2fa/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "type" : "Your request file didn't validate with your validation rules", "title" : "Validation Exception", "invalidParams" : [ { "rowIndex" : 0, "ruleName" : "sum", "field" : "", "message" : "Не были найдены указанные в правилах данные. Пожалуйста, проверьте корректность правила и повторите попытку" } ], "error" : null, "messageChain" : null }
Как можем наблюдать, выдается ошибка валидации, так как колонки не было найдено во время выполнения правила 'sum'.
Проверим случай, если случайно перепутали колонки.
Исходные данные:
num1 | num2 | String |
---|---|---|
50 | 50 | "string" |
-
Создаем профиль в котором ошиблись и вместо колонки 'num2' написали 'String'.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e5", "profileName": "incorrectValuesDataTypeTest", "columns": [ { "columnName": "num1", "type": "STRING", "position": 0, "required": false, "calculatedField": false }, { "columnName": "num2", "type": "STRING", "position": 1, "required": false, "calculatedField": false }, { "columnName": "String", "type": "STRING", "position": 2, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "sum", "values": [ { "source": "TABLE", "key": "num1" }, { "source": "TABLE", "key": "String" } ], "resultName": "sum", "ruleType": "CALCULATED_FIELD" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Отправляем запрос с данными для начала парсинга.
Part Description fileФайл для загрузки dictionaryCodeКод справочника dictionaryNameНазвание справочника profileIdID профиля taskTypeТип загрузки. Для примера выбрано TaskType.DEMO Curl type=json$ curl 'http://localhost:8080/now/profile' -i -X POST \ -H 'Content-Type: multipart/form-data;charset=UTF-8' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e5' \ -F 'taskType=DEMO' \ -F 'file=@data.json' \ -F 'dictionaryCode=any' \ -F 'dictionaryName=any' \ -F 'profileId=e34dc8c8-48f2-4aa5-9e36-f7a9415f84e5' \ -F 'taskType=DEMO'
-
Получаем в ответ ID задания.
682026d2-2160-44f1-9642-6ba2f510c292
-
Отправляем запрос для получения данных.Curl type=json
$ curl 'http://localhost:8080/now/682026d2-2160-44f1-9642-6ba2f510c292/data' -i -X GET \ -H 'Content-Type: application/json;charset=UTF-8'
-
Получаем ответ.Response type=json
{ "type": "Your request file didn't validate with your validation rules", "title": "Validation Exception", "invalidParams": [ { "rowIndex": 0, "ruleName": "sum", "field": "", "message": "NumberFormatException: For input string: \"string\"" } ], "error": null, "messageChain": null }
В результате получим ошибку валидации, так как колонки неправильного типа для выполнения правила 'sum'.
Проверим случай, если случайно допустили ошибку в названии правила валидации.
-
Создаем профиль, в котором ошиблись и вместо правила 'isEmail' написали 'isEmmail'.profile.json type=json
{ "profileId": "e34dc8c8-48f2-4aa5-9e36-f7a9415f84e4", "profileName": "incorrectRuleNameTest", "columns": [ { "columnName": "A", "type": "STRING", "position": 0, "required": false, "calculatedField": false } ], "validationRules": [ { "ruleName": "isEmmail", "values": [ { "source": "TABLE", "key": "A" } ], "ruleType": "CHECKER" } ], "csvSeparator": "\u0000", "skipRowsFromStart": 0, "skipRowsFromEnd": 0 }
-
Получаем ответ.Response type=json
{ "type": "Your request file didn't validate with your validation rules", "title": "Validation Exception", "invalidParams": [ { "rowIndex": 0, "ruleName": "isEmmail", "field": "A", "message": "IllegalArgumentException: RuleName: 'isEmmail' is incorrect" } ], "error": null, "messageChain": null }
Как можем наблюдать, выдается ошибка валидации из-за неправильного названия правила.
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
Справочники GET
Получение доступных справочников и данных об их элементах по коду на примере трёх общедоступных классификаторов: ОКЕИ, ОКВЭД, ОКОПФ
Справочники POST
Получение данных из доступных справочников на примере трёх общедоступных классификаторов: ОКЕИ, ОКВЭД, ОКОПФ. Настройка отображаемых столбцов