If you’ve ever tried to add a Sales Order or Purchase Order reference column to the Inventory Activity Detail report in NetSuite, you’ve likely run into a frustrating wall. This is one of those scenarios where native reporting just doesn’t get you all the way there. In this blog, we’ll walk through a workaround method available for certain scenarios.
The Native Limitation: Why “Created From” Isn’t Available on Standard Reports
Standard reports in NS, unlike saved searches, may not support the addition of certain native fields as columns. Using the Inventory Activity Detail report as an example, the Created From field on Item Fulfillments and Item Receipts is a system field that references the originating Sales Order or Purchase Order. It’s available on the record itself and accessible in saved searches — but standard reports like the Inventory Activity Detail report do not expose it as a selectable column in the report builder.
The Recommended Approach: Use a Saved Search Instead
In most cases, the cleanest and most flexible solution is to replicate the Inventory Activity Detail report as a Saved Search. Saved searches in NetSuite have access to join fields and related record data that standard reports cannot reach — including the Created From field.
To replicate the report as a saved search:
- Navigate to Reports → Saved Searches → All Saved Searches → New
- Select Transaction as the search type
- Filter by Type = Item Fulfillment OR Item Receipt
- Add the Created From field as a result column — this will display the linked SO or PO
- Add any other columns from the Inventory Activity Detail report that you need (Item, Quantity, Location, Date, etc.)
This approach gives you full flexibility, real-time data, and no ongoing maintenance burden. If a saved search meets your needs, stop here — it is the recommended path.
The Standard Report Solution: Custom Field + Workflow + CSV Import
If you need the SO/PO reference to appear as a column on the standard Inventory Activity Detail report, the approach involves three components working together:
Step 1: Create the Custom Field
The first thing we need is a custom body field on the Item Fulfillment and Item Receipt records. This field will act as the storage vessel for the Created From value — because unlike the native Created From field, a custom field with Store Value enabled will be indexed by the report engine and available as a selectable column.
Why “Store Value” Matters
By default, custom fields in NetSuite can be configured with a Default Value or sourced dynamically — but these methods do not make the field available in standard reports unless Store Value is checked. Store Value tells NetSuite to physically write the field’s value to the database record, which is the only way the report builder can see and retrieve it.
| Important: Do not use the Default Value setting on this field. Even though it may seem convenient to use a Default Value or a sourced field to pull in the Created From value automatically, this approach will not work for our purposes. A sourced or defaulted value is resolved dynamically and is not physically stored on the record — meaning the standard report engine cannot retrieve it. Store Value must be checked, and the field must be populated explicitly (which is what the workflow in Step 2 handles). |
How to Create the Custom Field
Navigate to Customization → Lists, Records, & Fields → Transaction Body Fields → New and configure the field as follows:
| Field | Value |
| Label | SO/PO # for Reports (or similar descriptive name) |
| ID | _sopo_ref_for_reports (auto-generated, can customize) |
| Type | Free-Form Text |
| Store Value | ☑ Checked (critical — do not leave unchecked) |
| Applies To | Transaction (check Item Fulfillment and Item Receipt) |
Save the field. It will now appear as an available column option when customizing the Inventory Activity Detail report — though it will be blank for all records until we populate it via the workflow and CSV import in Steps 2 and 3.
Step 2: Create the Workflow
With the custom field in place, we need a workflow that will automatically populate it every time an Item Fulfillment or Item Receipt is created or updated. The workflow reads the Created From field on the current record and writes that value into our new custom field.
Workflow Summary Settings
Go to Customization → Workflow → Workflows → New and configure the top-level workflow settings as follows:
| Field | Value |
| Workflow Name | Ex. SO/PO # for Report Autopopulate |
| Record Type | Transaction (Item Fulfillment, Item Receipt) |
| Release Status | Released |
| Initiation | Event Based |
| Events | On Create, On View Or Update |
| Trigger Type | – All – |
| Inactive | No |
Workflow State Configuration
Inside the workflow, you will have a single state — State 1. Within that state, add one action with the following configuration:
Action: Basic Information
| Field | Value |
| State | State 1 |
| Type | Set Field Value |
| Trigger On | After Record Submit |
| Event Types | (leave blank — all events) |
Action: Parameters
Scroll down to the Parameters section of the action and configure the value source:
| Field | Value |
| Field | SO/PO # for Reports (your custom field from Step 1) |
| Value Type | From Field |
| Record (Join Field) | Current Record |
| Field | Created From |
This tells the workflow: “Take the value of the Created From field on the current record and write it into the SO/PO # for Reports custom field.” Save the action and save the workflow.
Step 3: Backfill Historical Records via CSV Import
The workflow you just created will automatically populate the SO/PO # for Reports field on all new Item Fulfillments and Item Receipts going forward. However, because the action triggers After Record Submit, all of your existing historical records will have a blank value in that field — since they were saved before the workflow existed.
To resolve this, you need to perform a mass CSV import update that effectively re-submits every existing Item Fulfillment and Item Receipt. This triggers the workflow on each record, causing it to read the Created From field and write the value into your custom field retroactively.
Part A: Export Your Existing Records
Start by getting a list of all Internal IDs for your Item Fulfillments and Item Receipts. You only need the Internal ID — no other fields are required in your import file.
Create a saved search for each record type:
- Go to Reports → Saved Searches → All Saved Searches → New → Transaction
- Filter: Type = Item Fulfillment (repeat separately for Item Receipt), You can also define a Date filter if you want to designate how far back you want the report to display the Created From column.
- Results column: Internal ID only
- Export to CSV
Part B: Prepare Your Import File
Your CSV file needs only one column:
| Internal ID |
| 1234 |
| 1235 |
| 1236 |
| … |
You do not need to include any other fields. The act of re-importing the Internal ID with the update flag is sufficient to re-trigger the record’s save event and fire the workflow.
Part C: Run the CSV Import
Navigate to Setup → Import/Export → Import CSV Records and configure the import as follows:
| Field | Value |
| Import Type | Transactions |
| Record Type | Item Fulfillment (run separately for Item Receipt) |
| Import Action | Update (not Add or Add or Update) |
| Run Server SuiteScript and Workflow | ☑ Checked ← this is critical |
| “Run Server SuiteScript and Workflow” must be checked. This checkbox is what causes your workflow to fire during the import. If it is left unchecked, the CSV import will silently update the records without triggering any workflows or scripts — meaning your custom field will remain blank even after the import completes. Always verify this setting before running the import. |
Map the Internal ID field in your CSV to the Internal ID field on the record. You do not need to map any other fields. Proceed through the import wizard and submit.
Once the import completes, NetSuite will have re-submitted each record, firing the workflow and writing the Created From value into the SO/PO # for Reports field for every historical Item Fulfillment and Item Receipt in your system.
Adding the Column to the Report
With the custom field created, the workflow active, and historical records backfilled, you are now ready to surface the SO/PO reference on the Inventory Activity Detail report.
- Navigate to Reports → Inventory → Inventory Activity Detail
- Click the Customize button
- In the report builder, head to the Edit Columns tab
- Search for or scroll to find your custom field — “SO/PO # for Reports”
- Add it as a column and position it where desired
- Save the customized report
The column will now appear on the report, and for every Item Fulfillment and Item Receipt that has been processed since the workflow was activated (or backfilled via the CSV import), the corresponding Sales Order or Purchase Order number will display as a clickable link.
The native limitation of the Inventory Activity Detail report is a common friction point for NetSuite users who need full traceability from inventory movement back to source orders. While a saved search is always the more flexible and lower-maintenance path, this custom field and workflow approach is a reliable solution when the standard report format is a firm requirement — and with the CSV import backfill, it works seamlessly across both new and historical records.

