Esta documentación está en fase de desarrollo y puede contener errores.

Escribir en secciones

Cómo se comporta Dinaup al escribir por API o SDK: autorrellenado de campos, por qué importa el orden y qué automatizan los scripts.

Un WriteOperation envía un diccionario campo → valor. Pero la sección no es un almacén pasivo: al escribir, el servidor autorrellena campos dependientes, calcula totales y puede ejecutar la misma lógica interna que usa la interfaz. Entender estos tres comportamientos evita la mayoría de sorpresas al integrar.

1. El orden de los campos importa

Los campos se procesan en el orden en que los envías, y escribir uno dispara los autorrellenados que dependen de él.

Ejemplo real de Ventas: al rellenar Cliente, se copia automáticamente su descuento a la venta. Si envías primero el descuento manual y después el cliente, el autorrellenado del cliente pisa tu descuento. Regla práctica: primero las referencias (cliente, proceso, producto...), después los valores manuales.

Otro ejemplo, de Oportunidades CRM: al escribir el Proceso comercial, la Fase se autorrellena con la fase inicial de ese proceso. El proceso va antes que cualquier campo que dependa de la fase.

2. Autorrellenado «Siempre» copia incondicionalmente

Cuando un campo está definido como autorrellenado «Siempre» desde otro, la copia se ejecuta cada vez que cambia el origen:

  • Si seleccionas un cliente sin descuento, el descuento de la venta se copia vacío (no se conserva el anterior).
  • Si deseleccionas el cliente, el destino también se vacía.

No es un valor por defecto: es una copia viva. Si necesitas un valor manual distinto, escríbelo después del campo que lo autorrellena.

3. Los scripts hacen el trabajo por ti

Cada sección puede llevar scripts internos: cálculos, validaciones y filtros que en la interfaz se ejecutan solos. Al escribir por API con scripts activados, se ejecutan igual:

// Tercer parámetro a true: el servidor ejecuta los scripts de la sección
// (calcula totales, valida y aplica su lógica, igual que en la interfaz).
var result = await dinaupClient.RunWriteOperationAsync(sectionId, bulkOperations, true);

En una venta, rellenas Cantidad y PrecioPorUnidad de una línea y el total del concepto —y los totales del documento— se calculan solos. En turnos, los scripts calculan duraciones. Sin scripts, esos campos quedarían a tu cargo: actívalos y reduce tu responsabilidad a los datos de negocio.

Campos que no se envían

Los campos marcados como auto-gestionados (fechas UTC, autor del alta, empresa, calculados como los totales) los pone el servidor: enviarlos es en el mejor caso inútil y en el peor un error. En el SDK, el comentario de cada campo (///) indica su política de escritura: Required, Auto-filled (Siempre), Read-only via REST o can be set when creating, but read-only on update.

4. En las listas, el servidor solo toca las líneas que envías

Una sección con lista (una venta y sus conceptos, un asiento y sus apuntes) se escribe siempre por su sección principal: la cabecera en DataMainRow y las líneas en DataListRows, dentro del mismo WriteOperation. La sección de lista no admite escrituras directas — sus scripts y cálculos viven en la principal.

Enviar líneas no reemplaza la lista. El servidor procesa una a una las que recibe, decide por su "id", y deja intactas las que no están en el envío:

La línea enviada llevaEl servidor
"id" vacío, o sin "id"crea la línea
el "id" de una línea existenteedita solo los campos enviados
su "id" y "eliminado" a "1"borra la línea

Puedes corregir el precio de un concepto enviando una única línea con su "id", sin releer ni reenviar el resto del documento.

Resumen operativo

SituaciónQué hacer
Alta con referencias (cliente, producto, proceso...)Referencias primero, valores manuales después
Un valor manual "desaparece"Un autorrellenado «Siempre» posterior lo pisó: reordena
Totales o campos derivadosNo los calcules: withScripts: true y los pone el servidor
Editar o borrar una línea concretaEnvíala en DataListRows con su id (eliminado a 1 para borrarla); el resto de líneas no se toca
Campo rechazado o ignoradoMira su política REST en el comentario del SDK
¿Qué sección uso para este dato?Catálogo de secciones del núcleo

Ejemplos completos de escritura: WriteOperations por lotes, agregar un cliente y agregar un recambio.

On this page