Árvore de páginas

Como desenvolver a "User Function" para execução automática de dados na rotina Geração Check List. 

Produto:

Manutenção de Ativos e Gestão de Frotas (SIGAMNT).

Versões:

Todas

Ocorrência:

Desenvolvimento de função para execução automática(ExecAuto) e inclusão de registros na rotina de Geração Check List.

Ambiente:

Todos

Passo a passo:

Para desenvolvimento da rotina de execução automática, para inclusão de dados na rotina de Geração Check List, favor utilizar o exemplo abaixo.

Exemplo fonte ExecAuto
#INCLUDE "PROTHEUS.CH"

//--------------------------------------------------
// FUNÇÃO RESPONSÁVEL PELA CRIAÇÃO DO EXECAUTO
//  DA ROTINA MNTA735
//--------------------------------------------------

User Function MNT735Exec()

    Local aSay    := {}
    Local aButton := {}
    Local nOpc    := 0
    Local Titulo  := 'IMPORTAÇÃO DE CHECK LIST'
    Local cDesc1  := 'Esta rotina fará a importação de Check List'
    Local cDesc2  := 'conforme layout. '
    Local cDesc3  := ''
    Local lOk     := .T.

	Private lJob := Type( "oMainWnd" ) != "O"

	If !lJob

		aAdd( aSay, cDesc1 )
		aAdd( aSay, cDesc2 )
		aAdd( aSay, cDesc3 )

		aAdd( aButton, { 1, .T., { || nOpc := 1, FechaBatch() } } )
		aAdd( aButton, { 2, .T., { || FechaBatch() } } )

		FormBatch( Titulo, aSay, aButton )
	Else
		nOpc := 1 //quando a chamada for via Job recebe automaticamente OK para execução do processo
		RpcSetType(3)
        RpcSetEnv("99", "01 " )
	EndIf

    If nOpc == 1
    	If !lJob
    		Processa( { || lOk := Runproc() },'Aguarde','Processando...',.F.)
 			If lOk
				ApMsgInfo( 'Processamento terminado com sucesso.', 'ATENÇÃO' )
			Else
				ApMsgStop( 'Processamento realizado com problemas.', 'ATENÇÃO' )
			EndIf
		Else
			lOk := Runproc()
		EndIf

    EndIf

Return Nil

//-------------------------------------------------------------------
// Rotina para importação de Check List.
//-------------------------------------------------------------------
Static Function Runproc()

    Local lRet     := .T.
    Local aCposCab := {}
    Local aCposDet := {}

    //Dados da tabela.
    aCposCab := {}
    aAdd( aCposCab, { 'TTF_FILIAL' , xFilial("TTF")         } )
    aAdd( aCposCab, { 'TTF_CODBEM' , 'ALKM009         ' 	} )
    aAdd( aCposCab, { 'TTF_CODFAM' , 'FM0003'           	} )
    aAdd( aCposCab, { 'TTF_TIPMOD' , 'M00002    '			} )
    aAdd( aCposCab, { 'TTF_CODFUN' , '000001'           	} )
    aAdd( aCposCab, { 'TTF_DATA'   , dDataBase          	} )
    aAdd( aCposCab, { 'TTF_HORA'   , '12:00'            	} ) 
    aAdd( aCposCab, { 'TTF_SEQFAM' , '001'              	} ) 

    //Valores da TTG
    aCposDet := {}
    aAdd( aCposDet, {	{ 'TTG_FILIAL', xFilial("TTG")	},;
						{ 'TTG_ETAPA' , '000001'  		},;
						{ 'TTG_EVENTO', 'O'       		},;
						{ 'TTG_SERVIC', 'CORELE'  		},;
						{ 'TTG_CRITIC', 'A'       		} } )


    aAdd( aCposDet, { 	{ 'TTG_FILIAL', xFilial("TTG")	},;
						{ 'TTG_ETAPA' , '000002'		},;
						{ 'TTG_EVENTO', 'O'				},;
						{ 'TTG_SERVIC', 'CORELE'		},;
						{ 'TTG_CRITIC', 'M'				} } )

    If !Import( 'TTF', 'TTG', aCposCab, aCposDet )
        lRet := .F.
    EndIf

