A client recently had some hardware issues causing problems with the submission of purchases requisitions into a Workflow approval process. The hardware issues were causing some speed issues which resulted in the workflow timing out and the approval status becoming corrupt.
Instead of the PR being approved and going to a status of Final Approved, it was going to Approved, even though there was only one level of approval required by the workflow.
When the hardware issues were resolved, the error stopped occurring, but a number of corrupt PRs were remaining.
The way to correct the data is to reset the workflow status. I produced a small script which does this by resetting the Workflow_Status on the Purchasing Requisition Work (POP10200) table and removing the entries from the following tables:
- Workflow Step Instance Table (WFI10003)
- Workflow Tasks Table (WFI10004)
- Workflow Instance Master (WFI10002)
The list of PRs to be reset are entered in the highlighted part of the script:
/*
Created by Ian Grieve of azurecurve|Ramblings of a Dynamics GP Consultant (https://www.azurecurve.co.uk)
This code is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0 Int).
*/
CREATE TABLE #POPRequisitions(
POPRequisitionNumber VARCHAR(21)
)
GO
INSERT INTO
#POPRequisitions
VALUES
('REQ00000000000017')
GO
UPDATE POP10200 SET Workflow_Status = 1 WHERE POPRequisitionNumber IN (SELECT POPRequisitionNumber FROM #POPRequisitions)
DELETE FROM WFI10003 WHERE WorkflowInstanceID IN
(SELECT WorkflowInstanceID FROM WFI10002 WHERE Workflow_Type_Name='Purchase Requisition Approval' AND WfBusObjKey IN (SELECT POPRequisitionNumber FROM #POPRequisitions))
DELETE FROM WFI10004 WHERE WorkflowInstanceID IN
(SELECT WorkflowInstanceID FROM WFI10002 WHERE Workflow_Type_Name='Purchase Requisition Approval' AND WfBusObjKey IN (SELECT POPRequisitionNumber FROM #POPRequisitions))
DELETE FROM WFI10002 WHERE Workflow_Type_Name='Purchase Requisition Approval' AND WfBusObjKey IN
(SELECT POPRequisitionNumber FROM #POPRequisitions)
GO
DROP TABLE #POPRequisitions
GO
As always before running a script on live, make sure you have a good backup and test the script in a test company.