Versões comparadas

Chave

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

...

Nota
titleVersão

 Disponível à partir da versão 12.1.6 da linha RM.

...

Serviço

Todos os dataserver's do RM poderão ser acessados via RESTful através

...

do serviço RMSRestDataServer, sendo esse publicado automaticamente no endereço http://

...

<servidor>:8051/RMSRestDataServer/getAvailableServices e os dados são transmitido no formato json. Por padrão esse serviço é publicado com suporte à CORS, o que permite que as páginas e o serviço em si sejam publicados em servidores diferente.

Os métodos disponibilizados pelo serviço são:

MétodoURL
Endpoint
Verbo
NomeDescrição
GET/getavailableservices?name={name}&start={start}&limit={limit}
GET
GetAvailableServicesLista de todos os serviços REST dos RMSDataServer's.
GET/service/{serviceName}/schema
GET
GetExternalGrammarLista o schema dos dados retornados pelo serviço.

GET

/service/{serviceName}
GET
GetWADLLista o WADL do serviço.
GET/rest/{dataServerName}/{id}
POST
Get
Cria um registro utilizando o
Retorna o registro do dataserver especificado.
GET/rest/{dataServerName}?start={start}&limit={limit}&filter={filter}GetAllRetorna lista os registros do dataserver especificado.
POST/rest/{
id
dataServerName}
DELETE
Create
Remove
Cria um registro utilizando o dataserver especificado.
DELETE/rest/{dataServerName}/{id}
GETRetorna o registro do
DeleteRemove um registro utilizando o dataserver especificado.
PUT/rest/{dataServerName}
?start={start}&limit={limit}&search={search}
/{id}Update

Atualiza o registro

GETRetorna lista os registros

do dataserver especificado.

PATCH/rest/{dataServerName}/{id}
PUT 
Sem Formato
PUBLISH MODEL REST NAME <nome_rest_model>

 No campo <nome_rest_model> informar o identificador do Model que será utilizado no endereço de chamada do REST, como no exemplo utilizando o cadastro de clientes abaixo:

Bloco de código
linenumberstrue
#INCLUDE "FWMVCDEF.CH"

PUBLISH MODEL REST NAME customer

Static Function Modeldef()
Local oModel     := Nil

oModel:= MPFormModel():New("MATA030",/*Pre-Validacao*/, /*Pos-Validacao*/, /*Commit*/,/*Cancel*/)
oModel:AddFields("MATA030_SA1", Nil , FWFormStruct(1,"SA1"),/*Pre-Validacao*/,/*Pos-Validacao*/,/*Carga*/)
Return(oModel)

 Nesse exemplo, baseado no exemplo de Appserver.ini , o endereço para chamada REST do Model será http://localhost:8084/html-protheus/rest/fwhtmlmodel/customer, sendo os métodos HTTP disponíveis:

MétodoQueryparamPathparamDescriçãoExemplo da URL 
GET

start (inicio da listagem)

limit (quantidade de linhas, valor padrão 10) 

 retorno de listagem do ModelRetornhttp://localhost:8084/hmlt-protheus/rest/fwhtmlmodel/customer?start=1&limit=50
GET id (Recno da linha da tabela)retorno dos dados do Modelhttp://localhost:8084/hmlt-protheus/rest/fwhtmlmodel/customer/6
POST id (Recno da linha da tabela)

inclusão do Model

http://localhost:8084/hmlt-protheus/rest/fwhtmlmodel/customer/6
PUT id (Recno da linha da tabela)atualização do Model http://localhost:8084/hmlt-protheus/rest/fwhtmlmodel/customer/6
 DELETE id (Recno da linha da tabela)exclusção do Model http://localhost:8084/hmlt-protheus/rest/fwhtmlmodel/customer/6
Informações

 O JSON de retorno dos métodos possui a propriedade id que contém o Recno da linha tabela, além dos campos do Model

 

 Exemplo de retorno:

