Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Produto:

Protheus

Ocorrência:

Exemplo prático de como cadastrar operações em rotinas automáticas.

Passo a passo:

O programa PCPA124 (Operações) utiliza o conceito de MVC. Para que seja possível utilizá-lo em rotinas automáticas, é necessário instanciar o modelo de dados do programa e executar as funções responsáveis pela persistência de dados. Para mais detalhes dos métodos disponíveis nas rotinas MVC, consulte o manual http://tdn.totvs.com/display/public/PROT/AdvPl+utilizando+MVC.

Exemplo de uma operação de Inclusão de operações pelo programa MATA124, fazendo a execução automática.

Bloco de código
languagetext
titleExemplo Inclusão
linenumberstrue
#INCLUDE 'FWMVCDEF.CH'
#Include "TBICONN.CH"

//Inclusão de um roteiro
User Function incRot()
    Local oModel, oMdlDet, oMdlH3 
    Local cErro  := ""
    Local lRet   := .T.

 	Prepare environment empresa '99' filial '01' modulo 'PCP'       

	INCLUI := .T.
    ALTERA := .F.
     
    oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124
 
    oModel:SetOperation(MODEL_OPERATION_INSERT) //Seta a operação de inclusão no modelo.
     
    If oModel:Activate() //Ativa o modelo.
        If !oModel:SetValue("PCPA124_CAB","G2_CODIGO" , "02") //Atribui o código do roteiro no modelo. (G2_CODIGO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oModel:SetValue("PCPA124_CAB","G2_PRODUTO", "PRD_EXEMPLO") //Atribui o código do produto no modelo. (G2_PRODUTO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        oMdlDet := oModel:GetModel("PCPA124_SG2") //Recupera o submodelo detalhe.
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","10") //Atribui o código da operação no modelo. (G2_OPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE") //Atribui a descrição da operação no modelo. (G2_DESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSO","REC01") //Atribui o código do recurso no modelo. (G2_RECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUP",1) //Atribui o tempo de setup no modelo. (G2_SETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPAD",100) //Atribui o lote padrão no modelo. (G2_LOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPAD",1) //Atribui o tempo padrão no modelo. (G2_TEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPER",'1') //Atribui o tipo de operação no modelo. (G2_TPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf


        If lRet
            //Adiciona recursos alternativos.
            oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
            If !oMdlH3:SetValue("H3_RECALTE",'REC02') //Atribui o Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
            If lRet .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf

            //Adiciona um novo recurso alternativo
            If lRet .And. !oMdlH3:AddLine()
                lRet := .F.
                cErro := u_getErr(oModel)
            EndIf

            If lRet .And. !oMdlH3:SetValue("H3_RECALTE",'REC03') //Atribui o Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
            If lRet .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf

        If lRet .And. !oMdlDet:AddLine() //Adiciona uma nova linha no modelo detalhe
            //Se ocorreu algum erro ao adicionar uma nova linha, recupera o erro
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","20") //Atribui o código da operação no modelo. (G2_OPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE 2") //Atribui a descriçãoo da operação no modelo. (G2_DESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSO","REC02") //Atribui o código do recurso no modelo. (G2_RECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUP",0) //Atribui o tempo de setup no modelo. (G2_SETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPAD",90) //Atribui o lote padrão no modelo. (G2_LOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPAD",1) //Atribui o tempo padrão no modelo. (G2_TEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPER",'1') //Atribui o tipo de operação no modelo. (G2_TPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf

        If lRet
            //Adiciona recursos alternativos.
            oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
            If !oMdlH3:SetValue("H3_RECALTE",'REC03') //Atribui o Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
            If lRet .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
 
        If lRet
            If oModel:VldData() //Valida as informações
                lRet := oModel:CommitData() //Efetiva o cadastro.
                If !lRet
                    cErro := u_getErr(oModel)
                EndIf
            Else
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
        oModel:DeActivate() //Desativa o modelo.
    Else
        lRet := .F.
    EndIf
 
Return lRet

