Skip to content

Case Study: Heritage Fabrics

Company Profile

Heritage Fabrics is a mid-market textile company specializing in decorative and performance fabrics for the residential and commercial interiors market. They operate on Acumatica Cloud ERP (version 24.200) with multiple customization projects managing purchase order workflows, customer-specific business rules, and ERP-to-CRM integration points.

The Challenge

Heritage Fabrics had outgrown manual customization deployment. Their Acumatica instance required 6 custom DAC extensions (C# graph extensions for purchase orders, customers, and sales orders), SQL column creation scripts, and co-publish coordination with third-party connector packages.

Before AcuOps: - Customization packages were manually exported from the Acumatica UI - Uploads required navigating the SM204505 Source Control screen - Publishing involved monitoring a progress bar and hoping nothing conflicted - No pre-deploy backup meant a failed publish could leave the system in an inconsistent state - No version history beyond what Acumatica tracked internally - Deploying a change took 15-20 minutes of manual steps and attention

Key risks: - A bad publish could break production ERP for the entire company - No rollback capability beyond restoring from Acumatica's internal backup - Co-publish conflicts with third-party packages (Shopify connector, VAR customizations) were discovered only at publish time - No audit trail of who deployed what, when

The Solution

AcuOps was deployed as the CI/CD pipeline for Heritage Fabrics' Acumatica customization project (HeritageFabricsPOv5). The pipeline runs entirely on GitHub Actions with zero additional infrastructure.

Pipeline flow: 1. Developer exports customization project from Acumatica Source Control 2. Code is committed to GitHub (studio-b-ai/acumatica-ci-cd) 3. Push to main triggers the AcuOps deploy workflow 4. AcuOps validates project.xml, creates a pre-deploy backup, imports the package, and publishes with co-publish conflict checking 5. Deploy Intelligence records the outcome for future predictions

Technical details: - 6 C# DAC extensions managed (POOrderExt, POLineExt, POOrderEntry_Extension, CustomerExt, ARInvoiceEntry_PayLink_Extension, SOOrderExt) - SQL column creation via <Sql> elements (6 ALTER TABLE statements with IF NOT EXISTS guards) - Co-publish with HeritageFabricsPOv5 to catch conflicts with other active projects - Pre-deploy backup downloads the current published package before every deployment

Results

Metric Before AcuOps After AcuOps
Deploy time 15-20 min (manual) < 4 min (automated)
Failed deploys Occasional, no tracking 0 since adoption
Rollback capability Manual, uncertain One-command restore
Deploy audit trail None Full GitHub Actions history
Co-publish conflict detection At publish time (surprise) At validation time (preventive)
Version control Acumatica internal only Full Git history with diffs

Key outcomes: - Zero failed deployments since AcuOps adoption - 75% reduction in deploy time (20 minutes manual to under 4 minutes automated) - Complete audit trail of every deployment via GitHub Actions - Confidence to deploy more frequently knowing backup and rollback are automatic - DAC field deployment automated including SQL column creation (previously required manual database scripts)

Architecture

Developer Workstation
    |
    v
GitHub Repository (acumatica-ci-cd)
    |
    v (push to main)
GitHub Actions (AcuOps Deploy Workflow)
    |
    ├── Validate project.xml (14 checks)
    ├── Download pre-deploy backup
    ├── Package customization .zip
    ├── Import via Customization API
    ├── Publish with co-publish projects
    └── Record outcome (Deploy Intelligence)
    |
    v
Acumatica Cloud ERP (heritagefabrics.acumatica.com)

Customization Project Structure

Customization/_project/
├── project.xml          # Project manifest with 6 Graph elements + SQL
└── Code/
    ├── POOrderExt.cs              # PO arrival date fields
    ├── POLineExt.cs               # PO line arrival dates
    ├── POOrderEntryExtension.cs   # Date cascade logic
    ├── CustomerExt.cs             # Disable PayLink per customer
    ├── ARInvoiceExtension.cs      # PayLink business rule
    └── SOOrderExt.cs              # HubSpot Deal ID field

About Studio B

Studio B is an AI-powered managed IT and DevOps consulting agency specializing in Acumatica ERP automation. AcuOps is Studio B's productized CI/CD pipeline, available as open-source (BSL 1.1) or as a fully managed service.

Contact: kevin@studiob.ai