Объявление

Свернуть
Пока нет объявлений.

Проверка условий перехода статусов

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Проверка условий перехода статусов

    Функция ниже дает возможность узнать, разрешен ли в данное время конкретный переход статусов для конкретной записи (условиями перехода статусов):
    Код:
    Function IsAllowedStateTransition(objActiveRequest, strWorkflowFieldAlias, strStateFromAlias, strStateToAlias)
        Dim objWorkflow : Set objWorkflow = objActiveRequest.UserFields(Eval("strWorkflowFieldAlias")).Definition.Details
        Dim objStateFrom : Set objStateFrom = objWorkflow.States(Eval("strStateFromAlias"))
        Dim objStateTo : Set objStateTo = objWorkflow.States(Eval("strStateToAlias"))
        For Each objStateTransition in objWorkflow.StateTransitions
            If (objStateTransition.From.UniqueId = objStateFrom.UniqueId) And (objStateTransition.To.UniqueId = objStateTo.UniqueId) Then
                Dim objFolder : Set objFolder = objActiveRequest.RequestFolder
                Dim objFilter : Set objFilter = objFolder.MakeFilter
                objFilter.Rule = objStateTransition.Rule
                If objFilter.RequestMatchesFilter(objActiveRequest.UniqueId) Then
                    IsAllowedStateTransition = True
                Else
                    IsAllowedStateTransition = False
                End If
            End If
        Next
    End Function
    С уважением, Сергей Осадчий

  • #2
    Re: Проверка условий перехода статусов

    Добрый день.
    Я бы добавил к этому варианту начальное присвоение значения функции в False (IsAllowedStateTransition = False).
    Иначе в цикле функции можно не попасть в первый IF и значение функции не присвоится.
    Таким образом, можно убрать ELSE у второго условия.
    Код:
    Function IsAllowedStateTransition(objActiveRequest, strWorkflowFieldAlias, strStateFromAlias, strStateToAlias)
        Dim objWorkflow : Set objWorkflow = objActiveRequest.UserFields(Eval("strWorkflowFieldAlias")).Definition.Details
        Dim objStateFrom : Set objStateFrom = objWorkflow.States(Eval("strStateFromAlias"))
        Dim objStateTo : Set objStateTo = objWorkflow.States(Eval("strStateToAlias"))
        IsAllowedStateTransition = False
        For Each objStateTransition in objWorkflow.StateTransitions
            If (objStateTransition.From.UniqueId = objStateFrom.UniqueId) And (objStateTransition.To.UniqueId = objStateTo.UniqueId) Then
                Dim objFolder : Set objFolder = objActiveRequest.RequestFolder
                Dim objFilter : Set objFilter = objFolder.MakeFilter
                objFilter.Rule = objStateTransition.Rule
                If objFilter.RequestMatchesFilter(objActiveRequest.UniqueId) Then IsAllowedStateTransition = True
            End If
        Next
    End Function
    С уважением,
    Иванов Владислав

    Комментарий


    • #3
      Re: Проверка условий перехода статусов

      Сообщение от Vladislav Ivanov
      Я бы добавил к этому варианту начальное присвоение значения функции в False
      Владислав, спасибо!

      И еще можно добавить Exit For после IsAllowedStateTransition = True.
      С уважением, Сергей Осадчий

      Комментарий


      • #4
        Мой текущий вариант, с учетом комментариев -

        Код:
        Function IsAllowedStateTransition(objActiveRequest, strWorkflowFieldAlias, strStateFromAlias, strStateToAlias)
            Dim objWorkflow : Set objWorkflow = objActiveRequest.UserFields(Eval("strWorkflowFieldAlias")).Definition.Details
            Dim objStateFrom : Set objStateFrom = objWorkflow.States(Eval("strStateFromAlias"))
            Dim objStateTo : Set objStateTo = objWorkflow.States(Eval("strStateToAlias"))
            IsAllowedStateTransition = False
            If objWorkflow.StateTransitions.Count > 0 Then
                Dim objStateTransition
                For Each objStateTransition In objWorkflow.StateTransitions
                    If (objStateTransition.From.UniqueId = objStateFrom.UniqueId) _
                    And (objStateTransition.To.UniqueId = objStateTo.UniqueId) Then
                        Dim objFilter : Set objFilter = objActiveRequest.RequestFolder.MakeFilter
                        objFilter.Rule = objStateTransition.Rule
                        If objFilter.RequestMatchesFilter(objActiveRequest.UniqueId) Then
                            IsAllowedStateTransition = True
                        End If
                        Exit For
                    End If
                Next
            End If
        End Function
        С уважением, Сергей Осадчий

        Комментарий

        Обработка...
        X