Forum Discussion

jayaleck's avatar
jayaleck
New Contributor II
6 days ago
Solved

How do I return a range of Members?

We have a large flat hierarchy, members starting with Px_1000 to Px_9999. For example, P1_1000_27 Project 1, P5_1001 Project Yellow.... P7_9999 Project Bob. The numbers are unique (no two same number...
  • jayaleck's avatar
    2 days ago

    Thank you! Same concept I share what I came up with,

    If args.FunctionName.XFEqualsIgnoreCase("UavailableModNumberCheck") Then
     
    Dim FromModNumber As Integer
    Dim ToModNumber As Integer
     
    'Validation that they entered numbers in, then converting to an integer.
    If args.NameValuePairs("From") = String.Empty Or args.NameValuePairs("To") = String.Empty Then
    Return "None:Name(From/To cannot be blank)"
    Else
    FromModNumber = Integer.Parse(args.NameValuePairs("From"))
    ToModNumber = Integer.Parse(args.NameValuePairs("To"))
    End If
     
    'Validation of number entry
    If FromModNumber < 1000 Or ToModNumber > 9999 Then
    Return "Name(Mod Number entry must be between 1000-9999)"
    Else If FromModNumber > ToModNumber Then
    Return "Name(*From* Mod Number must be less than *To* Mod Number)"
    Else If FromModNumber = ToModNumber Then
    Return "Name(*From* Mod Number must not be the same as the *To* Mod Number)"
    End If
     
    Dim ModList As List(Of MemberInfo) = BRApi.Finance.Metadata.GetMembersUsingFilter(si, "Flow", "F#Flow.Base.Where(Name DoesNotContain Jay)", True)
    Dim ModSplit As New List (Of String)
    Dim ModNumbersList As New List (Of Integer)
    Dim PDONumbersList As New List (Of String)
     
    'Loop through modlist, put mod numbers into separate list and mod name in a separate list.
    For Each FlowMod In ModList
    ModSplit = StringHelper.SplitString(FlowMod.Member.Name, "_")
    If ModSplit(2) >= FromModNumber And ModSplit(2) <= ToModNumber Then
    'List if integers as mod number
    ModNumbersList.Add(Integer.Parse(ModSplit(2)))
    'List of mod name
    PDONumbersList.Add(FlowMod.Member.Name)
    'Brapi.ErrorLog.LogMessage(si, $"FlowMod {FlowMod.Member.Name}")
    End If
    Next
    ModNumbersList.Sort()
     
    Dim i As Integer = FromModNumber
    Dim iToString As String = String.Empty
    Dim ReturnString As String = "F#None:Name(Unavailable Mod numbers between " & FromModNumber & "-" & ToModNumber & ")"
     
    While i <= ToModNumber
     
    If ModNumbersList.Contains(i) Then
     
    iToString = i.ToString
     
    If i = iToString
    For Each PDOName In PDONumbersList
    If PDOName.Contains(iToString)
    ReturnString = ReturnString & ", F#None:Name(" & PDOName & ")"
    End If
    Next
    End If
    Else
    'Mod Number is open
    End If
     
    i = i + 1
    End While
     
    Return ReturnString