# How to Add a Custom Field to the Sales Order Screen in Acumatica

> Source: https://netray.co/erp-help/acumatica-add-custom-field-to-sales-order-screen
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: ERP Help

## Short answer

There are two routes. For simple data capture use Attributes (Configuration > Common Settings > Attributes), assigned to a class, which show up without code. For a real database column with logic, create a DAC extension (PXCacheExtension on SOOrder) in a Customization Project, add the field to the screen layout in the Screen Editor, and publish.

## Kind

how-to

## System

small-erp

## Erp

Acumatica Cloud ERP

## Module

Customization / DAC Extensions (Sales Orders SO301000)

## Query

how to add a custom field to sales order screen in Acumatica

## Alternate Queries

- Acumatica add user defined field to screen
- Acumatica DAC extension custom field
- Acumatica customization editor add field to grid
- Acumatica attribute vs user defined field

## Applies To

Acumatica Cloud ERP 2021 R2 and later, Sales Orders (SO301000), same pattern for other screens

## Steps

### How to add the field with a DAC extension

**Items:**

- Open Customization > Customization Projects (SM204505), create a new project, and open it in the Customization Project Editor.
- Go to Screens > Sales Orders (SO301000) > Layout Editor, or use Inspect Element (Ctrl+Alt+Click on the field area) to jump into the screen from the page.
- In the Data Access (DAC) area, add a new DAC extension for SOOrder and add a field such as UsrCustomerPONote with the right type (string, length) and a display name.
- Choose to add the field to the database so Acumatica creates the column on the SOOrder table and extension table during publish.
- In the Layout Editor, drag the new field into the Order Summary section, set the label, and save the layout.
- Publish the project, hard refresh the browser, and test with a new sales order to confirm the value saves and reloads.
- If the field must flow to another document, such as a shipment or invoice, add a matching extension and handler (FieldDefaulting or RowPersisting) in a graph extension.
- Export the project zip and commit it to source control so it can be promoted to test and production.

## Sections

### Attributes versus DAC extension

**Body:**

Attributes are the fastest route. Create the attribute in Attributes (CS205000), assign it to an Item Class or Customer Class, and the value appears in a tab on the document. There is no code, no publish, and the data is stored in the attribute tables, so it is awkward in reports and Generic Inquiries compared with a real column.

A DAC extension gives a proper column that can be used in Generic Inquiry, reports, imports and business events. Use it when the field drives logic, needs validation, or must be reported on at volume.

### What the code looks like

**Body:**

The Customization Project Editor generates the extension class for you. A DAC extension inherits PXCacheExtension of the base DAC and declares the field with its attributes, such as PXDBString for a database backed string and PXUIField for the label.

Keep the Usr prefix on custom fields. It avoids collisions with fields added by later Acumatica builds and is the convention the platform and partners follow.

**Code:**

public sealed class SOOrderExt : PXCacheExtension<SOOrder>
{
  public abstract class usrCustomerPONote : PX.Data.BQL.BqlString.Field<usrCustomerPONote> { }
  [PXDBString(100)]
  [PXUIField(DisplayName = "Customer PO Note")]
  public virtual string UsrCustomerPONote { get; set; }
}

### Making it usable everywhere

**Body:**

A field on the screen is only the start. To use it in imports, expose it through the Import Scenario or in the REST endpoint by extending the endpoint in Web Service Endpoints (SM207060). To use it in reporting, add it to a Generic Inquiry or to the Report Designer.

Plan for upgrades. Extensions survive upgrades in most cases, but always compile and test the project on the new build in a test tenant before publishing to production.

## Pitfalls

- Using Attributes for data that needs heavy reporting, then discovering Generic Inquiry joins are slow and awkward.
- Forgetting the Usr prefix and clashing with a future platform field.
- Adding the field to the layout but not to the database, which causes a runtime error on save.
- Not exposing the field in the web service endpoint, so integrations cannot see it.
- Skipping a test tenant publish before production.

## Ai Angle

An AI assistant grounded in your Acumatica build can read the existing SOOrder DAC and extensions to suggest a field type and name that does not collide with what you already have, then draft the extension class. A developer still reviews and compiles it in the Customization Project Editor. ERPray helps afterwards by answering questions over the new column in plain language.

## Faq

### Do I need a developer to add a field in Acumatica?

**Answer:** Not always. Attributes give you extra data fields through configuration only. A real database field with logic requires a Customization Project and usually someone comfortable with C#, though simple fields can be added entirely through the editor UI.

### Where do I see the field in Generic Inquiry?

**Answer:** After publishing, open Generic Inquiry (SM208000), add the SOOrder table, and the new column appears as a selectable field in the result grid, prefixed with the Usr name.

### Will the field survive an Acumatica upgrade?

**Answer:** Usually yes, since the extension sits outside the base code. Always test by compiling the project on the new build in a test tenant first, because changes to base classes can still break dependent logic.

### Can I add the field to the Sales Order grid lines?

**Answer:** Yes. Extend SOLine instead of SOOrder, add the field, and place it in the Details grid via the Layout Editor. The same publish and refresh steps apply.

## Search terms

acumatica add custom field, acumatica sales order custom field, acumatica dac extension, acumatica pxcacheextension, acumatica user defined field, acumatica customization project editor, acumatica attributes CS205000, acumatica SO301000 add field

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
