Exemplo de rotina automática - TeleAtendimento
Exemplo de como criar e utilizar uma rotina automática para inclusão/alteração de chamados no TeleAtendimento.Neste exemplo, utilizaremos o Service Desk para criar um novo chamado.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "TBICONN.CH"
/*/
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
±±ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿±±
±±³Fun‡„o |MyTmka503A³ Autor ³ Vendas Cliente ³ Data ³18/12/07 ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄ´±±
±±³Descri‡„o ³ Funcao de execucao por entrada automatica ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Retorno ³ .T. ³±±
±±ÃÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´±±
±±³Uso ³ SSIM ³±±
±±ÀÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ±±
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
/*/
User Function MyTmka503A()
Local aCabec := {}
Local aItens := {}
Local aLinha := {}
Local nX := 0
Local nY := 0
Local lOk := .T.
Local cCod := ""
Local nCalls := 0
Local codChama := ""
PRIVATE lMsErroAuto := .F.
ConOut(Repl("-",80))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Abertura do ambiente |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
ConOut(Repl("-",80))
PREPARE ENVIRONMENT EMPRESA "01" FILIAL "01" MODULO "TMK" TABLES "ADE","ADF","SB1","SA1","SU5","SUH","SU9","SUQ","SU7","SU0"
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Verificacao do ambiente para teste |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
dbSelectArea("SB1")
dbSetOrder(1)
If !SB1->(dbSeek(xFilial("SB1")+"001"))
lOk := .F.
ConOut("Cadastrar produto: 001")
EndIf
dbSelectArea("SA1")
dbSetOrder(1)
If !SA1->(dbSeek(xFilial("SA1")+"00000101"))
lOk := .F.
ConOut("Cadastrar cliente: 00000101")
EndIf
dbSelectArea("SU5")
dbSetOrder(1)
If !SU5->(dbSeek(xFilial("SU5")+"000001"))
lOk := .F.
ConOut("Cadastrar contato (SU5): 000001")
EndIf
dbSelectArea("SUH")
dbSetOrder(1)
If !SUH->(dbSeek(xFilial("SUH")+"000001"))
lOk := .F.
ConOut("Cadastrar midia (SUH): 000001")
EndIf
dbSelectArea("SU9")
dbSetOrder(2)
If !SU9->(dbSeek(xFilial("SU9")+"000001"))
lOk := .F.
ConOut("Cadastrar ocorrencia (SU9): 000001")
EndIf
dbSelectArea("SUQ")
dbSetOrder(1)
If !SUQ->(dbSeek(xFilial("SUQ")+"000002"))
lOk := .F.
ConOut("Cadastrar Acao p/ ocorr. (SUQ): 000002")
EndIf
dbSelectArea("SU7")
dbSetOrder(1)
If !SU7->(dbSeek(xFilial("SU7")+"000001"))
lOk := .F.
ConOut("Cadastrar operador (SU7): 000001")
EndIf
dbSelectArea("SU0")
dbSetOrder(1)
If !SU0->(dbSeek(xFilial("SU0")+"01"))
lOk := .F.
ConOut("Cadastrar grupo de atendimento (SU0): 01")
EndIf
If lOk
For nCalls := 1 To 2//10
Conout("Incluindo chamado = " + AllTrim(Str(nCalls)))
ConOut("Inicio Inclusao: "+Time())
For nY := 1 To 1
cCod := GetSxeNum("ADE","ADE_CODIGO")
RollBAckSx8()
aCabec := {}
aItens := {}
//aAdd(aCabec,{"ADE_CODIGO" ,cCod ,Nil})
aAdd(aCabec,{"ADE_DATA" ,dDataBase ,Nil})
aAdd(aCabec,{"ADE_HORA" ,Time() ,Nil})
aAdd(aCabec,{"ADE_CODSB1" ,SB1->B1_COD ,Nil})
aAdd(aCabec,{"ADE_CODCON" ,SU5->U5_CODCONT ,Nil})
aAdd(aCabec,{"ADE_ASSUNT" ,"000006" ,Nil})
aAdd(aCabec,{"ADE_SEVCOD" ,"2" ,Nil})
aAdd(aCabec,{"ADE_ENTIDA" ,"SA1" ,Nil})
aAdd(aCabec,{"ADE_CHAVE" ,SA1->A1_COD+SA1->A1_LOJA,Nil})
aAdd(aCabec,{"ADE_MIDIA" ,SUH->UH_MIDIA ,Nil})
aAdd(aCabec,{"ADE_STATUS" ,'1' ,Nil})
aAdd(aCabec,{"ADE_OPERAC" ,'2' ,Nil})
aAdd(aCabec,{"ADE_INCIDE" ,'Incluido automaticamente' ,Nil})
For nX := 1 To 2
aLinha := {}
aAdd(aLinha,{"ADF_ITEM" ,StrZero(nX,3) ,Nil})
aAdd(aLinha,{"ADF_CODSU9" ,SU9->U9_CODIGO ,Nil})
aAdd(aLinha,{"ADF_CODSUQ" ,SUQ->UQ_SOLUCAO ,Nil})
aAdd(aLinha,{"ADF_CODSU7" ,SU7->U7_COD ,Nil})
aAdd(aLinha,{"ADF_CODSU0" ,SU0->U0_CODIGO ,Nil})
aAdd(aLinha,{"ADF_OBS" ,'Incluido automaticamente' ,Nil})
aAdd(aCabec,{"ADF_DATA" ,dDataBase ,Nil})
aAdd(aCabec,{"ADF_HORA" ,Time() ,Nil})
aAdd(aItens,aLinha)
Next nX
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de Inclusao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
TMKA503A(aCabec,aItens,3, @codChama)
If !lMsErroAuto
ConOut("Chamado incluido com sucesso! Codigo=" + codChama)
Else
ConOut("Erro na inclusao do chamado!")
Mostraerro()
EndIf
Next nY
conout("Código original do Chamado: " + cCod)
conout("Código gravado no Chamado : " + ADE->ADE_CODIGO)
conout("Código retornado do chamado : " + codChama)
//cCod := ADE->ADE_CODIGO
cCod := codChama
ConOut("Fim Inclusao: "+Time())
ConOut(Repl("-",80))
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//| Teste de alteracao |
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCabec := {}
aItens := {}
aAdd(aCabec,{"ADE_CODIGO" ,cCod ,Nil})
aAdd(aCabec,{"ADE_DATA" ,dDataBase ,Nil})
aAdd(aCabec,{"ADE_HORA" ,Time() ,Nil})
aAdd(aCabec,{"ADE_CODSB1" ,SB1->B1_COD ,Nil})
aAdd(aCabec,{"ADE_CODCON" ,SU5->U5_CODCONT ,Nil})
aAdd(aCabec,{"ADE_ASSUNT" ,"000006" ,Nil})
aAdd(aCabec,{"ADE_SEVCOD" ,"2" ,Nil})
aAdd(aCabec,{"ADE_ENTIDA" ,"SA1" ,Nil})
aAdd(aCabec,{"ADE_CHAVE" ,SA1->A1_COD+SA1->A1_LOJA,Nil})
aAdd(aCabec,{"ADE_MIDIA" ,SUH->UH_MIDIA ,Nil})
aAdd(aCabec,{"ADE_STATUS" ,'2' ,Nil})
aAdd(aCabec,{"ADE_INCIDE" ,'Incluido automaticamente' ,Nil})
aAdd(aCabec,{"ADE_CODINC" ,"" ,Nil})
For nX := 1 To 3
aLinha := {}
/*If nX <= 2
aAdd(aLinha,{"LINPOS","ADF_ITEM",StrZero(nX,3)})
Else
aAdd(aLinha,{"ADF_ITEM" ,StrZero(nX,3) ,Nil})
EndIf*/
aAdd(aLinha,{"ADF_ITEM" ,StrZero(nX,3) ,Nil})
aAdd(aLinha,{"AUTDELETA","N",Nil})
If nX==3
aAdd(aLinha,{"ADF_CODSU9" ,SU9->U9_CODIGO ,Nil})
aAdd(aLinha,{"ADF_CODSUQ" ,SUQ->UQ_SOLUCAO ,Nil})
aAdd(aLinha,{"ADF_CODSU7" ,SU7->U7_COD ,Nil})
aAdd(aLinha,{"ADF_CODSU0" ,SU0->U0_CODIGO ,Nil})
aAdd(aLinha,{"ADF_OBS" ,'Alterado automat.',Nil})
aAdd(aLinha,{"ADF_DATA" ,dDataBase ,Nil})
aAdd(aLinha,{"ADF_HORA" ,Time() ,Nil})
aAdd(aLinha,{"ADF_REC_WT" ,0 ,Nil})
Else
aAdd(aLinha,{"LINPOS","ADF_ITEM",StrZero(nX,3)})
aAdd(aLinha,{"ADF_REC_WT" ,nX ,Nil})
EndIf
aAdd(aLinha,{"ADF_OBS" ,'Alterado automat.',Nil})
/*If nX <= 2
aAdd(aLinha,{"ADF_REC_WT" ,001 ,Nil})
aAdd(aLinha,{"ADF_ALIAS_WT" ,"ADE" ,Nil})
EndIF*/
aAdd(aLinha,{"ADF_ALIAS_WT" ,"ADF" ,Nil})
aadd(aItens,aLinha)
Next nX
ConOut(PadC("Exemplo de alteracao",80))
ConOut("Inicio Alteracao: "+Time())
//TMKA503A(aCabec,aItens,4)
codChama := ""
//MSExecAuto({|x,y,z,f|TMKA503A(x,y,z,@f)},aCabec,aItens,4, @codChama)
TMKA503A(aCabec,aItens,4, @codChama)
If !lMsErroAuto
ConOut("Chamado " +cCod+ " alterado com sucesso!")
conout("Código retornado do chamado : " + codChama)
Else
ConOut("Erro na alteracao do chamado!")
DisarmTransaction()
Mostraerro()
EndIf
ConOut("Fim Alteracao: "+Time())
ConOut(Repl("-",80))
Next
EndIf
RESET ENVIRONMENT
Return .T.