Ejemplo 1: Formulario Simple - Registro de Usuario

Formulario básico con inputs, validaciones y botón de envío.

Estructura Visual

┌────────────────────────────────────────┐
│  Registro de Usuario                   │
├────────────────────────────────────────┤
│  [Nombre Completo____________]         │
│  [Email__________________] [@___]      │
│  [Teléfono_______________]             │
│  [Fecha Nacimiento____] [Calend]       │
│  □ Acepto términos y condiciones       │
│  [Registrarse] [Cancelar]              │
└────────────────────────────────────────┘

JSON Completo

{  "id": 100,  "name": "form_RegistroUsuario",  "controls": "[{\"name\":\"form_RegistroUsuario\",\"component\":\"MainFormComponent\",\"x\":0,\"y\":0,\"rows\":0,\"cols\":0,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"form_RegistroUsuario\",\"label\":\"Registro de Usuario\",\"font\":\"Quicksand\",\"fontSize\":12,\"fontColor\":\"#000000\",\"backgroundColor\":\"#FFFFFF\",\"enabled\":true,\"visible\":true},{\"class\":\"FormPropertiesComponent\",\"showMessageOnSuccess\":true,\"messageOnSuccess\":\"Usuario registrado correctamente. Recibirá un email de confirmación.\",\"showMessageOnError\":true,\"messageOnError\":\"Error al registrar usuario. Verifique los datos.\",\"closeOnSuccess\":true,\"cols\":6,\"rowHeight\":70,\"theme\":\"bizuit\",\"modalType\":\"swal\",\"themeUseDefaultSettings\":true},{\"class\":\"CustomCodePropertiesComponent\",\"events\":[]},{\"class\":\"CustomStylesPropertiesComponent\",\"cssCode\":\"\"}],\"children\":[{\"name\":\"LblTitulo\",\"component\":\"LabelComponent\",\"x\":0,\"y\":0,\"rows\":1,\"cols\":6,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"LblTitulo\",\"label\":\"Registro de Usuario\",\"value\":\"Registro de Usuario\",\"font\":\"Quicksand\",\"fontSize\":20,\"fontColor\":\"#667eea\",\"fontWeight\":\"bold\",\"enabled\":true,\"visible\":true}]},{\"name\":\"TxtNombre\",\"component\":\"InputTextboxComponent\",\"x\":0,\"y\":1,\"rows\":1,\"cols\":3,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"TxtNombre\",\"label\":\"Nombre Completo\",\"value\":\"\",\"tooltip\":\"Ingrese su nombre y apellido\",\"enabled\":true,\"visible\":true},{\"class\":\"BindingsPropertiesComponent\",\"primaryDataSource\":{\"source\":\"parameter\",\"name\":\"NombreCompleto\",\"mode\":\"bidirectional\",\"type\":\"Parameter\",\"parameterType\":1}},{\"class\":\"RestrictionsPropertiesComponent\",\"required\":true,\"dataType\":\"String\",\"lengthType\":\"Variable\",\"minLength\":3,\"maxLength\":100},{\"class\":\"ValidationsPropertiesComponent\",\"match\":\"ANY\",\"errorMessage\":\"\",\"rules\":[]},{\"class\":\"CustomCodePropertiesComponent\",\"events\":[]}]},{\"name\":\"TxtEmail\",\"component\":\"InputTextboxComponent\",\"x\":3,\"y\":1,\"rows\":1,\"cols\":3,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"TxtEmail\",\"label\":\"Email\",\"value\":\"\",\"enabled\":true,\"visible\":true},{\"class\":\"BindingsPropertiesComponent\",\"primaryDataSource\":{\"source\":\"parameter\",\"name\":\"Email\",\"mode\":\"bidirectional\"}},{\"class\":\"RestrictionsPropertiesComponent\",\"required\":true,\"dataType\":\"String\",\"regexPattern\":\"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,}$\"},{\"class\":\"ValidationsPropertiesComponent\",\"match\":\"ANY\",\"errorMessage\":\"Email inválido\",\"rules\":[]}]},{\"name\":\"TxtTelefono\",\"component\":\"InputTextboxComponent\",\"x\":0,\"y\":2,\"rows\":1,\"cols\":3,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"TxtTelefono\",\"label\":\"Teléfono\",\"value\":\"\",\"enabled\":true,\"visible\":true},{\"class\":\"BindingsPropertiesComponent\",\"primaryDataSource\":{\"source\":\"parameter\",\"name\":\"Telefono\",\"mode\":\"bidirectional\"}},{\"class\":\"RestrictionsPropertiesComponent\",\"required\":false,\"dataType\":\"String\",\"regexPattern\":\"^[0-9]{10}$\"}]},{\"name\":\"DtpFechaNacimiento\",\"component\":\"DatePickerComponent\",\"x\":3,\"y\":2,\"rows\":1,\"cols\":3,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"DtpFechaNacimiento\",\"label\":\"Fecha de Nacimiento\",\"enabled\":true,\"visible\":true},{\"class\":\"BindingsPropertiesComponent\",\"primaryDataSource\":{\"source\":\"parameter\",\"name\":\"FechaNacimiento\",\"mode\":\"bidirectional\"}},{\"class\":\"RestrictionsPropertiesComponent\",\"required\":true,\"format\":\"Short\",\"dateTimeMaxValueType\":\"Relative\",\"dateTimeMaxValueRelativeOperation\":\"Subtract\",\"dateTimeMaxValueRelativePeriod\":\"Years\",\"dateTimeMaxValueRelativeValue\":18}]},{\"name\":\"ChkTerminos\",\"component\":\"CheckboxComponent\",\"x\":0,\"y\":3,\"rows\":1,\"cols\":6,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"ChkTerminos\",\"label\":\"Acepto los términos y condiciones\",\"value\":\"false\"},{\"class\":\"RestrictionsPropertiesComponent\",\"required\":true,\"dataTypeBooleanControl\":\"Boolean\",\"checkValue\":\"true\",\"uncheckValue\":\"false\"},{\"class\":\"ValidationsPropertiesComponent\",\"match\":\"ALL\",\"errorMessage\":\"Debe aceptar los términos\",\"rules\":[{\"name\":\"Validar\",\"conditions\":[{\"controlName\":\"ChkTerminos\",\"operator\":\"equals\",\"value\":{\"type\":\"constant\",\"value\":\"true\"}}]}]}]},{\"name\":\"BtnRegistrar\",\"component\":\"ButtonComponent\",\"x\":2,\"y\":4,\"rows\":1,\"cols\":2,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"BtnRegistrar\",\"label\":\"Registrarse\"},{\"class\":\"ButtonPropertiesComponent\",\"backgroundColor\":\"primary\",\"classType\":\"mat-raised-button\",\"icon\":\"person_add\"},{\"class\":\"CustomCodePropertiesComponent\",\"basicEvent\":1,\"executeValidation\":true,\"events\":[]}]},{\"name\":\"BtnCancelar\",\"component\":\"ButtonComponent\",\"x\":4,\"y\":4,\"rows\":1,\"cols\":2,\"props\":[{\"class\":\"BasicPropertiesComponent\",\"name\":\"BtnCancelar\",\"label\":\"Cancelar\"},{\"class\":\"ButtonPropertiesComponent\",\"backgroundColor\":\"warn\",\"classType\":\"mat-stroked-button\",\"icon\":\"cancel\"},{\"class\":\"CustomCodePropertiesComponent\",\"basicEvent\":5,\"events\":[]}]}]}]",  "dataSources": "[{\"name\":\"Parámetros y Variables\",\"isPrimary\":true,\"primarySchema\":[{\"label\":\"NombreCompleto\",\"type\":\"parameter\",\"dataType\":\"String\"},{\"label\":\"Email\",\"type\":\"parameter\",\"dataType\":\"String\"},{\"label\":\"Telefono\",\"type\":\"parameter\",\"dataType\":\"String\"},{\"label\":\"FechaNacimiento\",\"type\":\"parameter\",\"dataType\":\"Date\"}],\"events\":[]}]",  "version": 1,  "published": false,  "description": "Formulario de registro de usuario simple",  "category": "Usuarios",  "subcategory": "Registro"}

