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.
Resumen operativo
| Situación | Qué 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 derivados | No los calcules: withScripts: true y los pone el servidor |
| Campo rechazado o ignorado | Mira 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.
Cliente Dinaup
El Cliente Dinaup conecta tus aplicaciones .NET con la plataforma Dinaup: conexión, sesiones, informes, archivos, anotaciones y WriteOperations.
Ejemplo: ejecución de WriteOperations por lotes (.NET)
Inserta o actualiza varios registros de una sección Dinaup en una sola llamada y reduce las operaciones contra la API.