Como interceptar un error antes de que suceda
Publicado: Vie Abr 25, 2008 9:05 pm
Al estar procesando un bucle For Next, que atrapa y muestra a tavés de un
MsgInfo(), las opciones de menús definidas en una clase TMenu, cominza a
correr y mientras el menú superior tenga un hijo SubMenú me sigue mostrando
las opciones, el problema surge cuando un Item ya no tiene un hijo SubMenú
que dependa del item superior ya que me muestra el siguiente error:
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Class: 'NIL' has no exported method
Operación: AITEMS
Argumentos: [ 1] = Tipo: U Valor: NIL
Fichero:
Código error SO: 0
La pregunta es: Como hago para interceptar este error antes de que ocurra?
El código que ejecuta el proceso descrito es:
METHOD FormShow( oSender ) CLASS _Menu
//
Local l_oItemH
Local l_cItemH := ''
Local l_nItrH := 1
Local l_nLenH := 0
//
Local l_oItemV
Local l_cItemV := ''
Local l_nItrV := 1
Local l_nLenV := 0
//
Local l_oItemX
Local l_cItemX := ''
Local l_nItrX := 1
Local l_nLenX := 0
//
Local l_nCont := 1
//
l_oItemH := ::oMenu1:aItems
l_nLenH := Len(l_oItemH)
For l_nItrH := 1 to l_nLenH
l_cItemH := l_oItemH[l_nItrH]
MsgInfo('1 '+l_cItemH:cText)
l_nCont++
l_oItemV := l_oItemH[l_nItrH]:oSubMenu:aItems
l_nLenV := Len(l_oItemV)
For l_nItrV := 1 to l_nLenV
l_cItemV := l_oItemV[l_nItrV]
If Empty(l_cItemV:cText)
Loop
EndIf
MsgInfo('2 '+l_cItemV:cText)
l_nCont++
If
Empty(l_oItemH[l_nItrH]:oSubMenu:aItems[l_nItrV]:oSubMenu:aI tems)
MsgInfo('Detectado')
EndIf
l_oItemX :=
l_oItemH[l_nItrH]:oSubMenu:aItems[l_nItrV]:oSubMenu:aItems
l_nLenX := Len(l_oItemX)
For l_nItrX := 1 to l_nLenX
l_cItemX := l_oItemX[l_nItrX]
If Empty(l_cItemX:cText)
Loop
EndIf
MsgInfo('3 '+l_cItemX:cText)
l_nCont++
Next l_nItrX
Next l_nItrV
Next l_nItrH
MsgInfo(l_nCont)
//
RETURN Nil
Gracias
Guillermo Guevara Carrillo
MsgInfo(), las opciones de menús definidas en una clase TMenu, cominza a
correr y mientras el menú superior tenga un hijo SubMenú me sigue mostrando
las opciones, el problema surge cuando un Item ya no tiene un hijo SubMenú
que dependa del item superior ya que me muestra el siguiente error:
Subsistema: BASE
Código de error: 1004
Estado: .F.
Descripción: Class: 'NIL' has no exported method
Operación: AITEMS
Argumentos: [ 1] = Tipo: U Valor: NIL
Fichero:
Código error SO: 0
La pregunta es: Como hago para interceptar este error antes de que ocurra?
El código que ejecuta el proceso descrito es:
METHOD FormShow( oSender ) CLASS _Menu
//
Local l_oItemH
Local l_cItemH := ''
Local l_nItrH := 1
Local l_nLenH := 0
//
Local l_oItemV
Local l_cItemV := ''
Local l_nItrV := 1
Local l_nLenV := 0
//
Local l_oItemX
Local l_cItemX := ''
Local l_nItrX := 1
Local l_nLenX := 0
//
Local l_nCont := 1
//
l_oItemH := ::oMenu1:aItems
l_nLenH := Len(l_oItemH)
For l_nItrH := 1 to l_nLenH
l_cItemH := l_oItemH[l_nItrH]
MsgInfo('1 '+l_cItemH:cText)
l_nCont++
l_oItemV := l_oItemH[l_nItrH]:oSubMenu:aItems
l_nLenV := Len(l_oItemV)
For l_nItrV := 1 to l_nLenV
l_cItemV := l_oItemV[l_nItrV]
If Empty(l_cItemV:cText)
Loop
EndIf
MsgInfo('2 '+l_cItemV:cText)
l_nCont++
If
Empty(l_oItemH[l_nItrH]:oSubMenu:aItems[l_nItrV]:oSubMenu:aI tems)
MsgInfo('Detectado')
EndIf
l_oItemX :=
l_oItemH[l_nItrH]:oSubMenu:aItems[l_nItrV]:oSubMenu:aItems
l_nLenX := Len(l_oItemX)
For l_nItrX := 1 to l_nLenX
l_cItemX := l_oItemX[l_nItrX]
If Empty(l_cItemX:cText)
Loop
EndIf
MsgInfo('3 '+l_cItemX:cText)
l_nCont++
Next l_nItrX
Next l_nItrV
Next l_nItrH
MsgInfo(l_nCont)
//
RETURN Nil
Gracias
Guillermo Guevara Carrillo