Exemplo de uma operação de Alteração de operações pelo programa PCPA124, fazendo a execução automática.

Bloco de código
languagetext
titleExemplo Alteração
linenumberstrue
#INCLUDE 'FWMVCDEF.CH'
#Include "TBICONN.CH"

//Alteração de um roteiro
User Function altRot()
    Local oModel, oMdlDet, oMdlH3
    Local cErro  := ""
    Local lRet   := .T.
 
 	Prepare environment empresa '99' filial '01' modulo 'PCP'

    INCLUI := .F.
    ALTERA := .T.
     
    SG2->(dbSetOrder(1))    
	SG2->(dbSeek(xFilial("SG2")+"PRODUTO" + "CODIGO" + "OPERACAO")) //Posiciona no roteiro para alteração.
     
    oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124
 
    oModel:SetOperation(MODEL_OPERATION_UPDATE) //Seta a operação de alteração no modelo.
     
    If oModel:Activate() //Ativa o modelo.
        oMdlDet := oModel:GetModel("PCPA124_SG2") //Recupera o submodelo detalhe.
         
        If !oMdlDet:AddLine() //Adiciona uma nova linha no modelo detalhe
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","30") //Atribui o código da operação no modelo. (G2_OPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE 3") //Atribui a descriçãoo da operação no modelo. (G2_DESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSO","REC03") //Atribui o código do recurso no modelo. (G2_RECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUP",0) //Atribui o tempo de setup no modelo. (G2_SETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPAD",70) //Atribui o lote padrão no modelo. (G2_LOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPAD",2) //Atribui o tempo padrão no modelo. (G2_TEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPER",'1') //Atribui o tipo de operação no modelo. (G2_TPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf

        //Altera um recurso alternativo.
        If lRet
            //Posiciona na operação 10.
            If oMdlDet:SeekLine({{"G2_OPERAC","10"}})
                //Recupera o modelo dos recursos alternativos
                oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
                //Posiciona no recurso alternativo REC02
                If oMdlH3:SeekLine({{"H3_RECALTE","REC02"}})
                    //Altera a eficiência
                    If !oMdlH3:SetValue("H3_EFICIEN",50) //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
                        //Se ocorreu algum erro na atribuição, recupera o erro.
                        cErro := u_getErr(oModel)
                        lRet := .F.
                    EndIf
                EndIf
            EndIf
        EndIf

        If lRet
            If oModel:VldData() //Valida as informações
                lRet := oModel:CommitData() //Efetiva o cadastro.
                If !lRet
                    cErro := u_getErr(oModel)
                EndIf
            Else
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
        oModel:DeActivate() //Desativa o modelo.
    Else
        lRet := .F.
    EndIf
     
Return lRet

Exemplo de uma operação de Exclusão de operações pelo programa PCPA124, fazendo a execução automática.

Bloco de código
languagetext
titleExemplo exclusão
linenumberstrue
#INCLUDE 'FWMVCDEF.CH' 
#Include "TBICONN.CH"

//Exclusão de um roteiro
User Function excRot()
	Local oModel
	Local cErro  := ""
	Local lRet   := .T.

 	Prepare environment empresa '99' filial '01' modulo 'PCP'

	INCLUI := .F.
	ALTERA := .F.
	
	SG2->(dbSetOrder(1))  
	SG2->(dbSeek(xFilial("SG2")+"PRODUTO" + "CODIGO" + "OPERACAO")) //Posiciona no roteiro para alteração.
	
	oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124

	oModel:SetOperation(MODEL_OPERATION_DELETE) //Seta a operação de exclusão no modelo.
	
	If oModel:Activate() //Ativa o modelo.
		If oModel:VldData() //Valida as informações
			lRet := oModel:CommitData() //Efetiva a alteração
			If !lRet
				cErro := u_getErr(oModel)
			EndIf
		Else
			cErro := u_getErr(oModel)
			lRet := .F.
		EndIf
	Else
		lRet := .F.
	EndIf

Return lRet


Função u_getErr que é chamada nos exemplos:

