Exemplo do Ponto de Entrada A200GRVE.
Exemplo do Ponto de Entrada:
//Bibliotecas
#Include "Protheus.ch"
#Include "TopConn.ch"
/*--------------------------------------------------------------------------------------------------------------*
| P.E.: A200GRVE |
| Desc: P.E. chamado na confirmação de dados da Estrutura |
| Link: http://tdn.totvs.com/display/public/PROT/A200GRVE |
*--------------------------------------------------------------------------------------------------------------*/
User Function A200GRVE()
Local aArea := GetArea()
Local nOperacao := ParamIxb[1]
Local lMapDiv := ParamIxb[2]
Local aRecExc := ParamIxb[3]
Local aRecAlt := ParamIxb[4]
Local cEmAlter := SuperGetMV("MV_X_ALTEM", .F., "suporte@terminaldeinformacao.com")
Local cEmExclu := SuperGetMV("MV_X_EXCEM", .F., "suporte@terminaldeinformacao.com")
Local cMsg := ""
Local nAtual := 0
Local aRegsInc := {}
Local aRegsAlt := {}
Local aRegsExc := {}
Local cQryAux := ""
Local cCodProd := ""
Local cDesProd := ""
If nOperacao != 3
cMsg += "Produto: "+cProduto+"("+Alltrim(Posicione('SB1', 1, FWxFilial('SB1')+cProduto, 'B1_DESC'))+")
"
cMsg += "Data: "+dToC(Date())+"
"
cMsg += "Hora: "+Time()+"
"
cMsg += "Usuário: "+RetCodUsr()+" ("+cUserName+")
"
EndIf
//Visualização
If nOperacao == 2
//Inclusão
ElseIf nOperacao == 3
//Alteração
ElseIf nOperacao == 4
//Se tiver alteração, dispara e-Mail
cMsg := 'Alteração na Estrutura.
'+cMsg+'
'
//Percorre os recnos
For nAtual := 1 To Len(aRecAlt)
cQryAux := " SELECT "
cQryAux += " G1_COMP, "
cQryAux += " B1_DESC AS DESCRICAO "
cQryAux += " FROM "
cQryAux += " "+RetSQLName('SG1')+" SG1 WITH (NOLOCK) "
cQryAux += " INNER JOIN "+RetSQLName('SB1')+" SB1 WITH (NOLOCK) ON ("
cQryAux += " B1_FILIAL = '"+FWxFilial('SB1')+"' "
cQryAux += " AND B1_COD = G1_COMP "
cQryAux += " AND SB1.D_E_L_E_T_ = ' ' "
cQryAux += " ) "
cQryAux += " WHERE "
cQryAux += " SG1.R_E_C_N_O_ = "+cValToChar(aRecAlt[nAtual][1])+" "
TCQuery cQryAux New Alias "QRY_AUX"
cCodProd := ""
cDesProd := ""
//Se houver dados
If !QRY_AUX->(EoF())
cCodProd := QRY_AUX->G1_COMP
cDesProd := QRY_AUX->DESCRICAO
EndIf
QRY_AUX->(DbCloseArea())
//Se tiver produto e/ou descrição
If !Empty(cCodProd) .Or. !Empty(cDesProd)
//Alteração de Item
If aRecAlt[nAtual][2] == 3
aAdd(aRegsInc, {cCodProd, cDesProd})
//Inclusão de Item
ElseIf aRecAlt[nAtual][2] == 1
aAdd(aRegsAlt, {cCodProd, cDesProd})
//Exclusão de Item
ElseIf aRecAlt[nAtual][2] == 2
aAdd(aRegsExc, {cCodProd, cDesProd})
EndIf
EndIf
Next
//Se tiver dados de inclusão
If Len(aRegsInc) > 0
cMsg += 'Inclusão de Produtos:
'
cMsg += ''
cMsg += ''
cMsg += '| Código | '
cMsg += 'Descrição | '
cMsg += '
'
For nAtual := 1 To Len(aRegsInc)
cMsg += ''
cMsg += '| '+aRegsInc[nAtual][1]+' | '
cMsg += ''+aRegsInc[nAtual][2]+' | '
cMsg += '
'
Next
cMsg += '
'
cMsg += ''
cMsg += '
'
EndIf
//Se tiver dados de alteração
If Len(aRegsAlt) > 0
cMsg += 'Alteraç&ão de Produtos:
'
cMsg += ''
cMsg += ''
cMsg += '| Código | '
cMsg += 'Descrição | '
cMsg += '
'
For nAtual := 1 To Len(aRegsAlt)
cMsg += ''
cMsg += '| '+aRegsAlt[nAtual][1]+' | '
cMsg += ''+aRegsAlt[nAtual][2]+' | '
cMsg += '
'
Next
cMsg += '
'
cMsg += ''
cMsg += '
'
EndIf
//Se tiver dados de exclusão
If Len(aRegsExc) > 0
cMsg += 'Exclusão de Produtos:
'
cMsg += ''
cMsg += ''
cMsg += '| Código | '
cMsg += 'Descrição | '
cMsg += '
'
For nAtual := 1 To Len(aRegsExc)
cMsg += ''
cMsg += '| '+aRegsExc[nAtual][1]+' | '
cMsg += ''+aRegsExc[nAtual][2]+' | '
cMsg += '
'
Next
cMsg += '
'
cMsg += ''
cMsg += '
'
EndIf
cMsg += ''
u_EnviarEmail(cEmAlter, "[Estrutura] Alteração de Produto", cMsg)
//Exclusão
ElseIf nOperacao == 5
cMsg := "Produto excluído na Estrutura - "+cProduto+".
"+cMsg
u_EnviarEmail(cEmExclu, "[Estrutura] Exclusão de Produto", cMsg)
EndIf
RestArea(aArea)
Return
Observações:
– Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
– Se tiver sugestões de rotinas, pode entrar em contato;
Links:
– Pesquisa no TDN
Relacionado