Workflow State Advanced Pre-Conditions - VBS - How to check that only one of two properties are empty?

I have Advanced Conditions (VBscript) for a precondition of a workflow state. I tried to find an example script as template but I couldn't find one for the Advanced Conditions check on a workflow state. 

The goal is to check if one of the properties which are value lists contains a value. If one of the properties contains a value then it is allowed to move into the state (precondition).

I now have created a draft but it doesn't work. Can someone please point me in the right direction. Thank you

Option Explicit

' Define the property IDs
Dim PropIdSitzung, PropIdZirkularbeschluss
PropIdSitzung = GetPropID("prop.Sitzung") ' prop.Sitzung is Value List
PropIdZirkularbeschluss = GetPropID("prop.Zirkularbeschluss") ' prop.Zirkularbeschluss is Value List

' Get property values
Dim SitzungValue, ZirkularbeschlussValue
SitzungValue = PropertyValues.SearchForProperty(PropIdSitzung).TypedValue
ZirkularbeschlussValue = PropertyValues.SearchForProperty(PropIdZirkularbeschluss).TypedValue

' Check if at least one of the properties is not empty
If Not SitzungValue.IsNULL Or Not ZirkularbeschlussValue.IsNULL Then
    AllowStateTransition = True
Else
    AllowStateTransition = False
    Err.Raise mfscriptcancel, "Both 'Sitzung' and 'Zirkularbeschluss' properties are empty. State transition is not allowed."
End If

' Function to get property ID by alias
Public Function GetPropID(alias)
    GetPropID = Vault.PropertyDefOperations.GetPropertyDefIDByAlias(alias)
End Function

  • I would use something like this

    Option Explicit
    
    ' Define the property IDs
    Dim PropIdSitzung, PropIdZirkularbeschluss
    PropIdSitzung = GetPropID("prop.Sitzung") ' prop.Sitzung is Value List
    PropIdZirkularbeschluss = GetPropID("prop.Zirkularbeschluss") ' prop.Zirkularbeschluss is Value List
    
    ' Get property values
    Dim SitzungValue, ZirkularbeschlussValue
    SitzungValue = PropertyValues.SearchForProperty(PropIdSitzung).TypedValue.DisplayValue
    ZirkularbeschlussValue = PropertyValues.SearchForProperty(PropIdZirkularbeschluss).TypedValue.DisplayValue
    
    ' Check if at least one of the properties is not empty
    If Len(SitzungValue) > 0 Or Len(ZirkularbeschlussValue) > 0 Then
        AllowStateTransition = True
    Else
        AllowStateTransition = False
        Err.Raise mfscriptcancel, "Both 'Sitzung' and 'Zirkularbeschluss' properties are empty. State transition is not allowed."
    End If

  • Thank you, that helped. However I also had to declare AllowStateTransition as a variable for it to work. Do you know why I can not use .IsNull for the IF statement and why it's better to use len()?

    The final script

    Option Explicit
    
    ' Define the property IDs
    Dim PropIdSitzung, PropIdZirkularbeschluss
    PropIdSitzung = GetPropID("prop.Sitzung") ' prop.Sitzung is Value List
    PropIdZirkularbeschluss = GetPropID("prop.Zirkularbeschluss") ' prop.Zirkularbeschluss is Value List
    
    ' Get property values
    Dim SitzungValue, ZirkularbeschlussValue
    SitzungValue = PropertyValues.SearchForProperty(PropIdSitzung).TypedValue.DisplayValue
    ZirkularbeschlussValue = PropertyValues.SearchForProperty(PropIdZirkularbeschluss).TypedValue.DisplayValue
    
    
    ' Check if at least one of the properties is not empty
    Dim AllowStateTransition
    If Len(SitzungValue) > 0 Or Len(ZirkularbeschlussValue) > 0 Then
        AllowStateTransition = True
    Else
        AllowStateTransition = False
        Err.Raise mfscriptcancel, "Beide Eigenschaften 'Sitzung' und 'Zirkularbeschluss' sind leer. Bitte wähle einen Wert für mindestens eine er Eigenschaften um den Prozess in den nächsten Status zu versetzen."
    End If
    
    ' Function to get property ID by alias
    Public Function GetPropID(alias)
        GetPropID = Vault.PropertyDefOperations.GetPropertyDefIDByAlias(alias)
    End Function