Tablas Personalizadas
Resumen
Las Tablas Personalizadas le permiten ampliar el modelo de datos de Skills Workflow creando sus propias tablas, columnas y tipos de datos.
Soportan:
- esquema personalizado
- permisos por rol
- CRUD completo desde UI, SDK o API
- consultas SQL con el namespace
CustomTable - importación y exportación en JSON
Navegación a Tablas Personalizadas
- Vaya a Maintenance en el menú principal
- Seleccione el módulo Custom Tables

Crear una tabla personalizada
- Haga clic en +
- Defina el nombre de la tabla
- Configure la columna clave, normalmente
Oidcon tipoUniqueIdentifier - Agregue las columnas necesarias y sus tipos de datos

Gestionar permisos
Cada tabla personalizada tiene dos roles:
- Read Role para leer datos
- Save Role para insertar, actualizar o eliminar

Ver datos
La cuadrícula muestra la columna clave, las columnas personalizadas y el conteo total de filas.

Leer datos mediante consultas
Al crear consultas en Maintenance → Queries, configure el namespace como CustomTable y consulte el esquema [customtables].
SELECT Oid, Name, Price, IsActive
FROM [customtables].[ProductCatalog]
WHERE IsActive = 1
ORDER BY Name
Referencia del SDK
Ver métodos del SDK
get
Descripción
Obtiene todas las filas de una tabla personalizada y las devuelve como objetos JavaScript planos. Opcionalmente ordena el resultado por una columna en el cliente.
Método(s)
declare function get(
customTableName: string,
orderByColumnName?: string
): Promise<object[]>
| Parámetro | Tipo | Obligatorio | Por defecto | Descripción |
|---|---|---|---|---|
customTableName | string | true | Nombre de la tabla personalizada | |
orderByColumnName | string | false | null | Columna usada para ordenar los resultados |
Uso básico
const rows = await SW.Document.CustomTable.get("ProductCatalog");
const sorted = await SW.Document.CustomTable.get("ProductCatalog", "Name");
create
Descripción
Crea la definición de una tabla personalizada o agrega columnas a una tabla existente.
Método(s)
declare function create(
customTableName: string,
model: CustomTablePostModel
): Promise<any>
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
customTableName | string | true | Nombre de la tabla |
model | CustomTablePostModel | true | Definición de clave y columnas |
await SW.Document.CustomTable.create("ProductCatalog", {
KeyColumnName: "Oid",
KeyDataTypeId: 9,
Columns: [
{ ColumnName: "Name", ColumnDataTypeId: 6 },
{ ColumnName: "Price", ColumnDataTypeId: 4 },
{ ColumnName: "IsActive", ColumnDataTypeId: 0 }
]
});
insert
Descripción
Inserta o actualiza una o varias filas en una tabla personalizada.
Método(s)
declare function insert(
customTableName: string,
rows: CustomTableRowPostModel | CustomTableRowPostModel[]
): Promise<any[]>
await SW.Document.CustomTable.insert("ProductCatalog", {
KeyValue: SW.Utils.Guid.getNew(),
KeyColumnName: "Oid",
Columns: [
{ ColumnName: "Name", ColumnDataTypeId: 6, Value: "Widget A" },
{ ColumnName: "Price", ColumnDataTypeId: 4, Value: 29.99 }
]
});
Referencia de tipos de datos
| ID | Tipo | Descripción |
|---|---|---|
0 | Boolean | Verdadero / Falso |
1 | Date | Fecha |
2 | Float | Número decimal |
3 | Integer | Número entero |
4 | Money | Importe monetario |
5 | Varchar50 | Texto hasta 50 caracteres |
6 | Varchar100 | Texto hasta 100 caracteres |
7 | VarcharMax | Texto sin límite práctico |
8 | Text | Texto largo |
9 | UniqueIdentifier | GUID / UUID |
10 | Varchar200 | Texto hasta 200 caracteres |
Referencia de API
Ver endpoints de API
Todos los endpoints requieren autenticación mediante la cabecera X-AccessToken.
Ruta base: api/v3
Endpoints
| Método | Ruta | Descripción |
|---|---|---|
| GET | /custom-tables | Lista todas las tablas personalizadas |
| GET | /custom-tables/{tableName} | Obtiene el esquema de la tabla |
| GET | /custom-tables/{tableName}/rows/values | Obtiene todas las filas |
| GET | /custom-tables/{tableName}/row | Obtiene una fila por clave |
| GET | /custom-tables/{tableName}/rows/columnValue | Obtiene un valor de columna |
| POST | /custom-tables/{tableName} | Crea la tabla o agrega columnas |
| PUT | /custom-tables/{tableName}/rows | Inserta o actualiza filas |
| PUT | /custom-table-definitions/{id} | Actualiza permisos |
| DELETE | /custom-tables/{tableName}/rows | Elimina filas |
| DELETE | /custom-tables/{tableName} | Elimina la tabla |
| GET | /custom-tables/{tableName}/export | Exporta a JSON |
| PUT | /custom-tables/{tableName}/import | Importa desde JSON |
Insertar / Actualizar filas
PUT /api/v3/custom-tables/{tableName}/rows
| OperationType | Valor | Descripción |
|---|---|---|
Update | 0 | Actualiza una fila |
UpdateMany | 1 | Inserta o actualiza múltiples filas |
UpsertMany | 2 | Inserta si no existe y actualiza si existe |
{
"OperationType": "UpdateMany",
"UpdateManyModel": [
{
"KeyColumnName": "Oid",
"KeyValue": "a1b2c3d4-0000-0000-0000-000000000001",
"KeyDataTypeId": 9,
"Columns": [
{ "ColumnName": "Name", "Value": "Product A" },
{ "ColumnName": "Category", "Value": "Electronics" }
]
}
]
}
Eliminar filas
DELETE /api/v3/custom-tables/{tableName}/rows
{
"OperationType": "Delete",
"DeleteModel": {
"KeyColumnName": "Oid",
"KeyValue": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}
Leer datos mediante consultas
Al crear consultas SQL en Mantenimiento → Consultas, use CustomTable como namespace.
El esquema físico de base de datos es [customtables].
SELECT Oid, Name, Price, IsActive
FROM [customtables].[ProductCatalog]
WHERE IsActive = 1
ORDER BY Name