Bloco de código
languagetext
titleFunção getErr
linenumberstrue
User Function getErr(oMdl)
	Local aErro := oMdl:GetErrorMessage()
	Local cErro := ""
	cErro := aErro[MODEL_MSGERR_IDFORM]+":"+;
	aErro[MODEL_MSGERR_IDFIELD]+":"+;
	aErro[MODEL_MSGERR_IDFORMERR]+":"+;
	aErro[MODEL_MSGERR_IDFIELDERR]+":"+;
	aErro[MODEL_MSGERR_ID]+;
	aErro[MODEL_MSGERR_MESSAGE]+"/"+aErro[MODEL_MSGERR_SOLUCTION]
	Conout(cErro)
Return cErro


Observações:

Para ser possível utilizar as variáveis estáticas "MODEL_...", é necessário utilizar a include "FWMVCDEF.CH" e "TBICONN.CH" no arquivo fonte.
Bloco de código
languagetextjava
titleExemplo AlteraçãoInclusão
linenumberstrue
#INCLUDE 'FWMVCDEF.CH'
#Include "TBICONN.CH"

//AlteraçãoInclusão de um roteiro
User Function altRotincRot()
    Local oModel, oMdlDet, oMdlH3 
    Local cErro  := ""
    Local lRet   := .T.
 
 	Prepare environment empresa '99' filial '01' modulo 'PCP'

       

	INCLUI := .FT.
    ALTERA := .TF.
     
    SG2->(dbSetOrder(1))    
	SG2->(dbSeek(xFilial("SG2")+"PRODUTO" + "CODIGO" + "OPERACAO")) //Posiciona no roteiro para alteração.
     
    oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124
 
    oModel:SetOperation(MODEL_OPERATION_UPDATEINSERT) //Seta a operação de alteraçãoinclusão no modelo.
     
    If oModel:Activate() //Ativa o modelo.
        oMdlDetIf := !oModel:GetModelSetValue("PCPA124_SG2") //Recupera o submodelo detalhe.
         
