sexta-feira, 4 de julho de 2014

Web Service em ADVPL

Para se criar um WS (Webservice) em AdvPL, tem que utilizar a seguinte estrutura:

#INCLUDE 'TOTVS.CH'
//#INCLUDE 'TOTVSWEBSRV.CH'
#INCLUDE "APWEBSRV.CH"


WSSTRUCT StruCliente          
WSDATA CODIGO AS String    
WSDATA NOME                 AS String
WSDATA ENDERECO             AS String
ENDWSSTRUCT      

WSSERVICE SRVBUSCASA1
WSDATA CODIGO AS String
WSDATA DADOSCLIENTE AS StruCliente  //Quando defino uma variavel chamando uma WSSTRUCT, ela vira um objeto que guarda toda a estrutura
WSMETHOD BuscaCliSrv
ENDWSSERVICE  

WSMETHOD BuscaCliSrv WSRECEIVE CODIGO WSSEND DADOSCLIENTE WSSERVICE SRVBUSCASA1

DbSelectArea("SA1")
DbSetOrder(1)
SA1->(DbSeek(xFilial("SA1")+::CODIGO))

::DADOSCLIENTE:NOME := SA1->A1_NOME
::DADOSCLIENTE:ENDERECO := SA1->A1_END

Return .T.

MBROWSE COM ARQUIVOS TEMPORARIOS ADVPL

Muitas vezes, quando vamos criar uma MBrowse com arquivos temporário, gera erros, isso ocorre porque a recomendação é que ao criar um alias temporário para ser utilizado em mBrowse, Markbrow e outros browsers, devemos criar com estrutura, conforme o exemplo abaixo:


User Function mbrowtra()      

SetPrvt("CCADASTRO,AROTINA,CDELFUNC,ACAMPOS,_STRU")
SetPrvt("_NVAR,_CARQ,_CINDEX,_CCHAVE,")

cCadastro := "Cadastro Especifico"

ACAMPOS:={}
PRIVATE aRotina := { { "Pesquisar" ,  "AxPesqui"   , 0, 1 },;
                     { "Visualizar" ,  "axVisual"   , 0, 2 },;
                     { "Incluir"    , "axInclui" , 0, 3 },;
                     { "Alterar"    , "axAltera" , 0, 4 }}//,;
                     //{ "Excluir"   , "axExclui" , 0, 5 } }

cdelfunc:=".T."

_stru:={}
AADD(_stru,{"RB_FIL","C",2,0})
AADD(_stru,{"RB_VAR","C",10,0})
AADD(_stru,{"RB_DESCRIC","C",50,0})
AADD(_stru,{"RB_VALOR","N",14,2})
AADD(_stru,{"RB_OK","C",2,0})

_nvar:=1
_cArq:=Criatrab(_stru,.T.)
DBUSEAREA(.t.,,_carq,"TRB")
DBSELECTAREA("SX6")
DBGOTOP()
WHILE !EOF()
        DBSELECTAREA("TRB")
        RECLOCK("TRB",.T.)
        TRB->RB_FIL:=SX6->X6_FIL
        TRB->RB_VAR:=SX6->X6_VAR
        TRB->RB_DESCRIC:=SX6->X6_DESCRIC
        TRB->RB_valor  :=_nvar
        MSUNLOCK()
        _nvar:=_nvar+0.11
        DBSELECTAREA("SX6")
        DBSKIP()
ENDDO

_cIndex:=Criatrab(Nil,.F.)
_cChave:="RB_FIL+RB_VAR"
Indregua("TRB",_cIndex,_cchave,,,"Selecionando Registros...")
dBSETINDEX(_cIndex+ordbagext())

aCampos:={{"Filial "  ,"RB_FIL"     ,"C",2,0 ,"@!"},;
          {"Valor  "  ,"RB_VALOR" ,"N",14,2,"@E 999,999,999.99"},;
          {"Parametro","RB_VAR"   ,"C",10,0,"@!"},;
          {"Descricao","RB_DESCRIC" ,"C",50,0,"@!"}}


mBrowse( 6,1,22,75,"TRB",acampos)

DBCLOSEAREA("TRB")
FERASE(_carq+".DBF")
FERASE(_cindex+ordbagext())


Return