You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Se definen tablas, vistas (que correspondan a una VIEW de la base de datos)
o vistas (que son simplemente una query que conoce la aplicación pero que no generó una VIEW).
En el futuro habrá tablas que no sean originadas en la base de datos, por ejemplo una lista de campos tendría que poder verse en una tabla.
tableDef
propiedad
tipo
predeterminado
uso
name
T
nombre que va a tener la tabla en el sistema
title
T
name
título en la grilla
editable
L
false
los permisos
allow
OP
editable
objeto de permisos individuales
primaryKey
[T]
[]
lista de nombres de campos que son PK
foreignKeys
[O]
[]
lista las definiciones de las FK
softForeignKeys
[O]
[]
lista las definiciones de las SFK. Especifica FKs (uno a uno) que no se define en la BBDD
constraints
[O]
[]
lista de constraints (salvo las Pk, FK que van en otra lista)
sql
O
deducido
sintaxis SQL para casos especiales
tableName
T
name
nombre de la tabla física (generalmente es el mismo name de definición de la tabla en el sistema)
layout
O
{}
opciones de despliegue
vertical
L
false
si el despliegue predeterminado es vertical
forInsertOnlyMode
L
false
si es una tabla de solo inserción
filterColumns
[O]
[]
lista de objetos de la forma {column, operator, value} para que sea el filtro predeterminado de la grilla
registerImports
[O]
(registerImportsDef)
lista de objetos. Configura opciones para guardar la definicion de los "otros" campos al importar un archivo (para que funcione debe existir un campo seteado como "defaultForOtherFields" (ver fieldDef))
sortColumns
[O]
[]
ordenamiento predeterminado
detailTables
[O]
[]
lista de tablas que permitirán desplegar subgrillas (estilo maestro/detalle)
functionDef
O
null
definición de SQL paramétrico o funcional
lookupFields
[T]
[f.isName]
lista de los nombres de campo que se muestran al desplegar la lista deplegable para elegir
nameForUpsert
T
null
nombre físico de la columna en la tabla usado para el insert o update en tablas basadas en consultas
ejemplos lista
formato elemento
foreignKeys
{references:'ptable', fields:['atomic_number']}
softForeignKeys
{references:'ptable', fields:['atomic_number']}
constraints
{constraintType:'unique', fields:['atomic_number','order'], consName:'repeating order in atomic_number'}
cambiar la orientación de la grilla de vertical/horizontal
sql
uso
postCreateSqls
texto con una o varias sentencias SQL que deben ejecutarse después de la creación. Sirve para agregar constraints que el motor no soporta.
constraintsDeferred
true equivale a ejecutar SET CONSTRAINTS ALL DEFERRED al comienzo de la transacción al hacer upload
isTable
true si es una tabla y por lo tanto hay que hacer el dump para el create table y si se le deben deducir los campos name de sus FK
insertIfNotUpdate
false para deshabilitar la inserción de nuevos filas en el archivo excel que se está importando (pk no presente en la BD)
fieldDef
propiedad
tipo
predeterminado
uso
name
T
nombre en la base de datos y id de campo
visible
B
true
muestra/oculta un campo de manera predeterminada
typeName
T
tipo
title
T
name
título para la grilla cuando no se quiere el name
inTable
L
true
si pertenece físicamente a la tabla y por lo tanto entra en el dump.
sequence
[O]
(sequenceDef)
determina si el campo tendria un valor auto-incremental
defaultValue
T
Valor predeterminado
defaultDbValue
T
Expresión SQL del valor predeterminado a nivel de la base de datos, no se ve en las tablas, for example "random()*1000"
defaultForOtherFields
B
false
establece si el campo (que debe definirse como "text") se utiliza para guardar un JSON con los "otros" campos cuando se importa un archivo (para que funcione debe configurarse "registerImports" (ver tableDef))
foreignKey/softForeignKey
propiedad
tipo
predeterminado
uso
references
T
nombre de la tabla
fields
[O]
lista de nombres de campos para el join (o {source:name, target:name} si los nombres son distintos)
alias
T
references
alias para el join, es necesario cuando hay dos foreignKeys que referencian a la misma tabla.
displayFields
[T]
[references.isName]
lista de nombres de campos de la tabla referida que deben mostrarse en la grilla de esta tabla. En caso de que no se especifiquen se toman los campos marcados con isName
displayAllFields
B
false
si se deben mostrar todos los campos de la tabla referida
onUpdate
T
'cascade'
que hacer si hay un update en la tabla relacionada
onDelete
T
que hacer si hay un borrado (valor posible: 'cascade').
consName
T
nombre de la constraint generada
initiallyDeferred
B
false
si se calcula al final la constraint
displayAfterFieldName
T
false
después de qué nombre de campo debe desplegar los campos de la tabla relacionada, true al final de todos los campos, false a continuación de la FK
registerImportsDef
propiedad
tipo
predeterminado
uso
inTable
T
null
nombre de tabla para guardar definicion de "otros" campos. Debe definirse si se quiere guardar la informacion (la tabla debe existir, ver ejemplo integrador)
fieldNames
[O]
(fieldNamesDef)
Objeto con configuracion de campos de la tabla definida
sequenceDef
Un objeto que contiene información para generar una secuencia auto-incremental
Si no se especifica el objeto o el nombre se usará la cláusula GENERATED ALWAYS AS IDENTITY
property
type
default value
use
name
T
null
nombre de la secuencia
firstValue
Number
1
primer número de la secuencia
prefix
T
null
prefijo de la secuencia
fieldNamesDef
Cada propiedad define que nombre de campo de tabla seteada en "registerImports.inTable" se va a utilizar para guardar la información referida a "otros" campos importados
propiedad
tipo
predeterminado
uso y restricciones
tableName
T
'table_name'
tabla de origen del campo (no puede ser null y se debe definir como text y PK en "registerImports.inTable")
fieldName
T
'field'
nombre del campo (no puede ser null y se debe definir como text y PK en "registerImports.inTable")
fieldIndex
T
'field_index'
posición del campo en el archivo (no puede ser null y debe definirse como integer en "registerImports.inTable")
originalFileName
T
null
nombre del archivo al que pertenece el campo(puede ser null y debe definirse como text en "registerImports.inTable")
serverPath
T
null
path del archivo al que pertenece el campo(puede ser null y debe definirse como text en "registerImports.inTable")
lastUpload
T
null
fecha de ultima subida del archivo al que pertenece el campo(puede ser null y debe definirse como timestamp en "registerImports.inTable")
Los campos que son null pueden no estar en la definicion de campos de la tabla definida en "registerImports.inTable", los demás son obligatorios y deben respetar las restricciones. Si no se setean los optativos (los que pueden ser null), la información no se registra por mas que existan en la tabla definida en "registerImporst.inTable".
functionDef
Llamamos SQL paramétrico cuando la propiedad from está definidia tiene parámetros $1, $2, etc.
Y Llamamos que la tabla es funcional cuando el tableName es el nombre de una función que devuelve un recordset.
propiedad
tipo
uso
parameters
[{name, typeName}]
Context
La definición de la tabla depende del parámetro context que tiene la siguiente definición
propiedad
uso
db
la base de datos. En principo es solo para usar quoteIdent, y quoteNullable
forDump
indica si se pide la definición para hacer un dump de la base
user
objeto con la información del usuario una vez que está logueado.
Ejemplo integrador, primero en javascript luego en typescript con other tables:
module.exports=function(context){return{name:'isotopes',title:'stable isotopes',allow:{insert:context.user.rol==='boss',delete:context.user.rol==='boss',update:context.user.rol==='boss',},registerImports:{inTable:'other_fields',fieldNames:{originalFileName:'original_filename',serverPath:'server_filepath',lastUpload:'last_upload',}},fields:[{name:'atomic_number',title:'A#',typeName:'integer',width:100,nullable:false,orderForInsertOnly:'1'},{name:'mass_number',typeName:'integer',width:100,orderForInsertOnly:'2'},{name:'order',typeName:'integer',width:100,orderForInsertOnly:'4'},{name:'stable',typeName:'boolean',width:100,},{name:'others',typeName:'text',width:700,defaultForOtherFields: true},],filterColumns:[{column:'atomic_number',operator:'>',value:context.be.internalData.filterAtomicNumberForIsotopes}],primaryKey:['atomic_number','mass_number'],constraints:[{constraintType:'unique',fields:['atomic_number','order'],consName:'repeating order in atomic_number'}],foreignKeys:[{references:'ptable',fields:['atomic_number']}]};}
"use strict";import{TableDefinition,TableContext}from"backend-plus";exportfunctiontable_with_otherfields(context:TableContext):TableDefinition{varadmin=context.user.rol==='boss';return{name:'table_with_otherfields',allow:{insert:true,update:true,},title:'information about other fields',editable:admin,fields:[{name:'table_name',typeName:'text',nullable:false},{name:'field',typeName:'text',nullable:false},{name:'field_index',typeName:'integer',nullable:false},{name:'original_filename',typeName:'text'},{name:'server_filepath',typeName:'text'},{name:'last_upload',typeName:'timestamp'},],primaryKey:['table_name','field'],};}