The OneStream Community is temporarily frozen until June 29th due to the ongoing maintenance. Please read the blog post here to learn more.
Forum Discussion
Davy
3 years agoContributor
How to lock downstream steps in a workflow, unless the first step in workflow is complete?
Happy Holidays/ Black Friday, Is there a way to lock downstream steps in a workflow, unless the first step in workflow is completed? As we all know, a workflow shows all the steps. For example, our...
- 3 years ago
There are various strategies to address this, depending on the actual profiles, but here is a generic one.
First, you ensure everything is locked except the prerequisite step. You can do that with the Batch functionality that you find at the top of the tree, just select what you need and click Execute Batch.
Then, create a Workflow Event Handler that will fire on completion of our prerequisite Profile, unlocking the target profile. This is an example, unlocking Forms only if Import has been completed:
Dim returnValue As Object = args.DefaultReturnValue args.UseReturnValueFromBusinessRule = True args.Cancel = False Select Case args.operationName Case Is = BREventOperationType.Workflow.UpdateWorkflowStatus ' work only after updates If args.isBeforeEvent = False Then ' Retrieve info from event. ' Check page "Event Firing Sequences" in design & ref guide to know what to cast to Dim wfWf As WorkflowInfo = DirectCast(args.Inputs(0), WorkflowInfo) Dim wfStep As StepClassificationTypes = DirectCast(args.Inputs(1), StepClassificationTypes) Dim wfStatus As WorkflowStatusTypes = DirectCast(args.inputs(2), WorkflowStatusTypes) Dim wfProfileInfo As WorkflowProfileInfo = BRApi.Workflow.Metadata.GetProfile(si, _ si.WorkflowClusterPk.ProfileKey) Dim wfParentInfo As WorkflowProfileInfo = BRApi.Workflow.Metadata.GetProfile(si, _ wfProfileInfo.ParentProfileKey) ' check if we're dealing with the prerequisite profile Dim prereqProfile = "MyBaseInputProfile.Import" If wfProfileInfo.Name.XFEqualsIgnoreCase(prereqProfile) Then ' if the full workflow is done... If wfWf.AllTasksCompleted Then ' define the target profile we want to unlock Dim scenarioName As String = brapi.Finance.members.GetMemberName(si, _ Dimtype.Scenario.Id, wfWf.WfUnitPk.ScenarioKey) Dim timeName As String = brapi.Finance.Time.GetNameFromId(si, wfwf.WfUnitPk.TimeKey) Dim wfTargetName As String = $"{wfParentInfo.Name}.Forms" Dim wfClusterPk As WorkflowUnitClusterPk = _ BRApi.Workflow.General.GetWorkflowUnitClusterPk(si, _ wfTargetName, _ scenarioName, _ timeName) ' boom BRApi.Workflow.Locking.UnlockWorkflowUnit(si, wfClusterPk) End If End If End If End Select
JackLacava
OneStream Employee
3 years agoThere are various strategies to address this, depending on the actual profiles, but here is a generic one.
First, you ensure everything is locked except the prerequisite step. You can do that with the Batch functionality that you find at the top of the tree, just select what you need and click Execute Batch.
Then, create a Workflow Event Handler that will fire on completion of our prerequisite Profile, unlocking the target profile. This is an example, unlocking Forms only if Import has been completed:
Dim returnValue As Object = args.DefaultReturnValue
args.UseReturnValueFromBusinessRule = True
args.Cancel = False
Select Case args.operationName
Case Is = BREventOperationType.Workflow.UpdateWorkflowStatus
' work only after updates
If args.isBeforeEvent = False Then
' Retrieve info from event.
' Check page "Event Firing Sequences" in design & ref guide to know what to cast to
Dim wfWf As WorkflowInfo = DirectCast(args.Inputs(0), WorkflowInfo)
Dim wfStep As StepClassificationTypes = DirectCast(args.Inputs(1), StepClassificationTypes)
Dim wfStatus As WorkflowStatusTypes = DirectCast(args.inputs(2), WorkflowStatusTypes)
Dim wfProfileInfo As WorkflowProfileInfo = BRApi.Workflow.Metadata.GetProfile(si, _
si.WorkflowClusterPk.ProfileKey)
Dim wfParentInfo As WorkflowProfileInfo = BRApi.Workflow.Metadata.GetProfile(si, _
wfProfileInfo.ParentProfileKey)
' check if we're dealing with the prerequisite profile
Dim prereqProfile = "MyBaseInputProfile.Import"
If wfProfileInfo.Name.XFEqualsIgnoreCase(prereqProfile) Then
' if the full workflow is done...
If wfWf.AllTasksCompleted Then
' define the target profile we want to unlock
Dim scenarioName As String = brapi.Finance.members.GetMemberName(si, _
Dimtype.Scenario.Id, wfWf.WfUnitPk.ScenarioKey)
Dim timeName As String = brapi.Finance.Time.GetNameFromId(si, wfwf.WfUnitPk.TimeKey)
Dim wfTargetName As String = $"{wfParentInfo.Name}.Forms"
Dim wfClusterPk As WorkflowUnitClusterPk = _
BRApi.Workflow.General.GetWorkflowUnitClusterPk(si, _
wfTargetName, _
scenarioName, _
timeName)
' boom
BRApi.Workflow.Locking.UnlockWorkflowUnit(si, wfClusterPk)
End If
End If
End If
End Select
Related Content
- 2 years ago
- 1 year ago