UiPath вызывает код с VB.net против Visual Studio - PullRequest
0 голосов
/ 23 сентября 2019

После нескольких дней попыток решить эту проблему, я хотел бы попросить вас о помощи - в настоящее время мы разрабатываем рабочий процесс RPA, который берет файл PDF, читает его, форматирует его (это счет в формате PDF), а затем что-то делает сданные.Прямо сейчас у меня есть код, работающий в Visual Studio, который берет строку из операции чтения PDF и форматирует ее для обработки данных для дальнейшей обработки.В Visual Studio все в порядке, даже при строгом включении и все такое, но когда я вставляю код в действие Invoke Code, все, что я получаю, это

System.Reflection.TargetInvocationException: Исключение было выдано цельювызов.----> System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.в UiPathCodeRunner_f63e6e400b2d4eb6b485d3e5c0e78e7f.Run (String temp_string, DataTable & dtable, String & ex, Int32 tab_len, String [] array_main)

Попробовал сузить проблему, уменьшив код, уменьшив кусочек кода до меньшего размера, уменьшив код до небольшого размерапроблема где-то в преобразовании данных.Кроме этого, я не вижу проблем с кодом, VS не видит проблем с кодом с теми же введенными данными, и предыдущая версия UiPath также не видела проблем с кодом (недавно обновленная студия 2018.2.2, я думаю, что до 2019.4.4 и имелпереписать весь код, потому что операции чтения pdf 2.0.0 и 3.0.0 читают pdf по-разному.

Я знаю, что большую часть кода можно упростить, но я переписал его так просто, как мне показалось возможным, поэтому UiPathмогу переварить его. Цените любую помощь, которую вы можете мне дать, а также простите мое форматирование, первый вопрос здесь.

Итак, код:

        Dim e As String

        Dim temp_string As String = "some long string that is delimited by \r\n"
        Dim splitfinal As String

        Dim delim1 As String() = New String() {"delimiter of invoice body start"}
        Dim delim2 As String() = New String() {"delimiter of invoice body end"}
        Dim delim3 As String() = New String() {"\r\n"}
        Dim split1 As String()
        Dim split2 As String()

        split1 = temp_string.Split(delim1, StringSplitOptions.None)
        split2 = split1(1).Split(delim2, StringSplitOptions.None)
        splitfinal = split2(0).ToString()

        Dim array_main As String() = splitfinal.Split(delim3, StringSplitOptions.None)
        Dim array_len As Integer = array_main.Length

        Dim temp As Double = Int((array_len) / 2) - 3

        Dim tab_len As Integer = Convert.ToInt32(temp)
        Dim table(tab_len, 9) As String

        Dim i As Integer
        Dim j As Integer = 1
        Dim k As Boolean = True

        Try

            i = 0
            '''''
            For Each line As String In array_main
                If (i>tab_len) Then 
                    Exit For
                ElseIf line.Trim = "" Then
                    Continue For
                ElseIf line.Trim = line.Split(" "c)(0) Then
                    table(i, 0) &= " " & line.Trim
                    Continue For
                End If

                If k = True Then

                    j = 1

                    For Each word As String In line.Split(" "c)
                        If word.Trim.Contains("/") Or word.Trim.Contains("\") And j = 1 Then
                            table(i, j) = word.Trim
                            j = 3
                        ElseIf Int32.TryParse(word.Trim, Nothing) = False And table(i, 0) = Nothing Then
                            table(i, 0) = word.Trim
                        ElseIf Int32.TryParse(word.Trim, Nothing) = False And table(i, 0) <> Nothing And j = 1 Then
                            table(i, 0) &= " " & word.Trim
                        ElseIf (word.Trim = "6117") Or (word.Trim = "6118") Then
                            table(i, 2) = word.Trim
                            k = False
                        ElseIf Int32.TryParse(word.Trim, Nothing) And j = 1 Then
                            table(i, j) = word.Trim
                            j = 3
                        ElseIf j <> 1 Then
                            table(i, j) = word.Trim
                            j += 1
                        Else 
                            'Throw New Exception
                        End If

                    Next

                ElseIf k = False Then

                    For Each word As String In line.Split(" "c)
                        If (j = 8) And (k = False) Then
                            table(i, 2) &= word.Trim
                            k = True
                        ElseIf j = 9 Then
                            table(i, j) = word.Trim
                            If (i>tab_len) Then 
                                Continue For
                            Else 
                                i += 1
                            End If
                            j = 1
                        Else
                            table(i, j) = word.Trim
                            j += 1

                        End If

                    Next

                End If

            Next

        Catch ex As Exception
            e = ex.ToString
        End Try

        ''done Now to convert to datatable

        Dim dtable = New DataTable

        For i = 0 To tab_len
            Dim row As DataRow = dtable.NewRow
            For j = 0 To 9
                If (i = 0) Then
                    dtable.Columns.Add(j.ToString, GetType(String))
                End If
                If (table(i, j) = Nothing) Then
                    row(j) = ""
                Else
                    row(j) = table(i, j)
                End If
            Next
            dtable.Rows.Add(row)
        Next

1 Ответ

0 голосов
/ 24 сентября 2019

Разрешил это через отдельное приложение c #, так как мне нужно было быстрое разрешение.(Ну, точно не решил проблему, но скорее обошел ее) Но все же оставляю код в резервной копии, так что я могу попробовать его, если у кого-то есть разрешение в действии Invoke Code.

...