- Inicio
- Apps
- SaaS Tools
- Forms • Components Synchronizer
Vista previa ilustrativaA build-to-order Odoo module that parses your form.io schema and materializes each form and component as a
queryable database record. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0/18.0/19.0.
¿Qué es Forms • Components Synchronizer?
A build-to-order Odoo module that parses your form.io schema and materializes each form and component as a queryable database record. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0/18.0/19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Características clave
Hecho a medida, listo para ti
Sin configuración por tu cuenta: una app funcional creada, instalada y con soporte de ECOSIRE.
- 1
Haces el pedido
Empieza con un precio único de desarrollo. Definimos el alcance contigo en el arranque.
- 2
Creamos e instalamos
ECOSIRE la crea, la configura y la instala en tu Odoo.
- 3
En marcha + soporte
Sales en vivo en aproximadamente una semana laboral, con dos semanas de soporte tras la puesta en marcha. Los defectos en el código que entregamos se corrigen sin coste.
Especificaciones técnicas
- Compatibilidad con Odoo
- Odoo 17, Odoo 18, Odoo 19
- Ediciones
- Enterprise y Community
- Licencia
- La licencia requiere confirmación
- Requisito de Python
- Python 3.10+
- Base de datos
- PostgreSQL 12+
Sobre este producto
Most teams that embed a form.io builder alongside Odoo hit the same wall: the form definition lives as one opaque JSON blob, either in a char/text field or in an external form.io project. That is fine for rendering, but useless the moment you need to report on it. You cannot ask "which forms contain a required IBAN field", enforce a record rule per component, drive an automated action off a specific input, or version a single question — because to Odoo the whole schema is one unreadable string. Odoo native gives you no ORM surface over the form's internal structure, so every analytics, governance, or integration request turns into brittle JSON parsing in a server action.
Forms • Components Synchronizer closes that gap by treating the form.io schema as data you own. We build a pair of models — a parent forms.form and a child forms.component (technical names finalized in scoping) — with a synchronizer that walks the schema tree (nested containers, panels, columns, edit-grids, data-grids) and upserts one record per component. Each component row carries its key, type, label, path, validation flags (required, unique, regex), conditional-display logic, and a stable external key so re-syncs are idempotent rather than duplicating. The sync runs on write of the source form (via @api.depends-style triggers or an ir.actions.server hook), on demand from a button, and optionally on a scheduled ir.cron. Because everything is real ORM, you immediately get search/read_group over components, ir.model.access.csv + record rules for who may see which forms, list/form/pivot views over the component catalog, QWeb reports, and full read access over the XML-RPC/JSON-RPC API for downstream systems.
Technically, the connector is defensive by design. Schema traversal is recursive and type-aware, so container-type components are expanded and their children linked back to the parent path — no flattening that loses hierarchy. Re-synchronization diffs against existing rows keyed by (form, component_key): unchanged rows are skipped, changed rows are updated, and removed components are archived (not hard-deleted) so historical records and their references survive. We wrap parsing in guarded error handling that logs malformed nodes to ir.logging instead of aborting the whole sync, and we keep the write path in a single transaction so a partial failure rolls back cleanly. Where you already store form.io JSON on an existing model, we point the synchronizer at that field; where you pull from a form.io API, we add a thin, credential-safe client. The module ships Community-compatible (no Enterprise-only dependencies) unless your scope specifically requires Enterprise widgets, in which case we flag that up front.
Because this is build-to-order, nothing is a shrink-wrapped download. After a short scoping call we confirm your form.io source of truth, the component attributes you actually need as columns, the security model, and any downstream sync targets — then we build against your Odoo version, deliver on staging for UAT, and cut over to production with a rollback plan. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company setups, syncing from a live form.io API rather than a stored JSON field, deeper conditional-logic modeling, and historical schema data migration increase the quoted scope. You receive a fixed quote after the scoping call, never a surprise invoice.
lo que obtienes
- Installable, version-clean source code for your Odoo version (17.0 / 18.0 / 19.0) with a proper `__manifest__.py` and pinned dependencies
- Installation and configuration on your environment, including source-field binding and sync-trigger setup
- Technical documentation: model/field reference, security matrix, sync logic and re-sync behavior
- End-user guide plus one live training session covering manual sync, the component catalog, and reports
- UAT on a staging instance with a signed-off test plan and a documented rollback procedure
- Post-go-live support window for defect fixes and configuration adjustments
- Private Git repository handover with full commit history and tagged release
- Data migration/backfill of existing stored form.io schemas into synchronized records (when in scope)
¿Para quién es esto?
Odoo-running operations team
A team already collecting data through embedded form.io forms that needs those form structures visible inside Odoo for reporting, access control and workflow — not locked away as JSON.
ERP integration lead
Owns the Odoo–form.io boundary and needs a reliable, idempotent sync that exposes each component over XML-RPC/JSON-RPC so downstream BI and middleware can consume field-level data.
Compliance / data-governance manager
Must enforce who can see which forms and prove which fields are required or validated; needs record rules and audit-ready pivot views over the component catalog, not a manual JSON review.
Internal Odoo developer
Wants a clean, documented model layer to build on instead of parsing schema blobs in ad-hoc server actions, with a Git handover so the team can maintain and extend it.
Cómo se compara Forms • Components Synchronizer
| Criterio | ECOSIRE | Construcción personalizada | Competidor | Nativo de Odoo |
|---|---|---|---|---|
| Component-level data model | One ORM record per component, fully queryable | Possible, but you design and build the schema yourself | Usually stores the whole form as one JSON blob | No structural model — schema is an opaque string |
| Re-sync behavior | Idempotent upsert; archives removed components | Depends entirely on your implementation quality | Often re-imports and risks duplicates | Not applicable — no sync concept |
| Security granularity | `ir.model.access.csv` + record rules per form/component | You must implement and test all rules | Typically coarse, form-level at best | Only whatever guards the field holding the blob |
| Reporting & analytics | Pivot/`read_group` + QWeb over components | Requires custom views and report builds | Limited; JSON is hard to aggregate | None over form internals |
| API exposure | Full XML-RPC/JSON-RPC on every component | Available if you model it as records first | Exposes the blob, not the fields | Exposes the raw string field only |
| Odoo version fit | Built for your 17.0 / 18.0 / 19.0, Community-safe | Whatever you target and maintain | Fixed to the vendor's supported versions | N/A |
| Fit to your form.io source | Bound to your stored field or API in scope | Fully bespoke but slower and costlier | Generic; may not match your setup | No form.io awareness |
| Ownership & handover | Git repo, docs, training, support window | You own it but carry all the build risk | Vendor-owned; limited source access | Nothing to hand over |
Preguntas frecuentes sobre Forms • Components Synchronizer
Is this an existing app I can download and install right now?
No. This is a build-to-order module. ECOSIRE scopes, builds, installs and supports it against your specific form.io source and your Odoo version. There is no instant download — you receive tested, installable source code delivered for your environment.
How long does delivery take?
Typical delivery is one working week from confirmed scope. The clock starts once we have agreed your form.io source of truth, the component attributes to capture, the security model, and any downstream sync targets on the scoping call. Larger scope (multi-company, API sync, data migration) can extend that, and we tell you the timeline in your fixed quote.
How does pricing and scoping work?
Pricing starts from $999 as an indicative single-company base figure. After a short scoping call we send a fixed, written quote — no open-ended billing. Drivers that raise the quote include multi-company deployment, syncing from a live form.io API instead of a stored JSON field, deeper conditional-logic modeling, and migrating historical schema data.
What about support and updates after go-live?
Every build includes a post-go-live support window for defect fixes and configuration adjustments. You also receive the Git repository, so your own developers can maintain it. Version upgrades (for example carrying the module to a newer Odoo release) or new capabilities are quoted as a separate, small engagement.
Will re-syncing duplicate my component records?
No. The synchronizer upserts on a stable `(form, component_key)` key: unchanged components are skipped, changed ones are updated in place, and components removed from the schema are archived rather than deleted, so history and inbound references survive. Re-running the sync is safe and idempotent.
Does it work on Odoo Community, or do I need Enterprise?
The base module is built to run on Odoo Community with no Enterprise-only dependencies, on Odoo 17.0, 18.0 or 19.0. If your scope specifically calls for an Enterprise-only widget or feature, we flag that during scoping so there are no surprises at install time.
Can downstream systems read the synchronized data?
Yes. Because every form and component is a native ORM record, they are fully available over Odoo's XML-RPC and JSON-RPC API, and through standard views, `read_group` pivots and QWeb reports — subject to the `ir.model.access.csv` rights and record rules we configure for your team.
Módulos relacionados

