Datasul (TOTVS)
O TOTVS Datasul roda sobre Progress OpenEdge (4GL). O cadastro de funcionários fica em procedures do módulo de RH (hr), sem API REST nativa — a integração passa por uma REST Bridge (serviço intermediário que expõe procedures Progress como endpoints HTTP).
Arquitetura
VELIX ──HTTP──► REST Bridge ──AppServer (4GL)──► Datasul (Progress DB)
A REST Bridge normalmente já existe em clientes Datasul maduros (usada também para outras integrações, como EDI). Se não existir, ela precisa ser provisionada pelo time de TI do cliente ou por um parceiro TOTVS — a Velix não acessa o AppServer Progress diretamente.
Endpoint típico da REST Bridge
GET /datasul-rest/resources/prg/hr/funcionario?empresa=1&situacao=A
Retorno esperado (JSON, mapeado pela Bridge a partir dos campos Progress):
{
"items": [
{ "codEmpresa": "1", "matricula": "00123", "nome": "João Silva", "cpf": "00000000000", "situacao": "A" }
]
}
Mapeamento de campos
| Campo Datasul (Progress) | Campo VELIX (Person) |
|---|---|
codEmpresa + matricula (concatenados) | externalId |
nome | name |
cpf | document |
situacao = 'A' | active: true |
externalId recomendado: ${codEmpresa}-${matricula}.
Exemplo — Java
import com.velix.sdk.VelixClient;
import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
public class DatasulSync {
public static void run() throws Exception {
var velix = VelixClient.builder()
.apiUrl(System.getenv("VELIX_API_URL"))
.apiKey(System.getenv("VELIX_API_KEY"))
.build();
var http = new OkHttpClient();
var mapper = new ObjectMapper();
var req = new Request.Builder()
.url(System.getenv("DATASUL_BRIDGE_URL") + "/datasul-rest/resources/prg/hr/funcionario?empresa=1&situacao=A")
.header("Authorization", "Bearer " + System.getenv("DATASUL_BRIDGE_TOKEN"))
.build();
try (Response res = http.newCall(req).execute()) {
var body = mapper.readTree(res.body().string());
for (var item : body.get("items")) {
String externalId = item.get("codEmpresa").asText() + "-" + item.get("matricula").asText();
velix.persons().upsert(externalId, item.get("nome").asText(), item.get("cpf").asText());
}
}
}
}
Observações
- Diferente de RM e Senior, o Datasul não expõe webhook de admissão/demissão de fábrica — a sincronização precisa ser feita via polling periódico (recomendado: a cada 30–60 minutos, fora do horário de batch noturno do Datasul).
- Confirme com o time de TI do cliente qual variante de REST Bridge está em uso (TOTVS oferece mais de uma solução conforme a versão do Datasul) antes de assumir o contrato de resposta acima — ele pode variar entre instalações.