Skip to main content
Solved

ProductionOrderDetail OperationDescription After 25R2 Update

  • November 17, 2025
  • 2 replies
  • 34 views

Forum|alt.badge.img

I have a program that PUTs Production Orders via REST API. It worked until our recent upgrade from 24R2 to 25R2. I was using endpoint version 23.200.001 but it happens with 25.100.001 also.

I PUT to ~entity/MANUFACTURING/25.100.001/ProductionOrderDetail?$expand=Operations&$select=Operations/OperationDescription:

{
"OrderType": {
"value": "RG"
},
"ProductionNbr": {
"value": "TESTORD"
},
"Operations": [
{
"ControlPoint": {
"value": true
},
"OperationNbr": {
"value": "010"
},
"WorkCenter": {
"value": "SAW"
},
"rowNumber": {
"value": 1
},
"OperationDescription": {
"value": "Cut 12\""
}
}
]
}

And it responds 200:

{
"id": "ca50efb0-01c4-f011-843a-06b1b982e321",
"rowNumber": 1,

"Operations": [
{
"id": "0846d663-06c4-f011-843a-06b1b982e321",
"rowNumber": 1,
"note": {
"value": ""
},
"ControlPoint": {
"value": true
},
"Material": [],
"OperationDescription": {
"value": "Saw Cutting"
},
"OperationNbr": {
"value": "010"
},
"OutsideProcess": {
"value": false
},
"QueueTime": {
"value": 960
},
"RunTime": {
"value": 60
},
"RunUnits": {
"value": 0.000000
},
"SetupTime": {
"value": 0
},
"WorkCenter": {
"value": "SAW"
},
"custom": {},
"_links": {
"files:put": "/entity/MANUFACTURING/25.100.001/files/PX.Objects.AM.ProdDetail/ProdOperRecords/0846d663-06c4-f011-843a-06b1b982e321/{filename}"
}
},

],
"OrderType": {
"value": "RG"
},
"ProductionNbr": {
"value": "189995-001"
},

"custom": {},
"_links": {
"self": "/entity/MANUFACTURING/25.100.001/ProductionOrderDetail/ca50efb0-01c4-f011-843a-06b1b982e321",
"files:put": "/entity/MANUFACTURING/25.100.001/files/PX.Objects.AM.ProdDetail/ProdItemRecords/ca50efb0-01c4-f011-843a-06b1b982e321/{filename}"
}
}

I’ve tried moving the JSON around, tried when adding new lines and editing existing, with and without the id populated. I cannot replicate this problem via UI, it only occurs in the API.

Any idea how I can repair this? Is this a known issue?

Thanks for reading.

Best answer by PBSA

I reported this to Acumatica and they were able to replicate. They did not provide a hotfix but did give some guidance that I used to create an override of the EnableRecords method on the ProdDetail graph:

	namespace PX.Objects.AM
{

[PXProtectedAccess]
public abstract class ProdDetail_APIHotfixProtected : PXGraphExtension<ProdDetail_APIHotfix, ProdDetail>
{
[PXProtectedAccess(typeof(ProdDetail))]
protected abstract void EnableRecords(AMProdItem amProdItem);
}

public class ProdDetail_APIHotfix : PXGraphExtension<ProdDetail>
{

//protected method that is being overridden
public delegate void EnableRecordsDelegate(AMProdItem amProdItem);

[PXOverride]
public virtual void EnableRecords(AMProdItem amProdItem, EnableRecordsDelegate del)
{

// ...

if (!enabled)
{
if(Base.IsContractBasedAPI)
Base.ProdOperRecords.Cache.AdjustUI().ForAllFields(e => { e.Enabled = false; });
else
Base.ProdOperRecords.Cache.AllowUpdate = enabled;

}else if(!Base.IsContractBasedAPI)
{
Base.ProdOperRecords.Cache.AllowUpdate = true;
}else{
// hotfix suggested by Acumatica support on ticket "Previously working API requests not working under 25R2"
Base.ProdOperRecords.Cache.AdjustUI().ForAllFields(e => { e.Enabled = true; });
}

// ...
}

}
}

 

2 replies

Forum|alt.badge.img
  • Author
  • Jr Varsity III
  • January 9, 2026

This is a larger problem than previously reported. It also affects other critical fields on AMProdOper including Run Units, Run Time, and Queue Time.

In a fresh Sales Demo for 25R2, I turned on the Manufacturing feature, then sent this PUT request via Postman:

PUT http://localhost/25R2SalesDemo/entity/MANUFACTURING/25.100.001/ProductionOrderDetail?$filter=ProductionNbr eq 'AM000037'&$expand=Operations

{
"OrderType": {
"value": "RO"
},
"ProductionNbr": {
"value": "AM000037"
},
"Operations": [
{
"OperationDescription": {
"value": "TEST DESCRIPTION"
},
"OperationNbr": {
"value": "0011"
},
"RunUnits": {
"value": 1
},
"RunTime": {
"value": 120
},
"WorkCenter": {
"value": "WC80"
},
"QueueTime": {
"value": 240
}
}
]
}

The response is 200:

