Войти

Описание разделов настроечных файлов и результаты

Для разработки настроечного файла можно использовать любой текстовый редактор, поддерживающий формат JSON.

Начать рекомендуется с добавления в настроечный файл обязательных блоков (см. основную статью Адаптер СМЭВ – Разработка настроечных файлов, таким образом должно получиться следующее:

  • "version":

  • "targetNamespace":

  • "namespaces": {}

  • "structure": {}

  • "mappers": {}

  • "types": {}

  • "elements": {} 

Json-текст представляет собой одну из двух структур:

Набор пар ключ: значение. В различных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, список с ключом или ассоциативный массив. Ключом может быть только строка (регистрозависимая: имена с буквами в разных регистрах считаются разными), значением — любая форма.

Упорядоченный набор значений. Во многих языках это реализовано как массив, вектор, список или последовательность.

В качестве значений в json могут быть использованы:

  • ­   Объект — это неупорядоченное множество пар ключ: значение, заключённое в фигурные скобки «{ }». Ключ описывается строкой, между ним и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.
  • ­   Массив (одномерный) — это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми.
  • ­   Число.
  • ­   Литералы true, false и null.
  • ­   Строка — это упорядоченное множество из нуля или более символов юникода, заключённое в двойные кавычки. 

Объединение элементов в группы

Создайте элементы Запрос и Ответ и несколько элементов. Для примера можно описать человека (физическое лицо), создав элементы:

  •    Физическое лицо (данный элемент в дальнейшем станет группой);

  • ­   Фамилия;

  • ­   Имя;

  • ­   Отчество;

  • ­   Дата рождения;

  • ­   ИНН;

  • ­   СНИЛС.

Добавьте элементы Запрос / Ответ:

"elements": {

       "DataRequestElement1": {

         "path": "tns:Request",

         "caption": "Запрос"

       },

               "DataResponseElement1": {

         "path": "tns:Response",

         "caption": "Ответ"

    }

}

Где «DataRequestElement1» – название элемента (ID элемента),

«path» - определения соответствия данных в xml,

«caption» - название элемента, отображаемое пользователю.

В результате получим следующее:

image--000.png

Вид экранной формы с элементами «Запрос»

image--001.png

Вид экранной формы с элементами «Ответ»

___________________

По умолчанию добавленные элементы имеют тип строка, не обязательные для заполнения (об этом сообщает фраза «При наличии»).

________________________

Следующим шагом добавьте оставшиеся заявленные выше элементы в раздел elements:

"FL": {

                               "path" : "FL",

                               "caption" : "Физическое лицо"

               },

               "FLsurname": {

                               "path" : "FLsurname",

                               "caption" : "Фамилия"

               },

               "FLname": {

                               "path" : "FLname",

                               "caption" : "Имя"

               },

               "FLmidlename": {

                               "path" : "FLmidlename",

                               "caption" : "Отчество"

               },

               "FLbirthdate": {

                               "path" : "FLbirthdate",

                               "caption" : "Дата рождения"

               }

В системе картина не изменится т.к. добавленные элементы не включены в Запрос либо в Ответ.

Следующим шагом сформируйте из элемента Запрос блок Запрос. Для этого понадобится элементу DataRequestElement1 присвоить тип:

"DataRequestElement1": {

       "path" : "Request",

               "caption" : "Запрос",

               "typeId" : "complexType1"

               }

___________________

Очень важно следить за регистром, в случае ошибки или опечатки настроечный файл может не сработать либо просто не отобразить описываемый элемент (комментарий относится ко всему настроечному файлу)

________________________

После элемент имеющий тип необходимо описать в разделе types:

"complexType1" : {

               "content" : {

                    "mode" : "sequence",

            "elementIds" : []

                                              }

                               }

Где «complexType1» - наименование типа

«content» - содержимое типа

«mode» - режим обработки содержимого

«sequence» - последовательно

«elementIds» - список ID элементов

___________________

Элементы, перечисленные в массиве elementIds необходимо добавлять в той последовательности, в которой необходимо чтобы элементы отображались на форме

________________________

Добавьте ID ранее созданных элементов в массив RequestType:

"elementIds" : ["FL", "FLsurname", "FLname", "FLmidlename", "FLbirthdate"]

Если не удобно отображать элементы в строку, допускается вариант перечисления построчно:

"elementIds" : [

                                              "FL",

                                              "FLsurname",

                                              "FLname",

                                              "FLmidlename",

                                              "FLbirthdate"

                                              ]

В результате на форме должно получиться следующее:

image--002.png

На рисунке отображается блок Запрос с перечисленными элементами (элементы отображаются в той последовательности что нам надо).

Но изначально задача ставилась описать физическое лицо, т.е. теперь необходимо с элементом FL осуществить те же манипуляции что и с элементом DataRequestElement1. Присвойте элементу FL тип и опишите его в разделе types. В elementIds необходимо перечислить элементы, которые необходимы в форме (перенести их из DataRequestElement1). В результате в описании типа DataRequestElement1должен остаться только элемент FL. В настроечном файле это будет выглядеть следующим образом:

"complexType1" : {

                               "content" : {

                                              "mode" : "sequence",

            "elementIds" : ["FL" ]

                                              }

               },

               "FLType" : {

                               "content" : {

                                              "mode" : "sequence",

                                              "elementIds" : ["FLsurname", "FLname", "FLmidlename", "FLbirthdate"]

                                              }

               }

В форме изменения будут отображаться так:

image--003.png

Блок Запроса содержит блок Физическое лицо, которой в свою очередь имеет ряд элементов.

___________________

По умолчанию добавленные элементы имеют тип строка, не обязательные для заполнения (об этом сообщает фраза «При наличии»).

________________________

Поля обязательные к заполнению

Продолжая использовать начатый пример в предыдущем пункте, сделайте поля Фамилия и Имя обязательными для заполнения. Для того чтобы придать элементу условие обязательности, необходимо прибегнуть к ключу "required": значение true:

"FLsurname": {

               "path" : "FLsurname",

               "caption" : "Фамилия",

        "required": true

               },

"FLname": {

               "path" : "FLname",

               "caption" : "Имя",

        "required": true

               }

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--004.png

У элементов «Фамилия» и «Имя» нет подписи «При наличии», что делает их обязательными к заполнению. 

Поля недоступные для заполнения

Элемент «Отчество» в нашем настроечном файле сделайте недоступным для редактирования, для этого воспользуйтесь ключом "readOnly", значение true:

"FLmidlename": {

               "path" : "FLmidlename",

               "caption" : "Отчество",

               "readOnly" : true

}

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--005.png

Элемент «Отчество» закрашен серым цветом что означает, что он не доступен для заполнения. 

Предварительное заполнение полей. Дефолтное значения.

Для дефолтных значений необходимо использовать ключ "default". Для этого добавьте новый элемент SNILS:

"SNILS": {

               "path" : "SNILS",

               "caption" : "СНИЛС",

               "default" : "000-000-000 00"

}

Добавьте ранее созданный элемент в массив FLType:

"elementIds" : ["FLsurname", "FLname", "FLmidlename", "FLbirthdate", "SNILS"]

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--006.png

Элемент СНИЛС отображается с дефолтным значением 

Минимальная и максимальная длинна текста

В списке элементов добавьте элемент и задайте ему тип:

"INN": {

               "path" : "INN",

               "caption" : "ИНН",

               "typeId" : "INNType",

        "required": true

}

Опишите его в разделе настроечного файла types, используя ключ "restriction":

"INNType" : {

               "restriction" : {

               "minLength" : 10,

               "pattern" : "d{10,12}",

               "maxLength" : 12

                               },

               "base":"number"

}

Элементу DataResponseElement1 присвойте тип:

"DataResponseElement1": {

      "path": "tns:Response",

      "caption": "Ответ",

               "typeId" : "complexType2"

    }

Опишите тип в разделе types и добавьте в массив данного типа ранее созданный элемент INN:

"complexType2": {

      "content": {

        "mode": "sequence",

        "elementIds": ["INN"

        ]

      }

    },

Отображение проверки минимального числа символов:

image--007.png

Отображение проверки максимального значения:

image--008.png

Ограничение по количеству вводимых значений 

Добавьте новый элемент:

"INNElement1": {

               "path": "tns:INN",

               "caption": "ИНН юридического лица или индивидуального предпринимателя",

               "typeId": "INNType1",

               "required": true

                        },

Добавьте новый тип в раздел types, используя ключ "restriction". Ограничение на 12 знаков, только цифры:

"INNType1": {

               "restriction": {

                               "pattern": "[0-9]{12}",

                               "maxLength" : 12

                                              },

               "description": "ИНН юридического лица или индивидуального предпринимателя",

               "base": "string"

                               },

   image--010.png

   image--011.png

Маска ввода

Маска ввода дата

Добавьте элемент (или используйте существующий) дата:

"FLbirthdate": {

               "path" : "FLbirthdate",

               "caption" : "Дата рождения",

        "typeId": "FLbirthdateType"

}

Задайте элементу тип и опишите его в разделе types:

"FLbirthdateType" : {

               "base": "string",

          "widget": {

            "name": "date"

        }

    }

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--012.png

Присвоение виджету значение data позволяет использовать в формах маску дата.

Маска дата – время

Для использования маски дата – время добавьте элемент (или используйте существующий) с датой:

"VisitDate": {

               "path" : "VisitDate",

               "caption" : "Дата посещения" ,

               "typeId" : "VisitDateType"

}

Задайте элементу тип и опишите его в разделе types:

"VisitDateType" : {

               "base": "number",

          "widget": {

            "name": "datetime"

          }

}

Добавьте созданный элемент в массив ответ:

"complexType2": {

                               "content": {

                               "mode": "sequence",

                               "elementIds": ["INN", "VisitDate"

                               ]

               }

}

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--013.png

Маска

Добавьте элемент (или используйте существующий):

"SNILS2": {

               "path" : "SNILS2",

               "caption" : "СНИЛС"

}

Задайте элементу тип и опишите его в разделе types SNILS2Type:

"SNILS2Type" : {

               "base": "string",

               "widget" : {

                               "name" : "text",

                               "params": {

                               "mask": "999-999-999 99"

                               }

               }

}

Добавьте созданный элемент "SNILS2" в массив ответ.

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--014.png

Задав виджету параметр mask, задаём ограничение на ввод только чисел от 0-9 в указанном формате.

Минимальное и максимальное числовое значение включая указанное

Добавьте (или используйте существующий) элемент, для которого будет применено правило минимального и максимального числового значения:

"numericfield": {

               "path" : "numericfield",

               "caption" : "Числовое поле"

}

Задайте элементу тип и опишите его в разделе types:

"numericfieldType" : {

               "restriction":{

                               "maxInclusive":10,

                               "minInclusive":-1,

                               "fractionDigits":3

               },

                               "base":"number"

}

"maxInclusive" : Максимальное число, "minInclusive" : Минимальное число, "fractionDigits": максимально число десятичных знаков где 0 – целое число.

image--015.png

image--016.png

Минимальное и максимальное количество повторяемых элементов + элементы управления

Добавьте (или используйте существующий) элемент для которого будет применено правило повторяющихся элементов:

"Document1": {

               "path" : "Document1",

       "repeatable" : {

                               "min" : 1,

                               "max" : 3,

                               "caption" : "Документ",

                               "addCaption" : "Создать документ",

                               "removeCaption" : "Удалить документ"

               },

               "caption" : "Документ удостоверяющий личность",

               "typeId" : "Document1Type"

}

Где                       

"caption" : "Документ",

 "addCaption" : "Создать документ",

 "removeCaption" : "Удалить документ".

Опишите тип добавленного элемента в разделе types:

"Document1Type" : {

               "content" : {

                   "mode" : "sequence",

            "elementIds" : []

       }

}

Так же не забывайте добавлять элементы в массивы запроса или ответа:

"complexType2": {

      "content": {

        "mode": "sequence",

        "elementIds": ["INN", "VisitDate", "SNILS2", "numericfield", "Document1"

        ]

      }

    }

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--017.png

Выбор значения из списка

Добавьте (или используйте существующий) элемент:

"DocumentType" : {

               "path" : "Type",

               "caption" : "Тип документа",

               "typeId" : "DocumentTypeType"

}

Задайте элементу тип и опишите его в разделе types:

"DocumentTypeType" : {

               "base" : "number",

               "restriction" : {

                               "enumeration" : {

                                              "1" : "Паспорт",

                                              "2" : "Загран паспорт",

                                              "3" : "Свидетельство о рождении"

                               }

               }            

}

Также необходимо добавить созданный элемент в массив ранее созданного элемента "Document1Type":

"Document1Type" : {

                               "content" : {

                                              "mode" : "sequence",

                                              "elementIds" : ["DocumentType" ]

                }

               }

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--018.png

image--019.png

image--020.png

Атрибут чекбокс

Добавьте элемент, для которого будет применено правило чекбокс:

"DocumentHasScan" : {

               "path" : "HaveScan",

               "caption" : "Наличие скан копии"

}

Задайте элементу тип и опишите его в разделе types:

"DocumentHasScanType" : {

               "base" : "boolean"

}

Добавьте ID элемента в массив Документа, удостоверяющего личность:

"Document1Type" : {

               "content" : {

                    "mode" : "sequence",

            "elementIds" : ["DocumentType", "DocumentHasScan"]

        }

},

После загрузки НФ в Адаптер СМЭВ должен получиться следующий результат:

image--021.png

Выбор группы из списка

Создайте элементы, которые в последствии станут названием групп и элементом выбора:

"applicant": {

               "path" : "applicant",

               "caption" : "Заявитель"

},

"JURL": {

               "path" : "JURL",

               "caption" : "Юр лицо"

}

Задайте элементам тип и опишите их в разделе types:

"JURLType" : {

               "content" : {

                               "mode" : "sequence",

                               "elementIds" : []

               }

},

"applicantType" : {

               "content" : {

                               "mode" : "choice",

                               "elementIds" : []

               }

}

В массив "applicantType" добавьте ID созданных атрибутов "JURL" и "FL":

"applicantType" : {

               "content" : {

                               "mode" : "choice",

                               "elementIds" : ["JURL", "FL"]

               }

}

ID заявителя добавьте в массив запроса, при этом уберите присутствующий в массиве запроса элемент FL:

"complexType1" : {

"content" : {

               "mode" : "sequence",

          "elementIds" : ["applicant" ]

               }

}

image--022.png

image--023.png 

image--024.png

Удаление рамки списка

С помощью условия указанного ниже рамку границы блока можно убрать:

"widget": {

               "name": "panel",

               "params": {

                               "border": false

                               }

               }

Необходимо к имеющемуся types "FLType" добавить описанный выше виджет:

"FLType" : {

               "content" : {

               "mode" : "sequence",

               "elementIds" : ["FLsurname", "FLname", "FLmidlename", "FLbirthdate", "SNILS"]

               },

               "widget": {

               "name": "panel",

               "params": {

                               "border": false

                               }

               }

},

image--025.png 

Использование стилей (CSS)

Обязательными условиями использования CSS файла в Адаптере это приставка «.s_» вначале тэга (ключа элемента), и «!important» в конце условия.

Для настройки конкретного элемента блока необходимо использовать инструмент «input»:

.s_FLname input {

               background: #FFFACD !important;

}

image--026.png 

Изменение размера и стиля текста элемента 

.s_FLname input {

    font-size: 40px !important;

    font-style: italic !important;

}

image--027.png 

Изменение цвета блока

Применённые правила к заголовку блока, автоматически переносится на весь блок и всё что в нём находится (включая входящие блоки):

s_FL {

               background: #F0FFFF !important;

               font-style: italic !important;

               color: maroon !important;

    font-weight: 600 !important;

image--028.png 
Авторизуйтесь, чтобы оставить комментарий к статье