Sem Formato
 {
  "data": {
    "A1_ABATIMP": "",
    "A1_ABICS": "",
    "A1_AGREG": "",
    "A1_ALIFIXA": "",
    "A1_ALIQIR": 0,
    "A1_ATIVIDA": "",
    "A1_ATR": 0,
    "A1_B2B": "",
    "A1_BAIRRO": ".",
    "A1_BAIRROC": "",
    "A1_BAIRROE": "",
    "A1_BCO1": "",
    "A1_BCO2": "",
    "A1_BCO3": "",
    "A1_BCO4": "",
    "A1_BCO5": "",
    "A1_CALCSUF": "",
    "A1_CARGO1": "",
    "A1_CARGO2": "",
    "A1_CARGO3": "",
    "A1_CBO": "",
    "A1_CDRDES": "",
    "A1_CEINSS": "",
    "A1_CEP": "",
    "A1_CEPC": "",
    "A1_CEPE": "",
    "A1_CGC": "",
    "A1_CHQDEVO": 0,
    "A1_CHVCAM": "",
    "A1_CLASSE": "",
    "A1_CLASVEN": "",
    "A1_CLICNV": "",
    "A1_CLIFAT": "",
    "A1_CLIPRI": "",
    "A1_CNAE": "",
    "A1_COD": "000001",
    "A1_COD_MUN": "",
    "A1_CODAGE": "",
    "A1_CODFID": "",
    "A1_CODFOR": "",
    "A1_CODMARC": "",
    "A1_CODMUN": "",
    "A1_CODMUNE": "",
    "A1_CODPAIS": "",
    "A1_CODSIAF": "",
    "A1_COMAGE": 0,
    "A1_COMIS": 0,
    "A1_COMPLEM": "",
    "A1_COND": "",
    "A1_CONDPAG": "",
    "A1_CONTA": "",
    "A1_CONTAB": "",
    "A1_CONTATO": "",
    "A1_CONTRIB": "",
    "A1_CRDMA": "",
    "A1_CTARE": "",
    "A1_CXPOSTA": "",
    "A1_DDD": "",
    "A1_DDI": "",
    "A1_DESC": 0,
    "A1_DESCAM": "",
    "A1_DESCPAG": "",
    "A1_DEST_1": "",
    "A1_DEST_2": "",
    "A1_DEST_3": "",
    "A1_DIASPAG": 0,
    "A1_DSATIV1": "",
    "A1_DSATIV2": "",
    "A1_DSATIV3": "",
    "A1_DSATIV4": "",
    "A1_DSATIV5": "",
    "A1_DSATIV6": "",
    "A1_DSATIV7": "",
    "A1_DSATIV8": "",
    "A1_DSCREG": "",
    "A1_EMAIL": "",
    "A1_END": ".",
    "A1_ENDCOB": "",
    "A1_ENDENT": "",
    "A1_ENDNOT": "",
    "A1_ENDREC": "",
    "A1_ENTID": "",
    "A1_ENTORI": "",
    "A1_EST": "SP",
    "A1_ESTADO": "",
    "A1_ESTC": "",
    "A1_ESTE": "",
    "A1_FAX": "",
    "A1_FILDEB": "",
    "A1_FILIAL": "D MG",
    "A1_FILTRF": "",
    "A1_FOMEZER": "",
    "A1_FORMVIS": "",
    "A1_FRETISS": "",
    "A1_GRPTRIB": "",
    "A1_GRPVEN": "",
    "A1_HPAGE": "",
    "A1_HRCAD": "",
    "A1_HREXPO": "",
    "A1_HRTRANS": "",
    "A1_IBGE": "",
    "A1_IDESTN": "",
    "A1_IENCONT": "",
    "A1_IMGUMOV": "",
    "A1_INCISS": "",
    "A1_INCULT": "",
    "A1_INDRET": "",
    "A1_INOVAUT": "",
    "A1_INSCR": "",
    "A1_INSCRM": "",
    "A1_INSCRUR": "",
    "A1_IRBAX": "",
    "A1_LC": 0,
    "A1_LCFIN": 0,
    "A1_LOJA": "01",
    "A1_LOJPRI": "",
    "A1_MAIDUPL": 500,
    "A1_MATR": 0,
    "A1_MCOMPRA": 1500,
    "A1_MENSAGE": "",
    "A1_METR": 0,
    "A1_MINIRF": "",
    "A1_MOEDALC": 0,
    "A1_MSALDO": 1500,
    "A1_MSBLQL": "",
    "A1_MSEXP": "",
    "A1_MUN": ".",
    "A1_MUNC": "",
    "A1_MUNE": "",
    "A1_NATUREZ": "",
    "A1_NIF": "",
    "A1_NOME": "CLIENTE PADRAO P/ ORCAMENTO",
    "A1_NREDUZ": "ORCAMENTO",
    "A1_NROCOM": 3,
    "A1_NROPAG": 0,
    "A1_NVESTN": 0,
    "A1_OBS": "",
    "A1_OBSERV": "",
    "A1_ORIGCT": "",
    "A1_OUTRMUN": "",
    "A1_PAGATR": 0,
    "A1_PAIS": "",
    "A1_PAISDES": "",
    "A1_PERCATM": 0,
    "A1_PERFECP": 0,
    "A1_PERFIL": 0,
    "A1_PESSOA": "",
    "A1_PFISICA": "",
    "A1_PRF_OBS": "",
    "A1_PRIOR": "",
    "A1_PRSTSER": "",
    "A1_RECCOFI": "",
    "A1_RECCSLL": "",
    "A1_RECFET": "",
    "A1_RECINSS": "",
    "A1_RECIRRF": "",
    "A1_RECISS": "",
    "A1_RECPIS": "",
    "A1_REGDES": "",
    "A1_REGESIM": "",
    "A1_REGIAO": "",
    "A1_REGPB": "",
    "A1_RESFAT": "",
    "A1_RFABOV": "",
    "A1_RFACS": "",
    "A1_RG": "",
    "A1_RISCO": "",
    "A1_RTEC": "",
    "A1_SALDUP": 3000,
    "A1_SALDUPM": 1500,
    "A1_SALFIN": 0,
    "A1_SALFINM": 0,
    "A1_SALPED": 0,
    "A1_SALPEDL": 0,
    "A1_SATIV1": "",
    "A1_SATIV2": "",
    "A1_SATIV3": "",
    "A1_SATIV4": "",
    "A1_SATIV5": "",
    "A1_SATIV6": "",
    "A1_SATIV7": "",
    "A1_SATIV8": "",
    "A1_SIMPLES": "",
    "A1_SIMPNAC": "",
    "A1_SUBCOD": "",
    "A1_SUFRAMA": "",
    "A1_SUPER": "",
    "A1_TABELA": "",
    "A1_TDA": "",
    "A1_TEL": "",
    "A1_TELEX": "",
    "A1_TEMVIS": 0,
    "A1_TIMEKEE": "",
    "A1_TIPCLI": "",
    "A1_TIPO": "R",
    "A1_TIPOCLI": "",
    "A1_TIPPER": "",
    "A1_TIPPRFL": "",
    "A1_TITPROT": 0,
    "A1_TMPSTD": "",
    "A1_TMPVIS": "",
    "A1_TPCAMP": "",
    "A1_TPDP": "",
    "A1_TPESSOA": "",
    "A1_TPFRET": "",
    "A1_TPISSRS": "",
    "A1_TPJ": "",
    "A1_TPNFSE": "",
    "A1_TRANSF": "",
    "A1_TRANSP": "",
    "A1_TRIBFAV": "",
    "A1_UNIDVEN": "",
    "A1_USADDA": "",
    "A1_VACUM": 1500,
    "A1_VEND": "",
    "A1_VINCULO": "",
    "A1_VM_MARC": "",
    "A1_VM_OBS": "",
    "id": 6
  },
  "length": 0,
  "messages": []
}

 

 