Ejemplo 2: Formulario Completo - Solicitud de Crédito

Formulario complejo con múltiples componentes, data sources SQL y REST API, validaciones cruzadas y lógica personalizada.

Estructura Visual

┌─────────────────────────────────────────────────────────┐
│  🏦 SOLICITUD DE CRÉDITO PERSONAL                       │
├─────────────────────────────────────────────────────────┤
│  ┌─ Datos Personales ─────────────────────────────────┐│
│  │ [Nombre__________] [Apellido__________]            ││
│  │ [DNI_______] [Tipo Doc▼] [Fecha Nac___]           ││
│  │ [Email___________] [Teléfono__________]            ││
│  └────────────────────────────────────────────────────┘│
│  ┌─ Datos del Préstamo ──────────────────────────────┐│
│  │ [Tipo Crédito▼] [Monto $______] [Cuotas__]        ││
│  │ [Destino Fondos▼]                                  ││
│  │ ○ Empleado  ○ Autónomo  ○ Desempleado             ││
│  └────────────────────────────────────────────────────┘│
│  ┌─ Productos Seleccionados ─────────────────────────┐│
│  │ │Código│Descripción       │Cantidad│Precio│Total │││
│  │ ├──────┼──────────────────┼────────┼──────┼──────┤││
│  │ │PROD1 │Préstamo Personal │   1    │10000 │10000 │││
│  │ │PROD2 │Seguro de Vida    │   1    │ 500  │ 500  │││
│  │ └──────┴──────────────────┴────────┴──────┴──────┘││
│  └────────────────────────────────────────────────────┘│
│  [📄 Adjuntar DNI] [📄 Adjuntar Recibo]                │
│  □ Acepto términos y condiciones                        │
│  Total: $10,500.00                                      │
│  [💾 Guardar] [✅ Enviar Solicitud] [❌ Cancelar]      │
└─────────────────────────────────────────────────────────┘

