Partner order desk
A distributor edits quantities, drops purchase orders and follows delivery on its own orders, from the partner site, with no Salesforce chrome in sight.
Overview
A distributor edits quantities, drops purchase orders and follows delivery on its own orders, from the partner site, with no Salesforce chrome in sight. The whole page is one AX - Data Table on an Experience Site, reading the partner's order records through a Query data source. This tutorial rebuilds the My orders page of Northwind Distribution, a furniture retailer with a partner login, in your own site.
What you build

Northwind Distribution logs into the partner site and lands on My orders: eight orders, one line each, and nothing from any other account.
Qty is edited in the cell. Every other column is read only.
The Purchase order column takes a PDF drop, and the file is stored on the order record.
A delivery ring fills as the order moves from Awaiting PO to Delivered, next to a Status badge colored by value.
Status and Product Line filters sit above the table, Export CSV and New order in the header, pagination at the bottom.
Before you start
The Avonni Components for Experience Sites package is installed and your partner users hold a license. See License Management.
An Experience Site (LWR or Aura) with a page for orders, and at least one partner or customer user whose contact belongs to the partner account. The examples below use the account Northwind Distribution.
A custom object for the orders. The table needs these fields:
Partner Order (Partner_Order__c)
Name
Text
The order number, ORD-2611
Account__c
Lookup (Account)
The partner account. It scopes the table to the logged-in user.
Product__c
Text
The product name
Product_Line__c
Picklist: Seating, Tables, Lighting, Storage
The second filter
Quantity__c
Number, 0 decimal places
The only cell the partner can edit
Unit_Price__c
Currency
Delivery__c
Number, 0 decimal places, from 0 to 100
Drives the progress ring
Status__c
Picklist: Awaiting PO, Preparing, In transit, Delivered
The badge text and the first filter
Status_Variant__c
Formula (Text)
Turns the status into a badge color, see step 1
Expected_Date__c
Date
The purchase order itself is a Salesforce File attached to the order record. It needs no field.
Sample data. Eight orders, all with Account set to Northwind Distribution:
ORD-2611
Oslo lounge chair
Seating
24
389
100
Delivered
Sep 1, 2026
ORD-2614
Nordic oak table
Tables
12
1,190
75
In transit
Sep 9, 2026
ORD-2617
Arc floor lamp
Lighting
48
145
40
Preparing
Sep 15, 2026
ORD-2618
Milo three-seat sofa
Seating
6
1,780
0
Awaiting PO
Sep 22, 2026
ORD-2620
Ladder bookshelf
Storage
30
260
60
In transit
Sep 12, 2026
ORD-2622
Birch bar stool
Seating
40
129
0
Awaiting PO
Sep 26, 2026
ORD-2623
Nordic oak table
Tables
8
1,190
20
Preparing
Sep 19, 2026
ORD-2625
Arc floor lamp
Lighting
20
145
0
Awaiting PO
Sep 29, 2026
In the figure, the five orders that are past Awaiting PO carry a purchase order named after them (PO-2611.pdf, PO-2614.pdf, and so on). Upload them through the table once it is built, as described in Try it: the File Upload column shows the files dropped into it, not files attached to the record beforehand.
Permissions. The partner profile or permission set needs Read and Edit on Partner Order, Edit field-level security on Quantity, Read on the other fields, and a sharing rule or sharing set that gives the partner account its own orders. Uploading a purchase order requires that the user can add files to the order record. The Avonni Query respects all of it: a partner only ever sees the records Salesforce lets them see.
Build it
Create the object, the badge formula and the records
In Setup, open Object Manager and create the Partner Order object with the fields listed above.
Add the Status Variant formula field (return type Text):
Load the eight sample orders, with Account set to the partner account.
Why: the badge column colors itself from a named variant (success, warning, error, inverse). A formula that returns the variant name per status lets every row pick its own color, with no styling rule to maintain in the builder.
Connect the query
In the Data Source section, select Query.
Choose the Partner Order object and add the fields you will display:
Name,Product__c,Product_Line__c,Quantity__c,Unit_Price__c,Delivery__c,Status__c,Status_Variant__c,Expected_Date__c.Add a filter: Account equals the logged-in user's account. On an LWR site use
{!User.Record.AccountId}; on an Aura site use{!CurrentUser.accountId}. See Expressions for LWR Sites and Expressions for Aura Sites.Sort by
Nameascending.
Why: the filter is what makes the page a partner desk rather than an order list. Sharing rules already hide other accounts' records; the filter makes that scope explicit and keeps the table correct for internal users who can see everything.

