The issue is most likely the business rule trying to access the parent workflow to check the workflow status. If you have a security setting on the parent workflow that the end user does not have access the rule will not work in this scenario.
Here is a generic workspace helper:
Namespace OneStream.BusinessRule.DashboardExtender._WATSCO_Workspace_Helper
Public Class MainClass
Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardExtenderArgs) As XFSelectionChangedTaskResult
Try
Dim selectionChangedTaskResult As New XFSelectionChangedTaskResult()
'Define Workflow Profile
Dim wfProfile As String = BRApi.Workflow.Metadata.GetProfile(si, si.WorkflowClusterPk.ProfileKey).Name
Dim scenario As String = ScenarioDimHelper.GetNameFromID(si, si.WorkflowClusterPk.ScenarioKey)
Dim time As String = BRApi.Finance.Time.GetNameFromId(si, si.WorkflowClusterPk.TimeKey)
If args.FunctionName.XFEqualsIgnoreCase("WorkflowComplete") Then
'Used to complete a workspace
Dim wfClusterPK As WorkflowUnitClusterPk = BRApi.Workflow.General.GetWorkflowUnitClusterPk(si, _
wfProfile, scenario, time)
BRApi.Workflow.Status.SetWorkflowStatus(si, _
wfClusterPK, StepClassificationTypes.Workspace, WorkflowStatusTypes.Completed, _
"Workspace Completed", "", "User clicked complete workflow", Guid.Empty)
'Used to update the wfstatus automatically
selectionChangedTaskResult.WorkflowWasChangedByBusinessRule = True
selectionChangedTaskResult.IsOK = True
selectionChangedTaskResult.ShowMessageBox = True
Return selectionChangedTaskResult
Else If args.FunctionName.XFEqualsIgnoreCase("WorkflowRevert") Then
'Used to revert a workspace
BRApi.Workflow.Status.SetWorkflowStatus(si, _
si.WorkflowClusterPk, StepClassificationTypes.Workspace, WorkflowStatusTypes.InProcess, _
"Workspace Reverted", "", "User clicked Revert workflow", Guid.Empty)
selectionChangedTaskResult.WorkflowWasChangedByBusinessRule = True
selectionChangedTaskResult.IsOK = True
selectionChangedTaskResult.ShowMessageBox = True
Return selectionChangedTaskResult
End If
Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
End Class
End Namespace