Update PartialAtualiza parcialmente o registro do dataserver especificado.


Obs.: Para utilizar dataserver de metadados, é necessário informar o nome da tabela no JSON. veja um exemplo no método Post (Create) acima.

Segurança por perfil

Todos os dataserver's do RM estão protegidos quando o acesso se dá via RMSRestDataServer. Para que a segurança seja ativada, é necessário que os DataServers sejam decorados com o atributo RMSServerSecurityInfo. Este atributo tem a mesma função que o atributo ActionInfo. Portanto, o módulo e o securityId informados devem ser iguais aos informados nas actions. Caso o atributo não seja encontrado, o acesso ao dataserver será negado.

Para cada DataServer, deve-se definir um ou mais atributos com os devidos parâmetros. Exemplo:

Expandir
titleRMSServerSecurityInfo

Image AddedImage Added

Serialização das tabelas

vários DataSets incluem tabelas que não fazem parte da definição da entidade que o mesmo representa. Isso gera um erro ao realizar as operações do CRUD através do RMSRestDataServer. Para contornar esse problema, foram adicionadas as propriedade Master e Detail no enumerador TabProps. Essas propriedade devem ser utilizadas para marcar quais tabelas do DataSet serão serializadas. Exemplo:

Seja DS um dataset contém as tabelas A, B e C, sendo que a tabela A tem um relacionamento com a tabela B e a tabela C não faz parte da entidade que o dataset representa (somente dados de controle). Para que o serviço RMSRestDataServer funcione corretamente, a propriedade TabProps.Master deve ser adicionada à tabela A e a propriedade TabProps.Detail deve ser adicionada à tabela B.

Dessa forma somente as tabelas A e B serão serializadas, sendo a B um detalhe de A.

Atenção: Caso exista mais de uma tabela no DataSet marcada como “Master”, somente a primeira tabela, e suas filhas (caso existam), serão serializadas.

Bloco de código
languagec#
titleDataSetProps
DataProps.SetProps(gcoligada, TabProps.Caption, Properties.Resources.SGlbCaptionColigadas, TabProps.Id, "CODCOLIGADA;NOMEFANTASIA", TabProps.Master, true);

Filtros

Ao utilizar o parâmetro &filter={filter}, será possível utilizar qualquer campo (desde que seja da tabela Master).

Aviso

Não são aceitos nos filtros campos de tabelas Detail!

...