Add the columns
In Data Mappings, open Columns and add one column per field. For each one, set Type and, where the header should differ from the field label, turn on Custom Label and enter the label.
Order #
Name
Text
Sortable on
Product
Product__c
Text
Sortable on
Qty
Quantity__c
Number
Editable on, Sortable on
Unit price
Unit_Price__c
Currency
Sortable on
Delivery
Delivery__c
Progress Ring
Size Medium
Status
Status__c
Badge
see step 5
Expected
Expected_Date__c
Date
Sortable on
Leave Editable off on every column except Qty.
Why: inline editing is per column. With Qty as the only editable one, the partner changes quantities and nothing else, and the table saves the change to the record itself when they click Save.
Color the Status badge from the formula
Select the Status column.
Under Type Attributes, find Variant.
Turn on the Field Name toggle next to Variant and select
Status_Variant__c.
Why: a fixed variant colors every badge the same. Bound to the formula field, Delivered reads green, Preparing yellow, In transit dark and Awaiting PO red, straight from the data.
Add the Purchase order column
In Columns, add a column and set Column Type to Custom.
Enter Name
purchaseOrderand LabelPurchase order.Set Type to File Upload.
Under Type Attributes, set Accept to
.pdfand turn on Show File Uploaded.
Why: the File Upload type is available on Query data sources only. The cell uploads against the row's record, so a PDF dropped on ORD-2618 lands in the Files of ORD-2618, with no interaction to configure. Show File Uploaded lists the file name under the drop zone once it is in.
Set the filters and the search
In Data Mappings, under Filters, select
Status__candProduct_Line__c.Under Search Fields, select
NameandProduct__c.In the Properties Panel, open Filter Menu Attributes and set Type to Horizontal.
Why: Horizontal puts the two filters above the table, where a partner expects them. Each filter is labeled with the field's label, so Product_Line__c reads Product Line. The search box appears as soon as at least one search field is set.

Configure the header
Set Header Title to
My orders, Header Caption toNorthwind Distributionand Header Icon Name tostandard:orders.Open Header Actions and add two actions:
Label
Export CSV, NameexportCsv, Icon Nameutility:downloadLabel
New order, NamenewOrder, Icon Nameutility:add
Set Visible Header Actions Buttons to
2.
Why: with fewer visible buttons than actions, the extra actions collapse into a menu. Two visible buttons keep both gestures one click away.

Finish the table settings
Turn on Hide Checkbox Column: the partner edits cells, they do not select rows.
Turn on Hide Default Actions to keep the column headers to their label and sort arrow.
Open Pagination Attributes, turn on Show Pagination and set Number of Items per Page to
10.
Why: eight orders fit on one page today. Pagination is set now so the desk still works at eighty.


Wire the header actions, preview, publish
On the New order action, set On Click to Open Flow Dialog and pick the screen flow that creates a Partner Order.
On the Export CSV action, set Export To Fields in Data Mappings to the columns you want in the file, then configure On Click as shown in the Export To button tutorial.
Click Preview, log in as a partner user and check the table. Then Publish the site.
The settings that matter
Purchase order column Type (type)
File Upload, Accept .pdf
The partner drops the PDF in the row, and it is filed on that order's record. Query data sources only.
Delivery column Type (type)
Progress Ring
One glance per order. The ring reads a number from 0 to 100.
Status column Variant (typeAttributes.variant)
bound to Status_Variant__c
A color per status, driven by the record, with no styling rule in the builder.
Editable (editable)
on for Qty only
The partner changes quantities, nothing else. The table saves the edit to the record when they click Save.
Interactions
The partner edits Qty and clicks Save
Built in: the table updates the record
Nothing. Field-level security decides what can be saved.
Header action New order, On Click
The flow that creates a Partner Order for the partner account.
Header action Export CSV, On Click
Export, see the Export To button tutorial
Export To Fields in Data Mappings.
Purchase order column, On File Upload
Show Toast, optional
A message such as Purchase order received. The file is already linked to the order record when this fires.
Try it
Log in as a partner user. The table shows the eight Northwind orders and nothing from another account.
Double-click the Qty cell of ORD-2617, change
48to50and click Save. Open the record in Salesforce: Quantity is 50.Drop a PDF on the Purchase order cell of ORD-2618. Its name appears under the drop zone, and the file is listed in the Files of ORD-2618.
Filter Status on
In transit: two rows, ORD-2614 and ORD-2620. Searchlamp: two rows, ORD-2617 and ORD-2625.
Take it further
The same table exists on the other Avonni surfaces, with the same column types:
Data Table for Flow Screen Components, inside a screen flow.
Data Table for Dynamic Components, on a Lightning page.
Data Table for LWC Components, as the
avonni-dd-datatabletag in your own component.
Two variations worth trying:
Turn on Use Cascading Filter Values in Filter Menu Attributes, so that picking a status narrows the product lines offered.
Switch Filter Menu Attributes Type to Panel when the desk grows past three or four filters.
A related project in this space: External Orders Table puts an account's orders, stored outside Salesforce, and their line items on the Account record page with two Dynamic Components Data Tables.
Troubleshooting
Purchase orders attached to the records before the page was built do not show in the Purchase order column
The File Upload cell lists the files uploaded through it during the session. It does not read the files already attached to the record.
Treat the column as the drop zone it is. To show filed documents, add a row action that navigates to the order record, where the Files related list has them.
The table shows orders in Preview but nothing for the partner user
The partner profile lacks access to the object or the fields, or no sharing rule gives the account its orders. Avonni queries follow Salesforce sharing.
Check object permissions and field-level security on the partner profile, then the sharing set or sharing rule on Partner Order.
Editing Qty and clicking Save shows an error, or the value reverts
The partner user has no Edit access on the object or on the Quantity field.
Grant Edit on Partner Order and Edit field-level security on Quantity__c.
Every badge has the same color
Variant is set to a fixed value, or the formula returns a name that is not a badge variant.
Turn on Field Name on Variant, select Status_Variant__c, and make sure the formula returns success, inverse, warning, error or base.
No filter chips above the table
Filters are a Query feature, and none is selected, or the data source is Manual.
Use a Query data source and select the fields under Filters in Data Mappings.
File Upload is not offered as a column Type
The data source is Manual. File Upload, Combobox and Lookup are Query-only column types.
Switch the Data Source to Query.
Was this helpful?