Return lRet

//-------------------------------------------------------------------
// Importacao dos dados
//-------------------------------------------------------------------
Static Function Import( cMaster, cDetail, aCpoMaster, aCpoDetail )

    Local oModel
    Local lRet    := .T.
    Local nI        := 0
    Local nJ        := 0
    Local nK        := 0
    Local nItErro := 0

    dbSelectArea( cDetail )
    dbSetOrder( 1 )
    dbSelectArea( cMaster )
    dbSetOrder( 1 )

    //Abre o Model da rotina.
    oModel := FWLoadModel( 'MNTA735' )

    // Define a operação desejavada: 3 – Inclusão / 4 – Alteração / 5 - Exclusão
    oModel:SetOperation( 3 )

    // Ativação do Modelo.
    oModel:Activate()

    //Joga os valores da TTF para o modelo - TTFMASTER.
    If Len(aCpoMaster) > 0
        For nI := 1 To Len(aCpoMaster)
            oModel:LoadValue("TTFMASTER",aCpoMaster[nI,1],aCpoMaster[nI,2])
        Next nI
    EndIf

    //Joga o valores da TTG para a Grid - TTGDETAIL.

    If Len(aCpoDetail) > 0
        For nJ := 1 To Len(aCpoDetail)
            If nJ > 1
                oModel:GetModel('TTGDETAIL'):AddLine()
            EndIf
            For nK := 1 to Len(aCpoDetail[nJ])
                ConOut(aCpoDetail[nJ][nK][1])
                oModel:LoadValue("TTGDETAIL",aCpoDetail[nJ][nK][1],aCpoDetail[nJ][nK][2])
            Next nK
        Next nJ
    EndIf

    If ( lRet := oModel:VldData() ) //Valida os dados informados.
        // Se os dados foram validados faz-se a gravação efetiva dos
        // dados (commit)
        oModel:CommitData()
    EndIf

    If !lRet
        // Se os dados não foram validados obtemos a descrição do erro para gerar
        // LOG ou mensagem de aviso
        aErro := oModel:GetErrorMessage()
        // A estrutura do vetor com erro é:
        // [1] identificador (ID) do formulário de origem
        // [2] identificador (ID) do campo de origem
        // [3] identificador (ID) do formulário de erro
        // [4] identificador (ID) do campo de erro
        // [5] identificador (ID) do erro
        // [6] mensagem do erro
        // [7] mensagem da solução
        // [8] Valor atribuído
        // [9] Valor anterior
        AutoGrLog( "Id do formulário de origem:" + ' [' + AllToChar( aErro[1] ) + ']' )
        AutoGrLog( "Id do campo de origem: " + ' [' + AllToChar( aErro[2] ) + ']' )
        AutoGrLog( "Id do formulário de erro: " + ' [' + AllToChar( aErro[3] ) + ']' )
        AutoGrLog( "Id do campo de erro: " + ' [' + AllToChar( aErro[4] ) + ']' )
        AutoGrLog( "Id do erro: " + ' [' + AllToChar( aErro[5] ) + ']' )
        AutoGrLog( "Mensagem do erro: " + ' [' + AllToChar( aErro[6] ) + ']' )
        AutoGrLog( "Mensagem da solução: " + ' [' + AllToChar( aErro[7] ) + ']' )
        AutoGrLog( "Valor atribuído: " + ' [' + AllToChar( aErro[8] ) + ']' )
        AutoGrLog( "Valor anterior: " + ' [' + AllToChar( aErro[9] ) + ']' )

		If nItErro > 0
            AutoGrLog( "Erro no Item: " + ' [' + AllTrim( AllToChar( nItErro ) ) + ']' )
        EndIf

		If !lJob
        	MostraErro()
		EndIf

    EndIf
    // Desativamos o Model
    oModel:DeActivate()

Return lRet