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

Анкеты

Анкеты предназначены для описания структуры и иерархии данных для формата АВО.

Список анкет

{

 "action" : "anketa.list" 

-- параметры фильтрации, должен быть хотя бы один параметр
--
-- если выбрана последняя порция списка, то ответ содержит "last_page" : 1
--
-- доступны поля
--
-- anketa.id --  "уникальный идентификатор анкеты" 
--

,"filter" : [ фильтр в синтаксисе stat.uni ]

,"order" : [ сортировка ответа в синтаксисе stat.uni ]

,"skip" : количество пропускаемых записей от начала списка -- по умолчанию 0

,"first" : количество выбираемых записей после skip -- по умолчанию 50, не более 50

}

ответ

{

 <общие поля>

,"list" : [

            {

             "system" : "системная, да, нет (1, 0)" -- системные анкеты не доступны для изменения

             ,"id" : "уникальный идентификатор" 

             ,"name" : "название",

            }

            ...

           ]

}

Чтение анкеты

{

 "action" : "anketa.get" 

,"id"     : код-анкеты

}

ответ

{

 <общие поля>

,"obj" : {

          "id" : код-анкеты,

          "param" : {

                     "name"     : "название анкеты",

                     "system"   : 0|1 -- анкета системная, попытки изменения закончатся ошибкой

                    },

          "order" : [ -- порядок вопросов

                     "код-вопроса3",

                     "код-вопроса8",

                     .....

                     "код-вопроса4" 

                    ]

          "quests" : { -- вопросы анкеты

             "код-вопроса" : {

                             "id" : код-вопроса,

                             "@"  : номер по порядку,

                             "name" : формулировка вопроса,

                             "type" : тип вопроса,

                             --  для типа "dt" 

                             "subtype" : под-тип вопроса
                                        --  yd  - Дата и время с точностью от года до дня
                                        --  yh  - Дата и время с точностью от года до часа
                                        --  ym  - Дата и время с точностью от года до минуты
                                        --  ys -  Дата и время с точностью от года до секунды

                             --  для типа "free" 

                             "width" : ширина поля в байтах для типа free

                             --  для типа "1m" или "nm" 

                             "answers" : { -- ответы вопроса

                                          "код ответа1" : "название ответа1",

                                          "код ответа2" : "название ответа2",

                                           .....

                                          "код ответа3" : "название ответа3",

                                         },

                             "order" : [ -- порядок ответов

                                        "код ответа3",

                                        "код ответа1",

                                        .....

                                        "код ответа2" 

                                       ],

                            "form" : {
                                       -- свойства вопроса при использовании анкеты в форме как анкеты для первичного приёма данных
                                     }
                            },

             ............

         },

}

Удаление анкеты

{

    "action" : "anketa.delete" 

   ,"id" : "уникальный идентификатор анкеты" 

}

ответ

{

    <общие поля>

}

Создание анкеты

{

     "action" : "anketa.create" 

    ,"name" : "Название анкеты",

     необязательные:

    ,"copy_from" : "уникальный идентификатор анкеты (не нужен для создаваемой с нуля, а не копируемой анкеты)" 

    ,"id" : "уникальный код анкеты" 

    -- не обязательно

    ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 

}

ответ

{

  <общие поля>

,"id" : "код анкеты" 

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты

Сохранение анкеты

{

    "action" : "anketa.set" 

    ,"id" : "идентификатор анкеты" 

    ,"name" : "название анкеты" 

    необязательный

    ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 
}

ответ

{

    <общие поля>

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты

Добавления нового вопроса анкеты

{

   "action" : "anketa.quest.add" 

  ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

-- добавление одного вопроса

  ,obj : { -- описание вопроса

          "name" : "Текст вопроса" 

         ,"type" : "Тип вопроса" 
                 -- free - свободный ввод
                 -- dt   - дата и время
                 -- 1m   - выбор одного из списка
                 -- nm   - выбор нескольких из списка
                 -- int  - целое число

         -- параметры, определяемые типом вопроса:

         -- для type=free:

              ,"width" : "количество символов для свободного ввода" -- обязателен,  > 0

         -- для  type=dt:

              ,"dtsubtype" : "точность для даты и времени" -- обязателен
                              -- yd - от года до дня.     в данных записывается и выводится в формате "YYYY-MM-DD" 
                              -- yh - от года до часа.    в данных записывается и выводится в формате "YYYY-MM-DD hh" 
                              -- ym - от года до минуты.  в данных записывается и выводится в формате "YYYY-MM-DD hh:mm" 
                              -- ys - от года до секунды. в данных записывается и выводится в формате "YYYY-MM-DD hh:mm:ss" 

         -- для type=1m или nm (выбор из списка):

              ,"answers" : { -- ответы вопроса

                            "код ответа 1" : "название ответа1" 

                           ,"код ответа 2" : "название ответа2" 

                           .....

                           ,"код ответа N" : "название ответаN" 

                          }

             ,"order" : [ -- порядок ответов

                           "код ответа 3" 

                          ,"код ответа 8" 

                          .....

                          ,"код ответа 4" 
                        ]

         -- необязательные для любого типа

         ,"id" : "уникальный идентификатор вопроса" 

         -- свойства вопроса при использовании анкеты в форме как анкеты для первичного приёма данных
         -- не обязательно
        ,"form" : {

             -- Видимость в форме

            "hidden" : 0|1 -- 0 - по умолчанию - поле в форме будет полем ввода
                              1 - поле в форме будет иметь тип hidden и значение default

            -- Обязательность заполнения

           ,"mustbe" : 0|1 -- 0 - по умолчанию - поле не обязательно для заполнения (игнорируется для hidden=1)
                           --     при первоначальном отображении формы в поле будет значение default
                           -- 1 - поле обязательно для заполнения

            -- Значение по умолчанию

            ,"default" : "значение по умолчанию" -- для всех вопросов кроме 1m и nm

            ,"default" : [код ответа] -- для вопросов 1m

            ,"default" : [код ответа1 , код ответа 2, ... ] -- для вопросов nm

            -- в какой вопрос какой анкеты-хранилища копируется результат при подтверждении заполнения формы
            -- параметры или оба отсутствуют или оба указаны и не пустые
            -- анкета не может быть системной или показывать на саму себя
            -- тип вопроса, в который будет идти копирование должен совпадать с типом вопроса в obj
            -- для вопросов 1m и nm все возможные ответы текущего вопроса должны быть в ответах вопроса в который будет идти копирование

            ,"trans.ank"   : "код анкеты" 
            ,"trans.quest" : "код вопроса" 
          }
        }

-- добавление нескольких вопросов, любая ошибка отменяет все изменения. Будут добавлены или все вопросы или ни

  ,obj : [
          { описание вопроса-1 }
         ,{ описание вопроса-2 }
         ,...............
         ]

   -- не обязательно

  ,"return_fresh_obj" : 0|1  -- вернуть новый объект анкета -- да (1), нет
}

ответ

{

  <общие поля>

 ,"obj" : { объект анкета как из ответа anketa.get } -- если "return_fresh_obj" : "1" 

-- в зависимости от вида параметра obj в вызове

 ,"id" : "id-добавленного вопроса" 

-- или

 ,"id" : [ -- порядок id соответствует порядку объектов в параметре obj в вызове
          "id-добавленного вопроса-1" 
         ,"id-добавленного вопроса-2" 
         .......
         ]

}

Изменение вопроса анкеты

{

   "action" : "anketa.quest.set" 

  ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

-- добавление одного вопроса

  ,"obj" : { -- описание вопроса

            "id" : "уникальный идентификатор вопроса" 

           ,"name" : "Текст вопроса" 

           -- параметры, определяемые типом вопроса:

           -- для type=free:

                ,"width" : "количество символов для свободного ввода, обязателен,  > 0" 

           -- для type=1m или nm:

                ,"answers" : { -- ответы вопроса

                              "код ответа 1" : "название ответа 1" 

                             ,"код ответа 2" : "название ответа 2" 

                             .....

                             ,"код ответа N" : "название ответа N" 

                             }

               ,"order" : [ -- порядок ответов

                           "код ответа 3" 

                          ,"код ответа 8" 

                          .....

                          ,"код ответа 4" 
                          ]

        ,"form" : {
           -- свойства вопроса при использовании анкеты в форме как анкеты для первичного приёма данных
           -- параметр необязателен
           -- при указании "form" в запросе, все параметры вопроса, связанные с ним, заменяются на новые указанные или удаляются
        }

-- изменение нескольких вопросов, любая ошибка отменяет все изменения. Будут изменены или все вопросы, или не все.

  ,obj : [
          { описание вопроса-1 }
         ,{ описание вопроса-2 }
         ,...............
         ]

  -- не обязательно

  ,"return_fresh_obj" : 0|1  -- вернуть новый объект анкета -- да (1), нет (0, по умолчанию)

}

ответ

{

    <общие поля>

 ,"obj" : { объект анкета как из ответа anketa.get } -- если "return_fresh_obj" : "1" 

-- в зависимости от вида параметра obj в вызове

 ,"id" : "id-добавленного вопроса" 

-- или

 ,"id" : [ -- порядок id соответствует порядку объектов в параметре obj в вызове
          "id-добавленного вопроса-1" 
         ,"id-добавленного вопроса-2" 
         .......
         ]
}

Удаление вопроса анкеты

Удаление нескольких вопросов транзакционно - удаляются или все (нет ошибок), или ни один (хоть одна ошибка).

{

     "action" : "anketa.quest.delete" 

    ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

    ,"id" : "уникальный идентификатор вопроса" 

     -- или

    ,"id" : [ "id1", "id2", ..... ]

--- необязательный

    ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 

}

ответ

{

    <общие поля>

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты

Изменение позиции вопроса анкеты

{

     "action" : "anketa.quest.order" 

     ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

     ,"order" : [ -- новый порядок вопросов

          "код-вопроса3" 

         ,"код-вопроса8" 

          .....

         ,"код-вопроса4" 

     ]

    -- необязательный

    ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 

}

ответ

{

    <общие поля>

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты

Удаление ответа вопроса анкеты

Для вопросов типа "1m" и "nm".

{

    "action" : "anketa.quest.response.delete" 

   ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

   ,"quest.id" : "уникальный идентификатор вопроса" 

   ,"id" : "уникальный идентификатор ответа" 

   -- необязательный

   ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 

}

ответ

{

    <общие поля>

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты

Изменение позиции ответа вопроса

Для вопросов типа "1m" и "nm".

{

    "action" : "anketa.quest.response.order" 

    ,"anketa.id" : "уникальный идентификатор анкеты вопроса" 

    ,"id" : "уникальный идентификатор вопроса" 

    ,"order" : [ -- новый порядок ответов

         "код-ответа3" 

        ,"код-ответа8" 

        .....

        ,"код-ответа4" 

              ]

    -- необязательный

    ,"return_fresh_obj" : "нужно вернуть данные объекта -- да, нет ( 1 | 0 )" 

}

ответ

{

    <общие поля>

}

если "return_fresh_obj" : "1" 

ответ -- как на запрос чтения "action" : "anketa.get" соответствующей анкеты