Recently I had the need to change the status of an order back to "Created" programmatically. I found lots of blogs about how to go forward with the status, but going back was hard to find. Here's what I ended up doing. I wrote a class with 3 methods. A classdeclaration() with a prodid variable (used below), a parmProdId method and the following method:
boolean resetStatusToCreated
{
ProdMultiStatusDecrease prodMultiStatusDecrease;
ProdParmStatusDecrease prodParmStatusDecrease;
ProdTable prodTable;
Args args = new Args();
;
select prodTable where prodTable.ProdId == prodID;
args.record(prodTable);
prodParmStatusDecrease.clear();
prodParmStatusDecrease.initFromProdTable(prodTable);
prodParmStatusDecrease.WantedStatus = ProdStatus::Created;
prodParmStatusDecrease.ParmId = NumberSeq::newGetNum(CompanyInfo::numRefParmId()).num();
prodParmStatusDecrease.insert();
prodMultiStatusDecrease = prodMultiStatusDecrease::construct(args);
prodMultiStatusDecrease.initParmBuffer(prodParmStatusDecrease);
prodMultiStatusDecrease.parmId(prodParmStatusDecrease.ParmId);
prodMultiStatusDecrease.run();
select prodTable where prodTable.ProdId == prodId;
if(prodTable.ProdStatus == prodStatus::Created)
{
return true;
}
return false;
It seems to have worked. I just have to verify that everything was reversed properly. Testing the code is as easy as doing this:
ResetProdStatusClass = new ResetClass();
ResetProdStatusClass.parmProdId('WO000001');
ResetProdStatusClass.resetStatusToCreated();
I specifically needed to take it back to the Created status, but I imagine you could modify this to pass in the status you wanted it reset to and set it in the WantedStatus field.
Good luck!