Skip to main content
Question

Custom data provider for ISO 20022 pain.001 export in 2026 R1: which base class and export method?

  • Oct 30, 2026 12:58 PM UTC
  • 2 replies
  • 14 views
  • Translate All

Sagar Greytrix
Captain II
Forum|alt.badge.img+3

Hi everyone,

We need to export AP payments from Acumatica 2026 R1 (build 26.100.0175) as ISO 20022 pain.001.001.09 XML for US ACH (CCD/CTX) payments to J.P. Morgan.

What we found so far

  • The standard XML Provider (PX.DataSync.XMLSYProvider) rejects a valid pain.001 file with “This file cannot be read because the system cannot determine the appropriate XML format.”
  • The XML Provider only accepts a flat <Root><Columns><Rows> layout, and pain.001 is nested (header, payment batch, payments, invoice remittance). So we plan to write a custom provider: flat schema in, pain.001 out on export.
  • We already have a tested class that builds and validates the pain.001 XML. We only need the provider wiring.
  • In PX.DataSync.dll, XMLSYProvider, PXSYBaseProvider and PXSYBaseEncodedFileProvider are type-forwarded to another assembly.

Questions

  1. Which base class works best for a custom export-only file provider in 2026 R1?
  2. What are the method signatures for exposing schema objects/fields and for export in this version?
  3. How should the provider write the output file so it attaches like the built-in providers’ output?
  4. Is the export method called once per schema object? Is there a hook after all rows are passed, so we can write totals once?
  5. Has anyone built a pain.001 or other ISO 20022 export provider and can share a sample or a GitHub link?

Any sample code for a custom file provider would help a lot. Thanks!

2 replies

Forum|alt.badge.img+8
  • Jr Varsity III
  • Oct 30, 2026 1:43 PM UTC

Hi ​@Sagar Greytrix ,

Below are answers to your questions-

  1. Base class: PXSYBaseEncodedFileProvider, the same base the built-in CSV, Excel and XML providers use. It gives you the File Name and Encoding parameters and handles the file link. Check PX.DataSync.dll in ILSpy and look at the [TypeForwardedTo] attributes to find which assembly the base classes are in now, then reference that assembly.
  2. Methods to override: check these against your decompiled base class.
    • ProviderName and DefaultFileExtension
    • FillParameters() for extra settings (for example, Initiating Party ID)
    • FillSchemaObjects() returning a single flat object, such as “Payments”
    • FillSchemaFields(string objectName) returning the flat fields
    • Import(...) throwing an exception, since the provider is export-only
    • Export(string objectName, PXSYTable table, bool breakOnError, Action<SyProcessResult> callback) to build the pain.001 XML from the rows
  3. Output file: reuse the save helper that XMLSYProvider.Export uses, so the file gets the same versioning and attachments as the built-in providers. Otherwise, save it as a new file version with UploadFileMaintenance.SaveFile(..., FileExistsAction.CreateVersion). If the export scenario is set on the payment method (CA204000), the file is attached to the Batch Payment (AP305000).
  4. Export calls and totals: we believe Export is called once per schema object with all rows, but we haven’t found a documented “after all rows” hook. We use one flat object (one row per invoice line, with payment and header fields repeated) and calculate NbOfTxs and CtrlSum inside Export. We’re also logging the call count to make sure it isn’t called in chunks.

Hope above helps!!

Translate

Forum|alt.badge.img+8
  • Captain II
  • Oct 30, 2026 2:16 PM UTC

I have a project that I’ve shared a couple of times for building a Wells Fargo format. It should give you a good head start on creating your customization. DM me your email address and I’ll send it to you.

Translate