Flexible Chatter Position & Resize
A build-to-order Odoo module that lets every user resize, hide/show, and reposition the Chatter panel to their taste, with the layout remembered per user across sessions and devices.

Flutterwave Payment Gateway for Odoo
Pan-African cards, mobile money, USSD & bank transfer via Flutterwave, built into Odoo checkout with webhook reconciliation and refunds.

FreeSWITCH CTI Connector for Odoo
A build-to-order Odoo integration that links your FreeSWITCH PBX to Odoo CRM and Helpdesk for click-to-dial, inbound screen-pop, and automatic call logging. ECOSIRE scopes, builds, installs and supports it — this is not an off-the-shelf download.

Full Accounting Kit (Community)
Enterprise-grade accounting for Odoo Community: financial reports, asset depreciation, recurring entries, follow-ups & PDC — built to order.
Forms • Components Synchronizer
A build-to-order Odoo module that parses your form.io schema and materializes each form and component as a queryable database record. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0/18.0/19.0.
- Recursive, type-aware schema walker that expands containers, panels, columns, edit-grids and data-grids while preserving parent/child component paths
- Parent `forms.form` and child `forms.component` ORM models with One2many/Many2one links, so every component is individually queryable
- Idempotent upsert keyed on `(form, component_key)` — re-syncs update changed rows, skip unchanged, and never duplicate
- Removed components are archived (active=False) rather than hard-deleted, preserving history and inbound references