1. Julian I.
  2. PowerBuilder
  3. Friday, 24 January 2020 10:16 AM UTC

Hi, we have an issue executing a pipeline:

Our PB19 application is crashing on runtime when we execute a pipelie and the value of a column is greater than column size.

We have correct it changing the column size on pipeline.

But, ¿is there any way to catch the error, to avoid the crash in other not controlated cases?

We have added the try..catch exception, but this not catches the error.

Our Code:

TRY
    ll_error_pipe = pline.Start(atr_origen, atr_destino, lds_error, [parms ...] )
CATCH (runtimeerror err)   
           MessageBox("Atención", "Se produjo un error en la actualización ... "  + err.GetMessage())
     return -1
END TRY   
  
if ll_error_pipe <> 1 then

        CHOOSE CASE error_pipe
            CASE -1
                ls_error = "Fallo Abriendo Pipe"
            CASE -2   
                ls_error = "Demasiadas columnas"
            CASE -3   
                ls_error = "Ya existe la tabla"
            CASE -4   
                ls_error = "No existe la tabla"
            CASE -5   
                ls_error = "Falta la conexion"
            CASE -6   
                ls_error = "Argumentos incorrectos"
            CASE -7   
                ls_error = "Columna incorrecta"
            CASE -8   
                ls_error = "Fatal Error SQL en origen"
            CASE -9   
                ls_error = "Fatal Error SQL en destino"
            CASE -10  
                ls_error = "Número máximo de errores excedido"
            CASE -12  
                ls_error = "Sintaxis de tabla incorrecta"
            CASE -13  
                ls_error = "Se necesita campo clave pero no aportado"
            CASE -15  
                ls_error = "Pipe todavia en progreso"
            CASE -16  
                ls_error = "Error en base de datos origen"
            CASE -17  
                ls_error = "Error en base de datos destino"
            CASE -18  
                ls_error = "La base de datos destino es sólo de lectura"
            CASE ELSE
                ls_error = "Error Nº:"+String(error_pipe)
        END CHOOSE
 

end if

if (pline.RowsInError>0 OR ll_error_pipe <>1) then
        ls_error = "~r~nError en volcado de datos"
        FOR I=1 TO DS_ERROR.ROWCOUNT()
            ls_error += lds_error.getitemstring(i,1) + "~r~n"
        NEXT
end if

 

Regards.

 

 

 

 

 

Accepted Answer
Julian I. Accepted Answer Pending Moderation
  1. Saturday, 25 January 2020 13:42 PM UTC
  2. PowerBuilder
  3. # Permalink

The app falls over and closes with no error.
We detected the problem was an incorrect column size in the pipe and we correct it, so we have no more errors.
But the question is that we expected at least a message error and the app fell over in the pline.star execution with no message. I will test when I have time if it is a PB19 problem or is related to our code.

Reggards and thanks to all.

Comment
There are no comments made yet.
Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Friday, 24 January 2020 19:37 PM UTC
  2. PowerBuilder
  3. # 1

Hi Julian;

   The PipeLine object should not crash and should automatically handle the error by logging it and then carrying on with the next row. The RowsInError property and your lds_error DataStore should contain the error and affected row that needs to be repaired.

  If this is a repeatable crash error, I would suggest opening a Support Ticket for this issue. In the mean-time - continue to handle this with a larger column size.

Regards ... Chris

Comment
There are no comments made yet.
Michael Kramer Accepted Answer Pending Moderation
  1. Friday, 24 January 2020 12:34 PM UTC
  2. PowerBuilder
  3. # 2

Hi Julian,

I'm unsure whether that TRY-CATCH will cover total pipeline execution process. In any case Pipeline.Start(...) should complete potentially in an error state and info on failing rows in the "error datawindow". That's what enables later call to Pipeline.Repair(...) to finish off the pipeline process.

Couple of questions:

  • Have you tried putting code in events = PipeStart, PipeMeter, and PipeEnd to log and track pipeline progress?
  • When you say CRASH - Does your app simple fall over or is there a runtime error resulting in an Application.SystemError event executing before app falls over?

Pipeline is built to withstand data errors - that's why it has a Error DataWindow + Repair(...) feature to enable manual intervention to correct errors. In any case, any pipeline execution is expected to leave your app running no matter the data errors.

HTH /Michael

Comment
  1. Marie Bisschoff
  2. Friday, 9 October 2020 12:23 PM UTC
HI can anybody help me. why would pipemeter event in pipelines not be excuted

I have my breakpoint in pipestart and it goes in there but not my breakpoint in the pipemeter

  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.