Prezado/Prezada,
eu tenho um dataset e tenho um código ADVPL. É um serviço REST. O serviço, pelo teste, funciona 100%.
Quando vou fazer uma alteração de um registro na tabela SPC010, funciona tudo 100%.
Mas, eu preciso alterar outro registro na tabela SPC020, coisa que não estou sabendo fazer.
Seria no Dastaset ou no ADVPL do Protheus a montagem da SQL passar a ser SPC020?
Pensei até que eu deveria trocar a Company no dataset de ‘companyId: 1 + ‘’,’ para ’ companyId: 2 + ‘’,', mas não deu certo.
Abaixo, o Dataset está assim (ignore o parâmetro ‘sufixo’, foi só um teste, não está sendo usado para nada):
function createDataset(fields, constraints, sortFields) {
//========================================================================================HOMOLOGAÇÃO
//ds_ucrg_rest_horaextra
let operacao ='-1';
let rejeitar ='-1';
let escritorio = '-1';
if(constraints !== null){
for (var i = 0; i < constraints.length; i++) {
if (constraints[i].fieldName == "OPERACAO") {
operacao = constraints[i].initialValue;
}//if constraints ==
if (constraints[i].fieldName == "REJEITAR") {
rejeitar= constraints[i].initialValue;
}//if constraints ==
if (constraints[i].fieldName == "ESCRITORIO") {
escritorio = constraints[i].initialValue;
}//if constraints ==
}//for
}//if constraints !==
var dataset = DatasetBuilder.newDataset();
dataset.addColumn('Retorno_get');
let matricula = fields[0];
let dataHE = fields[1];//YYYYMMDD
let qtd = fields[2];
let codigo = fields[3];
var clientService = fluigAPI.getAuthorizeClientService();
let data = "";
let varEndpoint = "";
if(operacao=="1"){
//Seleciona um funcionário faz um PUT para rejeitar (ou, eventualmente, aprovar) HE
//Rejeita = 1, põe 200 no campo PC_PDI; Rejeita = 0, põe ' ' no campo PC_PDI lá no código da API REST
//matricula = '999999';
let sufixo = '010';
if (escritorio=='2') sufixo ='020';
varEndpoint = '/api/crm/v1/HoraExtraTratamento/AlteraRegistro?Matricula='+matricula+'&DataHE='+dataHE+'&Quantidade='+qtd+'&Codigo='+codigo+'&Rejeita='+rejeitar+'&Sufixo='+sufixo;
data = {
companyId: 1 + '',
serviceCode: 'REST_PROTHEUS_HOMO',
endpoint: varEndpoint,
method: 'PUT',
timeoutService: '100',
}
}//operacao 1
if(operacao=="2"){
//pega um funcionário
varEndpoint = '/api/crm/v1/HoraExtraTratamento/UmRegistro?Matricula='+matricula+'&DataHE='+dataHE+'&Quantidade='+qtd+'&Codigo='+codigo;
data = {
companyId: 1 + '',
serviceCode: 'REST_PROTHEUS_HOMO',
endpoint: varEndpoint,
method: 'get',
timeoutService: '100'
}
}//operacao 2
log.info("ds_ucrg_dataset_lixao "+varEndpoint);
//A API que fiz,...
//...todos os parâmetros são passados no PATH, não usando a seção 'params'
/*
data = {
companyId: 1 + '',
serviceCode: 'REST_PROTHEUS_HOMO',
endpoint: '/api/crm/v1/HoraExtraTratamento/UmRegistro?Matricula=113457&DataHE=20260518&Quantidade=1&Codigo=101',
method: 'get',
timeoutService: '100'
}
/
/
data = {
companyId: 1 + '',
serviceCode: 'REST_PROTHEUS_HOMO',
endpoint: '/api/crm/v1/HoraExtraTratamento/Todos',
method: 'get',
timeoutService: '100'
}
*/
var vo = clientService.invoke(JSON.stringify(data));
if (vo.getResult() == null || vo.getResult().isEmpty()) {
dataset.addRow(new Array("Retorno esta vazio"))
} else {
dataset.addRow(new Array(vo.getResult()))
}
return dataset;
}//createDataset
e o código ADVPL está assim:
WSMETHOD PUT AlteraRegistro WSRECEIVE Matricula,DataHE,Quantidade,Codigo,Rejeita,Sufixo WSSERVICE HoraExtraTratamento
//Parâmetro Rejeita = 1, põe 200 no campo PC_PDI; Rejeita = 0, põe ' ' no mesmo campo
Local lRet := .T.
Local jResponse := JsonObject():New()
Local aRegistros := {}
Local jLinha
Local cAliasFor
Local cSql := ""
Local nRec := 0
Local lRejeita := .T.
if ::Rejeita == '0'
lRejeita := .F.
endif
cAliasFor := GetNextAlias() //CRIA ALIAS TEMPORARIO
//TEXTO QUERY
cSql :=" Select \* "+ENTER
cSql +=" FROM " + RetSQLName("SPC")+" "+ENTER
//cSql +=" FROM SPC" +::Sufixo+" "+ENTER
cSql +=" Where PC_FILIAL = '" + xFilial("SPC") + "'"+ENTER
cSql +=" AND D_E_L_E_T\_ = ' ' "+ENTER
cSql +=" AND PC_MAT = '"+::Matricula+"' "+ENTER
cSql +=" AND PC_DATA = '"+::DataHE+"' "+ENTER
cSql +=" AND PC_QUANTC = '"+::Quantidade+"' "+ENTER
cSql +=" AND PC_PD = '"+::Codigo+"' "
MemoWrite("sqlUpdate.txt",cSql)
//TRATAMENTO ADEQUACAO QUERY
cSql := ChangeQuery(cSql)
//CRIA TABELA TEMPORARIA
dbUseArea( .T.,"TOPCONN", TCGENQRY(,,cSql),(cAliasFor), .F., .T.)
//CONTA QUANTIDADE REGISTROS
Count To nRec
MemoWrite("contador.txt",cValToChar(nRec))
If nRec == 0
jLinha := JsonObject():New()
jLinha\['erro'\] := "Não encontrou o registro"
DbSelectArea(cAliasFor)
dbCloseArea()
::SetContentType("application/json")
::SetResponse(EncodeUTF8(jLinha:toJSON()))
Return
EndIf
//ABRE TABELA TEMPORARIA
DbSelectArea(cAliasFor)
DbGoTop()
DbSelectArea("SPC")
DbGoto((cAliasFor)->R_E_C_N_O\_)
RecLock("SPC",.F.)
if lRejeita
//está rejeitando a HE da pessoa
SPC->PC_PDI := '200'
else
//está modificando a rejeitação para aprovada
SPC->PC_PDI := ' '
endif
msUnlock()
jLinha := JsonObject():New()
jLinha\['matricula'\] := (cAliasFor)->PC_MAT
jLinha\['codigo'\] := (cAliasFor)->PC_PD
jLinha\['recno'\] := (cAliasFor)->R_E_C_N_O\_
AAdd(aRegistros, jLinha)
//FECHA A TABELA TEMPORARIA
DbSelectArea(cAliasFor)
dbCloseArea()
DbSelectArea("SPC")
dbCloseArea()
jResponse\['dados'\] := aRegistros
::SetContentType("application/json")
::SetResponse(EncodeUTF8(jResponse:toJSON()))
return lRet