JSON Completo (Simplificado para legibilidad)

Nota: Este JSON está deserializado y formateado para comprensión. En producción debe estar serializado.

{  "id": 200,  "name": "form_SolicitudCredito",  "version": 1,  "published": true,  "description": "Formulario completo de solicitud de crédito con validaciones y data sources",  "category": "Créditos",  "subcategory": "Solicitudes",  "controls": [    {      "name": "form_SolicitudCredito",      "component": "MainFormComponent",      "x": 0, "y": 0, "rows": 0, "cols": 0,      "props": [        {          "class": "BasicPropertiesComponent",          "name": "form_SolicitudCredito",          "label": "Solicitud de Crédito Personal",          "font": "Quicksand",          "fontSize": 12,          "backgroundColor": "#F5F5F5",          "enabled": true,          "visible": true        },        {          "class": "FormPropertiesComponent",          "showMessageOnSuccess": true,          "messageOnSuccess": "Solicitud enviada correctamente. Número de referencia: [:NumeroSolicitud:]",          "messagesParametersOnSuccess": [            {"key": "NumeroSolicitud", "value": "/parameter/SolicitudId"}          ],          "showMessageOnError": true,          "messageOnError": "Error al procesar solicitud. Verifique los datos.",          "closeOnSuccess": true,          "cols": 6,          "rowHeight": 70,          "theme": "bizuit",          "modalType": "swal"        },        {          "class": "CustomCodePropertiesComponent",          "events": [            {              "eventType": "Load",              "code": "this.executeDataSource('CargarTiposCredito');\nthis.executeDataSource('CargarDestinoFondos');"            }          ]        },        {          "class": "CustomStylesPropertiesComponent",          "cssCode": ".header-gradient { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 20px; color: white; border-radius: 8px 8px 0 0; }"        }      ],      "children": [        // HEADER        {          "name": "HdrTitulo",          "component": "HeaderComponent",          "x": 0, "y": 0, "rows": 1, "cols": 6,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "HdrTitulo"            },            {              "class": "HeaderPropertiesComponent",              "title": "Solicitud de Crédito Personal",              "subtitle": "Complete todos los datos requeridos",              "showLogo": true,              "logoUrl": "<https://cdn.example.com/logo.png>",              "backgroundColor": "#667eea",              "textColor": "#FFFFFF"            }          ]        },        // CONTENEDOR: DATOS PERSONALES        {          "name": "CntDatosPersonales",          "component": "ContainerComponent",          "x": 0, "y": 1, "rows": 3, "cols": 6,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "CntDatosPersonales",              "label": "Datos Personales",              "backgroundColor": "#FFFFFF"            },            {              "class": "ContainerPropertiesComponent",              "borderColor": "#E5E7EB",              "borderWidth": 1,              "borderStyle": "solid",              "borderRadius": 8,              "padding": 15            }          ],          "children": [            {              "name": "TxtNombre",              "component": "InputTextboxComponent",              "x": 0, "y": 0, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtNombre",                  "label": "Nombre",                  "enabled": true,                  "visible": true                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "ClienteNombre",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "String",                  "minLength": 2,                  "maxLength": 50                }              ]            },            {              "name": "TxtApellido",              "component": "InputTextboxComponent",              "x": 3, "y": 0, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtApellido",                  "label": "Apellido"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "ClienteApellido",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "String",                  "minLength": 2,                  "maxLength": 50                }              ]            },            {              "name": "TxtDNI",              "component": "InputTextboxComponent",              "x": 0, "y": 1, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtDNI",                  "label": "DNI"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "DNI",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "String",                  "regexPattern": "^[0-9]{8}$"                }              ]            },            {              "name": "CmbTipoDocumento",              "component": "ComboboxComponent",              "x": 2, "y": 1, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "CmbTipoDocumento",                  "label": "Tipo Documento"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "TipoDocumento",                    "mode": "bidirectional"                  }                },                {                  "class": "PopulationPropertiesComponent",                  "dataOrigin": "Manual",                  "options": [                    {"value": "DNI", "label": "DNI"},                    {"value": "Pasaporte", "label": "Pasaporte"},                    {"value": "CUIL", "label": "CUIL"}                  ]                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true                }              ]            },            {              "name": "DtpFechaNacimiento",              "component": "DatePickerComponent",              "x": 4, "y": 1, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "DtpFechaNacimiento",                  "label": "Fecha Nacimiento"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "FechaNacimiento",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "format": "Short",                  "dateTimeMaxValueType": "Relative",                  "dateTimeMaxValueRelativeOperation": "Subtract",                  "dateTimeMaxValueRelativePeriod": "Years",                  "dateTimeMaxValueRelativeValue": 18                }              ]            },            {              "name": "TxtEmail",              "component": "InputTextboxComponent",              "x": 0, "y": 2, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtEmail",                  "label": "Email"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "Email",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "String",                  "regexPattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$"                }              ]            },            {              "name": "TxtTelefono",              "component": "InputTextboxComponent",              "x": 3, "y": 2, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtTelefono",                  "label": "Teléfono"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "Telefono",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "String",                  "regexPattern": "^[0-9]{10}$"                }              ]            }          ]        },        // CONTENEDOR: DATOS DEL PRÉSTAMO        {          "name": "CntDatosPrestamo",          "component": "ContainerComponent",          "x": 0, "y": 4, "rows": 2, "cols": 6,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "CntDatosPrestamo",              "label": "Datos del Préstamo",              "backgroundColor": "#FFFFFF"            },            {              "class": "ContainerPropertiesComponent",              "borderColor": "#E5E7EB",              "borderWidth": 1,              "borderStyle": "solid",              "borderRadius": 8,              "padding": 15            }          ],          "children": [            {              "name": "CmbTipoCredito",              "component": "ComboboxComponent",              "x": 0, "y": 0, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "CmbTipoCredito",                  "label": "Tipo de Crédito"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "TipoCreditoId",                    "mode": "bidirectional"                  },                  "secondaryDataSourceResponse": {                    "name": "CargarTiposCredito",                    "item": "Table_0"                  }                },                {                  "class": "PopulationPropertiesComponent",                  "dataOrigin": "DataSource",                  "dataSourceName": "CargarTiposCredito",                  "valueProperty": "TipoCreditoId",                  "textProperty": "TipoCreditoNombre"                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true                },                {                  "class": "CustomCodePropertiesComponent",                  "events": [                    {                      "eventType": "Change",                      "code": "const tipoId = this.getControlValue('CmbTipoCredito');\nif (tipoId) {\n  this.executeDataSource('ConsultarLimites');\n}"                    }                  ]                }              ]            },            {              "name": "TxtMonto",              "component": "InputTextboxComponent",              "x": 2, "y": 0, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtMonto",                  "label": "Monto Solicitado"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "MontoSolicitado",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "Number",                  "minValue": 1000,                  "maxValue": 100000,                  "minValueIncluded": true,                  "maxValueIncluded": true,                  "decimalDigits": 2                },                {                  "class": "FormattingPropertiesComponent",                  "formatType": "Currency",                  "currencySymbol": "$",                  "decimalPlaces": 2,                  "thousandsSeparator": ",",                  "decimalSeparator": "."                },                {                  "class": "ValidationsPropertiesComponent",                  "match": "ALL",                  "errorMessage": "El monto debe estar entre los límites del tipo de crédito",                  "rules": [                    {                      "name": "Validar Límite Inferior",                      "conditions": [                        {                          "controlName": "TxtMonto",                          "operator": "greaterThanOrEqual",                          "value": {"type": "control", "value": "LblMontoMinimo"}                        }                      ]                    },                    {                      "name": "Validar Límite Superior",                      "conditions": [                        {                          "controlName": "TxtMonto",                          "operator": "lessThanOrEqual",                          "value": {"type": "control", "value": "LblMontoMaximo"}                        }                      ]                    }                  ]                }              ]            },            {              "name": "TxtCuotas",              "component": "InputTextboxComponent",              "x": 4, "y": 0, "rows": 1, "cols": 2,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "TxtCuotas",                  "label": "Cantidad de Cuotas"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "CantidadCuotas",                    "mode": "bidirectional"                  }                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true,                  "dataType": "Number",                  "minValue": 1,                  "maxValue": 60,                  "decimalDigits": 0                }              ]            },            {              "name": "CmbDestinoFondos",              "component": "ComboboxComponent",              "x": 0, "y": 1, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "CmbDestinoFondos",                  "label": "Destino de los Fondos"                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "DestinoFondosId",                    "mode": "bidirectional"                  },                  "secondaryDataSourceResponse": {                    "name": "CargarDestinoFondos",                    "item": "Table_0"                  }                },                {                  "class": "PopulationPropertiesComponent",                  "dataOrigin": "DataSource",                  "dataSourceName": "CargarDestinoFondos",                  "valueProperty": "DestinoId",                  "textProperty": "DestinoNombre"                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true                }              ]            },            {              "name": "RbSituacionLaboral",              "component": "RadioButtonComponent",              "x": 3, "y": 1, "rows": 1, "cols": 3,              "props": [                {                  "class": "BasicPropertiesComponent",                  "name": "RbSituacionLaboral",                  "label": "Situación Laboral",                  "vertical": false                },                {                  "class": "BindingsPropertiesComponent",                  "primaryDataSource": {                    "source": "parameter",                    "name": "SituacionLaboral",                    "mode": "bidirectional"                  }                },                {                  "class": "PopulationPropertiesComponent",                  "dataOrigin": "Manual",                  "options": [                    {"value": "Empleado", "label": "Empleado"},                    {"value": "Autonomo", "label": "Autónomo"},                    {"value": "Desempleado", "label": "Desempleado"}                  ]                },                {                  "class": "RestrictionsPropertiesComponent",                  "required": true                }              ]            }          ]        },        // TABLA DE PRODUCTOS        {          "name": "TblProductos",          "component": "TableComponent",          "x": 0, "y": 6, "rows": 3, "cols": 6,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "TblProductos",              "label": "Productos Seleccionados"            },            {              "class": "BindingsPropertiesComponent",              "secondaryDataSourceResponse": {                "name": "ConsultarProductos",                "item": "Table_0"              }            },            {              "class": "TablePropertiesComponent",              "canAdd": true,              "canEdit": true,              "canDelete": true,              "canSelect": true,              "paginationPageSize": 10,              "showPagination": false,              "emptyRowsMessage": "No hay productos seleccionados",              "rowCountMessage": "Total productos"            },            {              "class": "ColumnsPropertiesComponent",              "columns": [                {                  "name": "Código",                  "prop": "codigo",                  "dataType": "String",                  "editable": false,                  "width": 100,                  "widthUnits": "Pixeles"                },                {                  "name": "Descripción",                  "prop": "descripcion",                  "dataType": "String",                  "editable": false,                  "width": 40,                  "widthUnits": "Porcentaje"                },                {                  "name": "Cantidad",                  "prop": "cantidad",                  "dataType": "Number",                  "editable": true,                  "width": 80,                  "widthUnits": "Pixeles"                },                {                  "name": "Precio",                  "prop": "precio",                  "dataType": "Number",                  "editable": false,                  "width": 100,                  "widthUnits": "Pixeles"                },                {                  "name": "Total",                  "prop": "total",                  "dataType": "Number",                  "editable": false,                  "width": 100,                  "widthUnits": "Pixeles"                }              ]            },            {              "class": "CustomCodePropertiesComponent",              "events": [                {                  "eventType": "Click",                  "code": "// Calcular totales cuando se modifica la tabla\nthis.calcularTotales();"                }              ]            }          ]        },        // DOCUMENTOS        {          "name": "DocDNI",          "component": "DocumentInputComponent",          "x": 0, "y": 9, "rows": 1, "cols": 3,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "DocDNI",              "label": "Adjuntar DNI (Frente y Dorso)"            },            {              "class": "DocumentPropertiesComponent",              "allowedExtensions": ["pdf", "jpg", "png"],              "maxFileSize": 5242880,              "multiple": true,              "sendFilesToBIZUITDataSource": true            }          ]        },        {          "name": "DocRecibo",          "component": "DocumentInputComponent",          "x": 3, "y": 9, "rows": 1, "cols": 3,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "DocRecibo",              "label": "Adjuntar Último Recibo de Sueldo"            },            {              "class": "DocumentPropertiesComponent",              "allowedExtensions": ["pdf"],              "maxFileSize": 5242880,              "multiple": false,              "sendFilesToBIZUITDataSource": true            }          ]        },        // TÉRMINOS        {          "name": "ChkTerminos",          "component": "CheckboxComponent",          "x": 0, "y": 10, "rows": 1, "cols": 6,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "ChkTerminos",              "label": "Acepto los términos y condiciones del crédito",              "value": "false"            },            {              "class": "RestrictionsPropertiesComponent",              "required": true,              "dataTypeBooleanControl": "Boolean",              "checkValue": "true",              "uncheckValue": "false"            },            {              "class": "ValidationsPropertiesComponent",              "match": "ALL",              "errorMessage": "Debe aceptar los términos y condiciones",              "rules": [                {                  "name": "Validar Aceptación",                  "conditions": [                    {                      "controlName": "ChkTerminos",                      "operator": "equals",                      "value": {"type": "constant", "value": "true"}                    }                  ]                }              ]            }          ]        },        // TOTAL        {          "name": "LblTotal",          "component": "LabelComponent",          "x": 4, "y": 11, "rows": 1, "cols": 2,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "LblTotal",              "label": "Total:",              "value": "$0.00",              "fontSize": 18,              "fontWeight": "bold",              "align": "center-end"            },            {              "class": "BindingsPropertiesComponent",              "primaryDataSource": {                "source": "variable",                "name": "MontoTotal",                "mode": "unidirectional"              }            }          ]        },        // BOTONES        {          "name": "BtnGuardar",          "component": "ButtonComponent",          "x": 1, "y": 12, "rows": 1, "cols": 1,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "BtnGuardar",              "label": "Guardar"            },            {              "class": "ButtonPropertiesComponent",              "backgroundColor": "accent",              "classType": "mat-stroked-button",              "icon": "save"            },            {              "class": "CustomCodePropertiesComponent",              "basicEvent": 4,              "executeValidation": false            }          ]        },        {          "name": "BtnEnviar",          "component": "ButtonComponent",          "x": 2, "y": 12, "rows": 1, "cols": 2,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "BtnEnviar",              "label": "Enviar Solicitud"            },            {              "class": "ButtonPropertiesComponent",              "backgroundColor": "primary",              "classType": "mat-raised-button",              "icon": "send"            },            {              "class": "CustomCodePropertiesComponent",              "basicEvent": 1,              "executeValidation": true,              "selectedSecondaryDatasource": "EnviarSolicitudAPI"            }          ]        },        {          "name": "BtnCancelar",          "component": "ButtonComponent",          "x": 4, "y": 12, "rows": 1, "cols": 2,          "props": [            {              "class": "BasicPropertiesComponent",              "name": "BtnCancelar",              "label": "Cancelar"            },            {              "class": "ButtonPropertiesComponent",              "backgroundColor": "warn",              "classType": "mat-stroked-button",              "icon": "cancel"            },            {              "class": "CustomCodePropertiesComponent",              "basicEvent": 5            }          ]        }      ]    }  ],  "dataSources": [    // PRIMARY DATA SOURCES    {      "name": "Parámetros y Variables",      "isPrimary": true,      "primarySchema": [        {"label": "ClienteNombre", "type": "parameter", "dataType": "String"},        {"label": "ClienteApellido", "type": "parameter", "dataType": "String"},        {"label": "DNI", "type": "parameter", "dataType": "String"},        {"label": "TipoDocumento", "type": "parameter", "dataType": "String"},        {"label": "FechaNacimiento", "type": "parameter", "dataType": "Date"},        {"label": "Email", "type": "parameter", "dataType": "String"},        {"label": "Telefono", "type": "parameter", "dataType": "String"},        {"label": "TipoCreditoId", "type": "parameter", "dataType": "Number"},        {"label": "MontoSolicitado", "type": "parameter", "dataType": "Number"},        {"label": "CantidadCuotas", "type": "parameter", "dataType": "Number"},        {"label": "DestinoFondosId", "type": "parameter", "dataType": "Number"},        {"label": "SituacionLaboral", "type": "parameter", "dataType": "String"},        {"label": "SolicitudId", "type": "parameter", "dataType": "Number", "direction": "Out"},        {"label": "MontoTotal", "type": "variable", "dataType": "Number"}      ]    },    // SQL DATA SOURCE 1    {      "name": "CargarTiposCredito",      "isPrimary": false,      "componentType": "SqlDataSourceComponent",      "properties": [        {          "class": "SqlDataSourcePropertiesComponent",          "name": "CargarTiposCredito",          "controllerType": 0,          "connectionSource": 1,          "connectionString": "DefaultConnection",          "query": "SELECT TipoCreditoId, TipoCreditoNombre, TasaInteres FROM TiposCredito WHERE Activo = 1 ORDER BY TipoCreditoNombre",          "parameters": [],          "executeOnStart": true,          "useCache": true,          "cacheTime": 300,          "requestStructure": "[{\"label\":\"Request\",\"children\":[]}]",          "responseStructure": "[{\"label\":\"Response\",\"children\":[{\"label\":\"Table_0\",\"type\":\"TableComponent\",\"columns\":[{\"prop\":\"TipoCreditoId\"},{\"prop\":\"TipoCreditoNombre\"},{\"prop\":\"TasaInteres\"}],\"children\":[{\"label\":\"TipoCreditoId\",\"secondaryDataSourceResponse\":{\"name\":\"CargarTiposCredito\",\"item\":\"Table_0/TipoCreditoId\"}},{\"label\":\"TipoCreditoNombre\",\"secondaryDataSourceResponse\":{\"name\":\"CargarTiposCredito\",\"item\":\"Table_0/TipoCreditoNombre\"}},{\"label\":\"TasaInteres\",\"secondaryDataSourceResponse\":{\"name\":\"CargarTiposCredito\",\"item\":\"Table_0/TasaInteres\"}}]}]}]"        }      ]    },    // SQL DATA SOURCE 2    {      "name": "CargarDestinoFondos",      "isPrimary": false,      "componentType": "SqlDataSourceComponent",      "properties": [        {          "class": "SqlDataSourcePropertiesComponent",          "name": "CargarDestinoFondos",          "controllerType": 0,          "connectionSource": 1,          "connectionString": "DefaultConnection",          "query": "SELECT DestinoId, DestinoNombre FROM DestinoFondos WHERE Activo = 1 ORDER BY DestinoNombre",          "parameters": [],          "executeOnStart": true,          "useCache": true,          "cacheTime": 300,          "requestStructure": "[{\"label\":\"Request\",\"children\":[]}]",          "responseStructure": "[{\"label\":\"Response\",\"children\":[{\"label\":\"Table_0\",\"type\":\"TableComponent\",\"columns\":[{\"prop\":\"DestinoId\"},{\"prop\":\"DestinoNombre\"}]}]}]"        }      ]    },    // SQL DATA SOURCE 3    {      "name": "ConsultarProductos",      "isPrimary": false,      "componentType": "SqlDataSourceComponent",      "properties": [        {          "class": "SqlDataSourcePropertiesComponent",          "name": "ConsultarProductos",          "controllerType": 0,          "connectionSource": 1,          "connectionString": "DefaultConnection",          "query": "SELECT ProductoId as codigo, ProductoNombre as descripcion, 1 as cantidad, Precio as precio, Precio as total FROM Productos WHERE TipoCreditoId = @TipoCreditoId AND Activo = 1",          "parameters": [            {              "name": "@TipoCreditoId",              "value": null,              "direction": 0,              "dataType": 1            }          ],          "executeOnStart": false,          "requestStructure": "[{\"label\":\"Request\",\"children\":[{\"label\":\"TipoCreditoId\",\"type\":\"InputTextboxComponent\",\"secondaryDataSourcesRequest\":[{\"name\":\"ConsultarProductos\",\"item\":\"TipoCreditoId\"}]}]}]",          "responseStructure": "[{\"label\":\"Response\",\"children\":[{\"label\":\"Table_0\",\"type\":\"TableComponent\",\"columns\":[{\"prop\":\"codigo\"},{\"prop\":\"descripcion\"},{\"prop\":\"cantidad\"},{\"prop\":\"precio\"},{\"prop\":\"total\"}]}]}]"        }      ]    },    // REST API DATA SOURCE    {      "name": "EnviarSolicitudAPI",      "isPrimary": false,      "componentType": "RestAPIDataSourceComponent",      "properties": [        {          "class": "RestAPIDataSourcePropertiesComponent",          "name": "EnviarSolicitudAPI",          "URL": "<https://api.banco.com/solicitudes>",          "method": "POST",          "timeout": 30,          "addHeaders": true,          "headers": [            {"key": "Content-Type", "value": "application/json"},            {"key": "Authorization", "value": "Bearer token-api"}          ],          "useAuth": true,          "authorizationType": "OAuth 2.0",          "bearerToken": "",          "useBody": true,          "bodyType": "raw",          "bodySubType": "application/json",          "txtBody": "{\n  \"cliente\": {\n    \"nombre\": @ClienteNombre,\n    \"apellido\": @ClienteApellido,\n    \"dni\": @DNI,\n    \"email\": @Email,\n    \"telefono\": @Telefono\n  },\n  \"credito\": {\n    \"tipoId\": @TipoCreditoId,\n    \"monto\": @MontoSolicitado,\n    \"cuotas\": @CantidadCuotas,\n    \"destino\": @DestinoFondosId\n  }\n}",          "rawParameters": [            {"key": "@ClienteNombre", "value": ""},            {"key": "@ClienteApellido", "value": ""},            {"key": "@DNI", "value": ""},            {"key": "@Email", "value": ""},            {"key": "@Telefono", "value": ""},            {"key": "@TipoCreditoId", "value": ""},            {"key": "@MontoSolicitado", "value": ""},            {"key": "@CantidadCuotas", "value": ""},            {"key": "@DestinoFondosId", "value": ""}          ],          "executeOnStart": false,          "requestStructure": "[{\"label\":\"Request\",\"children\":[{\"label\":\"Properties\",\"children\":[{\"label\":\"bodyraw\",\"type\":\"TextareaComponent\"}]}]}]",          "responseStructure": "[{\"label\":\"Response\",\"children\":[{\"label\":\"solicitudId\",\"type\":\"InputTextboxComponent\",\"secondaryDataSourceResponse\":{\"name\":\"EnviarSolicitudAPI\",\"item\":\"solicitudId\"}},{\"label\":\"numeroReferencia\",\"type\":\"InputTextboxComponent\"},{\"label\":\"estado\",\"type\":\"InputTextboxComponent\"}]}]"        }      ]    }  ]}

Características del Ejemplo

Componentes Utilizados:

Data Sources:

Características Avanzadas:


Ejemplo 3: Formulario con Tabs y Stepper