Thanks for pointing me in the right direction. I've re-used some of the code in the edit method for that "reservation quantity" field. I wrote a job to un-reserve all of my lines that fit my criteria and it seems to be working fine.
Here's my basic job if anyone wants to pick it apart (hi martin):
static void RemoveSalesLineReservations(Args _args)
{
SalesLine salesLine;
SalesTable salesTable;
WMSPickingRoute pickingRoute;
InventQty reservQty;
InventMovement movement;
ttsBegin;
while select forUpdate salesLine
where salesLine.reservation == ItemReservation::Automatic
join forupdate salesTable
where salesTable.salesid == salesLine.SalesId
&& SalesTable.salesstatus == SalesStatus::Backorder
//&& salesTable.salesid == 'SO-0040339'
notexists join pickingRoute
where pickingRoute.transType == InventTransType::Sales
&& pickingRoute.transRefId == salesTable.SalesId
&& (pickingRoute.expeditionStatus == WMSExpeditionStatus::Activated
|| pickingRoute.expeditionStatus == WMSExpeditionStatus::Complete)
{
salesTable.Reservation = ItemReservation::None;
if(salesTable.validateWrite())
{
salesTable.update();
}
salesLine.reservation = ItemReservation::None;
salesLine.PdsBatchAttribAutoRes = NoYes::No;
if(salesLine.validateWrite())
{
salesLine.update();
}
movement = InventMovement::construct(salesLine);
reservQty = (- movement.transIdSum().reserved()) ; //reverse reservation
if (reservQty)
{
InventUpd_Reservation::updateReserveBuffer(salesLine, reservQty);
// write down activate now on sales line (inventDeliverNow) if reservation is reduced
if (salesLine.InventDeliverNow > salesLine.reservedPhysical())
{
salesLine.InventDeliverNow = salesLine.reservedPhysical();
salesLine.update();
}
}
}
ttsCommit;
}