CAB","G2_CODIGO" , "02") //Atribui o código do roteiro no modelo. (G2_CODIGO)
          If !oMdlDet:AddLine() //Adiciona uma nova linha no modelo detalheSe ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        If lRet .And. !oMdlDetoModel:SetValue("PCPA124_CAB","G2_OPERACPRODUTO", "30PRD_EXEMPLO") //Atribui o código dado operaçãoproduto no modelo. (G2_OPERACPRODUTO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
       If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE 3"oMdlDet := oModel:GetModel("PCPA124_SG2") //Atribui a descriçãooRecupera o submodelo detalhe.
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","10") //Atribui o código da operação no modelo. (G2_DESCRIOPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSODESCRI","REC03OPERAC. TESTE") //Atribui oa códigodescrição doda recursooperação no modelo. (G2_RECURSODESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUPRECURSO",0"REC01") //Atribui o tempocódigo dedo setuprecurso no modelo. (G2_SETUPRECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPADSETUP",701) //Atribui o tempo lotede padrãosetup no modelo. (G2_LOTEPADSETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPADLOTEPAD",2100) //Atribui o tempolote padrão no modelo. (G2_TEMPADLOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPERTEMPAD",'1') //Atribui o tipotempo depadrão operação nono modelo. (G2_TPOPERTEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRABTPOPER",'CT011') //Atribui o Centrotipo de trabalhooperação no modelo. (G2_CTRABTPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf

        //AlteraIf um recurso alternativo.
        If lRetlRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //PosicionaSe ocorreu algum erro na atribuição, recupera operaçãoo 10erro.
            IfcErro oMdlDet:SeekLine({{"G2_OPERAC","10"}}= u_getErr(oModel)
            lRet := .F.
  //Recupera o modelo  dos recursos alternativosEndIf


        If lRet
       oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
   //Adiciona recursos alternativos.
           //Posiciona nooMdlH3 recurso alternativo REC02
  := oModel:GetModel("PCPA124_SH3_R")
              If !oMdlH3:SeekLineSetValue({{"H3_RECALTE","'REC02"}}')
 //Atribui o Recurso alternativo
                //Altera a eficiência
    Se ocorreu algum erro na atribuição, recupera o erro.
                IfcErro !oMdlH3:SetValue("H3_EFICIEN",50) //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
        := u_getErr(oModel)
                lRet := .F.
            EndIf
            If lRet .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                        cErro := u_getErr(oModel)
                        lRet := .F.
            EndIf

         EndIf
   //Adiciona um novo recurso alternativo
         EndIf
   If lRet .And. !oMdlH3:AddLine()
      EndIf
        EndIf

   lRet := .F.
   If lRet
            IfcErro oModel:VldData= u_getErr(oModel) //Valida as informações

            EndIf

            If lRet := oModel:CommitData(.And. !oMdlH3:SetValue("H3_RECALTE",'REC03') //EfetivaAtribui o cadastro.Recurso alternativo
                If !lRet
       //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                EndIf lRet := .F.
            ElseEndIf
            If lRet   cErro := u_getErr(oModel)
      .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
          lRet := .F.
    //Se ocorreu algum erro na atribuição, recupera o EndIferro.
        EndIf
        oModel:DeActivate() //Desativa o modelo.
cErro := u_getErr(oModel)
        Else
        lRet := .F.
            EndIf
     
Return lRet   EndIf

        If lRet .And. !oMdlDet:AddLine() //Adiciona uma nova linha no modelo detalhe
            //Se ocorreu algum erro ao adicionar uma nova linha, recupera o erro
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","20") //Atribui o código da operação no modelo. (G2_OPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE 2") //Atribui a descriçãoo da operação no modelo. (G2_DESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSO","REC02") //Atribui o código do recurso no modelo. (G2_RECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUP",0) //Atribui o tempo de setup no modelo. (G2_SETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPAD",90) //Atribui o lote padrão no modelo. (G2_LOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPAD",1) //Atribui o tempo padrão no modelo. (G2_TEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPER",'1') //Atribui o tipo de operação no modelo. (G2_TPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf

        If lRet
            //Adiciona recursos alternativos.
            oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
            If !oMdlH3:SetValue("H3_RECALTE",'REC03') //Atribui o Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
            If lRet .And. !oMdlH3:SetValue("H3_TIPO",'A') //Atribui o Tipo do Recurso alternativo
                //Se ocorreu algum erro na atribuição, recupera o erro.
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
 
        If lRet
            If oModel:VldData() //Valida as informações
                lRet := oModel:CommitData() //Efetiva o cadastro.
                If !lRet
                    cErro := u_getErr(oModel)
                EndIf
            Else
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
        oModel:DeActivate() //Desativa o modelo.
    Else
        lRet := .F.
    EndIf
 
Return lRet
Bloco de código
languagejava
titleExemplo Alteração
linenumberstrue
#INCLUDE 'FWMVCDEF.CH'
#Include "TBICONN.CH"

//Alteração de um roteiro
User Function altRot()
    Local oModel, oMdlDet, oMdlH3
    Local cErro  := ""
    Local lRet   := .T.
 
 	Prepare environment empresa '99' filial '01' modulo 'PCP'

    INCLUI := .F.
    ALTERA := .T.
     
    SG2->(dbSetOrder(1))    
	SG2->(dbSeek(xFilial("SG2")+"PRODUTO" + "CODIGO" + "OPERACAO")) //Posiciona no roteiro para alteração.
     
    oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124
 
    oModel:SetOperation(MODEL_OPERATION_UPDATE) //Seta a operação de alteração no modelo.
     
    If oModel:Activate() //Ativa o modelo.
        oMdlDet := oModel:GetModel("PCPA124_SG2") //Recupera o submodelo detalhe.
         
        If !oMdlDet:AddLine() //Adiciona uma nova linha no modelo detalhe
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
 
        If lRet .And. !oMdlDet:SetValue("G2_OPERAC","30") //Atribui o código da operação no modelo. (G2_OPERAC)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_DESCRI","OPERAC. TESTE 3") //Atribui a descriçãoo da operação no modelo. (G2_DESCRI)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_RECURSO","REC03") //Atribui o código do recurso no modelo. (G2_RECURSO)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_SETUP",0) //Atribui o tempo de setup no modelo. (G2_SETUP)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_LOTEPAD",70) //Atribui o lote padrão no modelo. (G2_LOTEPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TEMPAD",2) //Atribui o tempo padrão no modelo. (G2_TEMPAD)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_TPOPER",'1') //Atribui o tipo de operação no modelo. (G2_TPOPER)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf
        If lRet .And. !oMdlDet:SetValue("G2_CTRAB",'CT01') //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
            //Se ocorreu algum erro na atribuição, recupera o erro.
            cErro := u_getErr(oModel)
            lRet := .F.
        EndIf

        //Altera um recurso alternativo.
        If lRet
            //Posiciona na operação 10.
            If oMdlDet:SeekLine({{"G2_OPERAC","10"}})
                //Recupera o modelo dos recursos alternativos
                oMdlH3 := oModel:GetModel("PCPA124_SH3_R")
                //Posiciona no recurso alternativo REC02
                If oMdlH3:SeekLine({{"H3_RECALTE","REC02"}})
                    //Altera a eficiência
                    If !oMdlH3:SetValue("H3_EFICIEN",50) //Atribui o Centro de trabalho no modelo. (G2_CTRAB)
                        //Se ocorreu algum erro na atribuição, recupera o erro.
                        cErro := u_getErr(oModel)
                        lRet := .F.
                    EndIf
                EndIf
            EndIf
        EndIf

        If lRet
            If oModel:VldData() //Valida as informações
                lRet := oModel:CommitData() //Efetiva o cadastro.
                If !lRet
                    cErro := u_getErr(oModel)
                EndIf
            Else
                cErro := u_getErr(oModel)
                lRet := .F.
            EndIf
        EndIf
        oModel:DeActivate() //Desativa o modelo.
    Else
        lRet := .F.
    EndIf
     
Return lRet
Bloco de código
languagejava
titleExemplo exclusão
linenumberstrue
#INCLUDE 'FWMVCDEF.CH' 
#Include "TBICONN.CH"

//Exclusão de um roteiro
User Function excRot()
	Local oModel
	Local cErro  := ""
	Local lRet   := .T.

 	Prepare environment empresa '99' filial '01' modulo 'PCP'

	INCLUI := .F.
	ALTERA := .F.
	
	SG2->(dbSetOrder(1))  
	SG2->(dbSeek(xFilial("SG2")+"PRODUTO" + "CODIGO" + "OPERACAO")) //Posiciona no roteiro para alteração.
	
	oModel := FWLoadModel('PCPA124') //Carrega o modelo do programa PCPA124

	oModel:SetOperation(MODEL_OPERATION_DELETE) //Seta a operação de exclusão no modelo.
	
	If oModel:Activate() //Ativa o modelo.
		If oModel:VldData() //Valida as informações
			lRet := oModel:CommitData() //Efetiva a alteração
			If !lRet
				cErro := u_getErr(oModel)
			EndIf
		Else
			cErro := u_getErr(oModel)
			lRet := .F.
		EndIf
	Else
		lRet := .F.
	EndIf

Return lRet
Bloco de código
languagejava
titleFunção getErr
linenumberstrue
User Function getErr(oMdl)
	Local aErro := oMdl:GetErrorMessage()
	Local cErro := ""
	cErro := aErro[MODEL_MSGERR_IDFORM]+":"+;
	aErro[MODEL_MSGERR_IDFIELD]+":"+;
	aErro[MODEL_MSGERR_IDFORMERR]+":"+;
	aErro[MODEL_MSGERR_IDFIELDERR]+":"+;
	aErro[MODEL_MSGERR_ID]+;
	aErro[MODEL_MSGERR_MESSAGE]+"/"+aErro[MODEL_MSGERR_SOLUCTION]
	Conout(cErro)
Return cErro