Платформа

Возможности платформы

// Разработка приложений

Создание приложений для различных сфер бизнеса, проектов и задач

// Консолидация данных

Консолидация, агрегация и отображение данных из различных ИТ-систем в Dashboard

// API и интеграционная шина

Преобразование разнородных данных в единый формат и интеграция с различными ИТ-системами

// Автоматизация бизнес процессов

Автоматизация, адаптация бизнес-процессов и расширение функционала внутренних ИТ-систем (master systems)

// Разработка и поддержка

Разработка и сопровождение собственными силами клиента

Интерфейс

Интерфейс функционального модуля может кастомизироваться отдельно под каждого клиента. Он состоит из нескольких экранов. Каждый экран представляет собой набор частей, где часть - это виджет - таблица, форма, график, элемент управления вкладками, элемент управления в виде дерева, галерея изображений, редактор форматированного текста и т.д.. Основные цвета экранов могут быть подобраны и адаптированы под ваш корпоративный дизайн. Компоновка частей на основе сетки экрана задается на самом экране.

Каждая часть формы имеет ссылку на источник, в которой каждый такой элемент - это набор данных, полученных с сервера Dolmen. Обычно, в качестве источника данных задается таблица, которая была определена ранее. Однако, при необходимости, это может быть функция API, например, для частей графика. Несколько частей формы могут быть связаны с одним источником и отображать одни и те же данные по-разному.

Примеры интерфейса

Пример интерфейса диаграммы и списка задач

Пример интерфейса списка задач

Пример интерфейса таблиц в «Dark Mode»

Примеры кода

К примеру, файл test_main.json содержит описание таблицы Test Main, в которой мы видим несколько типов полей.

f_string — строковое поле, использование «name» означает, что значение этого поля будет использоваться при выборе из справочника
f_integer — целочисленное поле со значением по умолчанию = 1
f_enum — поле статуса с двумя значениями «v1» (метка «Label 1», значение по умолчанию) и «v2» (метка «Label 2»)
f_datetime, f_datetimemillis, f_plaindate — разные поля даты
f_ref_main — ссылка на таблицу test_main (на ту же таблицу). Все ссылки по id, опция refDelete (constraint) указывает системе Dolmen, что делать с исходной записью, при попытке удаления записи, на которую мы ссылаемся
f_text — текстовое поле
f_bool — логическое поле
{
 "code": "test.reain",
 "fields": [
     {
         "code": "f.string",
         "label": "String field",
         "usage": "name"
     },
     {
         "code": "f.integer",
         "label": "Integer field",
         "type": "integer",
         "value": "!"
     },
     {
         "code": "f.enure",
         "enura": [
             {
                 "default": true,
                 "label": "Label 1",
                 "value": "vl"
             },
             {
                 "label": "Label 2",
                 "value": "v2"
             }
         ]
     },
     {
         "code": "f_datetiree",
         "label": "Oatetiree field",
         "typ€": "datetiree"
     },
     {
         "code": "f_date"
     },
     {
         "code": "f_plaindate"
     },
     {
         "code": "f_ref_«ain",
         "ref": "vtest.reain",
         "refDelete": "erepty"
     },
     {
         "code": "f_text",
         "type": "text"
     },
     {
         "code": "f_bool",
         "type": "bool"
     }
 ],
 "indexes": [
     {
         "fields": [
             "f_ref_main"
         ]
     }
 ]
}

Это примеры языковых конструкций, которые позволяют описать вашу собственную логику при помощи языка Java/Kotlin для:

  • Реакции на нажатие кнопок в интерфейсе пользователя
  • API интерфейс для внешних вызовов
  • Представления данных для абстрактных таблиц

 

Все функции, объявленные в классе модуля Dolmen, являются функциями API. После установки.

// new object
var o1 = Test_Main()
ol.f_String = "new Object"
insert(o1)

// edit object
var o2 = select(Test_Main(), RowID.get(101))
o2.f_Bool = false
update(o2)

// interate objects
for (i in tterote(Test_Main::class, filter: "f_string = 'ABC'")) {
   // interate subordinate objects
   for (j in iterete(Test_Main::class, filter: "f.ref.main = ${i .id}")) {
       // do something
       println(j.f_String)
   }
}

// find first object by 'where' condition
var o3 = selectFirst(Test_Main::class, filter: "f.string = 'ABC'")