{
"id": "43c377fc-ab8a-ec11-817b-9b18f6aae9b8",
"rowNumber": 1,
"note": {
"value": ""
},
"Branch": {
"value": "SERVEAST"
},
"EndDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"Hold": {
"value": true
},
"InventoryID": {
"value": "AMTOOLOSP"
},
"Operations": [
...
{
"id": "0f468ebe-a7ed-f011-8297-7015fbf2f2ff",
"rowNumber": 2,
"note": {
"value": ""
},
"ActualEndDate": {},
"ActualStartDate": {},
"AtVendorQuantity": {
"value": 0.0
},
"AutoReportQty": {
"value": true
},
"BackflushLabor": {
"value": false
},
"ControlPoint": {
"value": false
},
"DropShippedtoVendor": {
"value": false
},
"EndDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"FinishTime": {
"value": 0
},
"MachineTime": {
"value": 60
},
"MachineUnits": {
"value": 0.000000
},
"MoveTime": {
"value": 0
},
"OperationDescription": {
"value": "Painting"
},
"OperationNbr": {
"value": "0011"
},
"OperationStatus": {
"value": "Released"
},
"OutsideProcess": {
"value": false
},
"PhantomBomID": {},
"PhantomBOMLineID": {},
"PhantomBOMOperNbr": {},
"PhantomBOMRevision": {},
"PhantomLevel": {},
"PhantomMatlBOMID": {},
"PhantomMatlLineID": {},
"PhantomMatlOperNbr": {},
"PhantomMatlRevision": {},
"PhantomPriorLevelQty": {
"value": 0.000000
},
"PlanEndDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"PlanStartDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"POLineNbr": {},
"POOrderNbr": {},
"QtyComplete": {
"value": 0.000000
},
"QtyRemaining": {
"value": 1.00
},
"QtyScrapped": {
"value": 0.000000
},
"QtytoProduce": {
"value": 0.000000
},
"QueueTime": {
"value": 0
},
"RunTime": {
"value": 60
},
"RunUnits": {
"value": 0.000000
},
"ScrapAction": {
"value": "No Action"
},
"SetupTime": {
"value": 0
},
"ShippedQuantity": {
"value": 0.000000
},
"ShipRemainingQty": {
"value": 0.0
},
"StartDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"TotalQty": {
"value": 1.000000
},
"Vendor": {},
"VendorLocation": {},
"WorkCenter": {
"value": "WC80"
},
"custom": {},
"_links": {
"files:put": "/25R2SalesDemo/entity/MANUFACTURING/25.100.001/files/PX.Objects.AM.ProdDetail/ProdOperRecords/0f468ebe-a7ed-f011-8297-7015fbf2f2ff/{filename}"
}
},
...
],
"OrderDate": {
"value": "2023-09-01T00:00:00-07:00"
},
"OrderType": {
"value": "RO"
},
"ProductionNbr": {
"value": "AM000037"
},
"SchedulingMethod": {
"value": "Finish On"
},
"StartDate": {
"value": "2025-06-13T00:00:00-07:00"
},
"Status": {
"value": "On Hold"
},
"Warehouse": {
"value": "VA-WHOLESL"
},
"custom": {},
"_links": {
"self": "/25R2SalesDemo/entity/MANUFACTURING/25.100.001/ProductionOrderDetail/43c377fc-ab8a-ec11-817b-9b18f6aae9b8",
"files:put": "/25R2SalesDemo/entity/MANUFACTURING/25.100.001/files/PX.Objects.AM.ProdDetail/ProdItemRecords/43c377fc-ab8a-ec11-817b-9b18f6aae9b8/{filename}"
}
}

On the production, here is the operation list before:

And after:

You can see it ignored the 120 minute run time I sent, as well as the 1 run units. 


Forum|alt.badge.img
  • Author
  • Jr Varsity III
  • Answer
  • January 21, 2026

I reported this to Acumatica and they were able to replicate. They did not provide a hotfix but did give some guidance that I used to create an override of the EnableRecords method on the ProdDetail graph:

	namespace PX.Objects.AM
{

[PXProtectedAccess]
public abstract class ProdDetail_APIHotfixProtected : PXGraphExtension<ProdDetail_APIHotfix, ProdDetail>
{
[PXProtectedAccess(typeof(ProdDetail))]
protected abstract void EnableRecords(AMProdItem amProdItem);
}

public class ProdDetail_APIHotfix : PXGraphExtension<ProdDetail>
{

//protected method that is being overridden
public delegate void EnableRecordsDelegate(AMProdItem amProdItem);

[PXOverride]
public virtual void EnableRecords(AMProdItem amProdItem, EnableRecordsDelegate del)
{

// ...

if (!enabled)
{
if(Base.IsContractBasedAPI)
Base.ProdOperRecords.Cache.AdjustUI().ForAllFields(e => { e.Enabled = false; });
else
Base.ProdOperRecords.Cache.AllowUpdate = enabled;

}else if(!Base.IsContractBasedAPI)
{
Base.ProdOperRecords.Cache.AllowUpdate = true;
}else{
// hotfix suggested by Acumatica support on ticket "Previously working API requests not working under 25R2"
Base.ProdOperRecords.Cache.AdjustUI().ForAllFields(e => { e.Enabled = true; });
}

// ...
}

}
}