How to automate lock and unlock workflow using Business rule

OS_Pizza
Contributor III

I am looking for a business rule or function to lock and unlock workflow and then set it as scheduled task.

7 REPLIES 7

LeeB
Contributor II

Try 

brapi.Workflow.Locking.LockWorkflowUnitDescendants etc.

LeeBown_0-1650985004475.png

If you use these in an Extender Rule you can then run via a Data Management Sequence.

Lee

 

 

 

Oscar
Contributor

Great find! However, the function asks for workflowChannelKey ... How can I generate that parameter for the suggested function:

BRApi.Workflow.Locking.LockWorkflowUnitDescendants(si, si.WorkflowClusterPk, WorkflowProfileTypes.AllProfiles, workflowChannelKey)

OS_Pizza
Contributor III

I have created the below BR and it works like a charm . Let me know if it doesn't work for you.

 

Public Function Main(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As ExtenderArgs) As Object
Try


Dim wfClusterPk As New WorkflowUnitClusterPk()

Dim Pname As String = "Your workflow name"
Dim Sname As String = "Scenerio name"
Dim Tname As String = "Timeperiod Eg- 2022M4"

wfClusterPk = BRAPi.Workflow.General.GetWorkflowUnitClusterPk(si,Pname,Sname,Tname)


'To Lock
Brapi.Workflow.Locking.LockWorkflowUnit(si,wfClusterPk)


'To unlock
'Brapi.Workflow.Locking.UnlockWorkflowUnit(si,wfClusterPk)


Return Nothing
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function

LeeB
Contributor II

Hi Oscar,

 

You could leave empty to lock all channels, or specify an individual Workflow Channel, see examples below.

 

Dim wfChannelId As Guid = guid.Empty
' Dim wfChannelId As Guid = WorkflowChannel.NoDataLock.UniqueID
' Dim wfChannelId As Guid = WorkflowChannel.AllChannelInput.UniqueID
' Dim wfChannelId As Guid = WorkflowChannel.Standard.UniqueID

 

 Then use:

 

BRapi.Workflow.Locking.LockWorkflowUnitDescendants(si, si.WorkflowClusterPk, WorkflowProfileTypes.AllProfiles, wfChannelId)

 

 

AHarding
New Contributor II

Hi Lee

Any ideas on how to get .LockWorkflowUnitDescendants with a non standard channel (i.e. added by the customer)? The logic seems to allow express use of 'NoDataLock', 'AllChannelInput' and 'Standard', but for custom WF Channels, can't seem to identify how to get the UniqueId info.

Br

Alex

 

@AHarding @lee Were you able to complete using non standard channel ? Same challenge here.

Dim wfChannelId As Guid = WorkflowChannel.<Custom channelname>

AHarding
New Contributor II

@OS_Pizza I gave up on this in the end, as found a simple, inbuilt, way the WF tool would do what I was after.
I did not realise that you could lock/unlock all WF Steps under some parent with specific WF Channel Key in one go, but it can be done easily (just in case you were unaware as I was, it is per the image below):

AHarding_0-1678445934684.png


Sorry to have no answer for your question!

Br

Alex