01. VISÃO GERAL

Objetivo desse documento é exemplificar a utilização do ExecAuto da nova rotina de Documentos(CNTA171). 

02. Inclusão de um novo documento

#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de inclusão de um novo documento*/
User Function Exemplo001()
    Local oModel    := NIL
    Local oMdlCNK   := Nil
    Local oMdlCXR   := Nil
    Local cContra   := "TREINAMENTO1954"
    Local cChave    := xFilial("CN9") + cContra
    Local aErro     := {}
    Local cNumero   := ""

    CN9->(DbSetOrder(1))
    if CN9->(DbSeek(cChave))
        oModel := FwLoadModel("CNTA171")
        oModel:SetOperation(MODEL_OPERATION_INSERT)

        if oModel:Activate()
            oMdlCNK := oModel:GetModel("CNKMASTER")

            oMdlCNK:SetValue("CNK_DESCRI"	, "DOC 001 - INCLUSAO")
            oMdlCNK:SetValue("CNK_CONTRA"	, CN9->CN9_NUMERO)
            oMdlCNK:SetValue("CNK_TPDOC"	, "001")
            oMdlCNK:SetValue("CNK_DTEMIS"	, dDatabase)
            oMdlCNK:SetValue("CNK_DTVALI"	, dDatabase+30)
            oMdlCNK:SetValue("CNK_OBS"	    , "Exemplo inclusão")

            if AliasInDic('CXR')
                oMdlCXR := oModel:GetModel("CXRDETAIL")
                cNumero := StrZero(oMdlCXR:Length(), GetSx3Cache('CXR_ITEM','X3_TAMANHO'))
                oMdlCXR:SetValue("CXR_ITEM"	, cNumero)
                oMdlCXR:SetValue("CXR_NOME"	, "Responsavel XPTO")
                oMdlCXR:SetValue("CXR_EMAIL", "[email protected]")

                oMdlCXR:AddLine()
                oMdlCXR:SetValue("CXR_ITEM"	, Soma1(cNumero))
                oMdlCXR:SetValue("CXR_NOME"	, "Auxiliar XPTO")
                oMdlCXR:SetValue("CXR_EMAIL", "[email protected]")

            endif
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

        If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf
    endif

Return

03. Alteração de um documento

#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de alteração de um documento*/ 
User Function Exemplo002()
    Local oModel    := NIL
    Local oMdlCNK   := Nil
    Local oMdlCXR   := Nil
    Local cContra   := "TREINAMENTO1954"
    Local cChave    := xFilial("CNK") + cContra
    Local aErro     := {}

    CNK->(DbSetOrder(3))//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(cChave))
        oModel := FwLoadModel("CNTA171")
        oModel:SetOperation(MODEL_OPERATION_UPDATE)

        if oModel:Activate()
            oMdlCNK := oModel:GetModel("CNKMASTER")
            
            oMdlCNK:SetValue("CNK_OBS"	    , "Exemplo Modificação")
            if AliasInDic('CXR')
                oMdlCXR := oModel:GetModel("CXRDETAIL")
                oMdlCXR:GoLine(2)                
                oMdlCXR:SetValue("CXR_NOME"	, "Operacao de Atualização")
            endif
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

        If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf
    endif

Return

04. Exclusão de um documento

#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de exclusão de um documento*/  
User Function Exemplo003()
    Local oModel    := NIL
    Local cContra   := "TREINAMENTO1954"
    Local cChave    := xFilial("CNK") + cContra
    Local aErro     := {}

    CNK->(DbSetOrder(3))//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(cChave))
        oModel := FwLoadModel("CNTA171")
        oModel:SetOperation(MODEL_OPERATION_DELETE)

        if oModel:Activate()            
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

        If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf
    endif

Return

04. Integração com o Totvs Assinatura Eletrônica(TAE)

Antes de realizar a integração sem interface gráfica, é necessário que o usuário realiza a autenticação em tela ao menos uma vez, para que o usuário/senha fique gravado no profile do usuário do Protheus. 

#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"  

/*Exemplo de integração com o TAE*/   
User Function Exemplo004()
    Local oModel    := NIL    
    Local cContra   := "TREINAMENTO1954"
    Local cChave    := xFilial("CNK") + cContra
    Local aErro     := {}

    CNK->(DbSetOrder(3))//CNK_FILIAL+CNK_CONTRA+CNK_TPDOC
    if CNK->(DbSeek(cChave))
        /*
            ATENÇÃO: 
            É NECESSÁRIO REALIZAR A OPERAÇÃO UMA VEZ EM TELA PARA QUE O USUÁRIO/SENHA FIQUE ARMAZENADA NO PROFILE DO USUÁRIO,
        DEPOIS DISSO SERÁ POSSÍVEL REALIZAR A OPERAÇÃO SEM INTERFACE GRÁFICA.    
        
        */
        CN171SOpSg(1)//1- Envia/publica documento; 2- Republica documento; 3- Atualiza situação da assinatura
        oModel := FwLoadModel("CNTA171")
        oModel:SetOperation(MODEL_OPERATION_UPDATE)

        if oModel:Activate()            
            
            If oModel:VldData()
                oModel:CommitData()
            EndIf

        endif

        if oModel:HasErrorMessage()
            aErro := aClone(oModel:GetErrorMessage())
        endif

        If oModel:IsActive()
            oModel:DeActivate()
        EndIf
        FreeObj(oModel)

        If !Empty(aErro)
            VarInfo('Erro apresentado:', aErro)            
        EndIf

        CN171SOpSg(0)//Restaura operação
    endif

Return
<!-- esconder o menu --> 


<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}
</style>