sps-sap-interface
v2.4.6
Published
Pacote de comunicação com o SAP
Downloads
59
Readme
SPS SAP INTERFACE
Serviço de comunicação de um servidor node com a service layer e execução de stored procedure ou execução de query através do Xsjs.
Batch
Para utilizar batch, envie a array operations com as operações a serem executadas, e a opção transaction se estas operações devem ser realizadas em uma transação.
"GET" não é suportado em transaction; retorna 500.
const responseArray = await ServiceLayer.executeBatch({
transaction: true,
operations: [
{
method: "POST",
url: "BusinessPartners",
data: {
CardCode: "c001",
CardName: "c001",
CardType: "C"
},
{
method: "POST",
url: "Items",
data: {
ItemCode: "12345",
ItemName: "Teste item"
}
]
});
console.log(responseArray);
A resposta é um array contendo:
[
{
httpCode: 204, // 400, 204, etc
httpStatus: "No Content", // "Bad Request", "Created", etc
contentId: 1, // só disponível quando usa transação, identifica cada retorno individual ### inicia em 1 ###
json: {...} // se houver retorno
},
{
httpCode: 204, // 400, 204, etc
httpStatus: "No Content", // "Bad Request", "Created", etc
contentId: 1, // só disponível quando usa transação, identifica cada retorno individual ### inicia em 1 ###
json: {...} // se houver retorno
},
...
]
Notas:
Quando há rollback em uma transação, somente é retornado o resultado da operação que causou o rollback. Quando não se usa transação, ou quando a transação é completa, o responseArray contém um elemento para cada operação.
A Service Layer suporta operações com e sem transação no mesmmo batch. Esta implementação somente suporta batches com todas operações em transação ou nenhuma.
O request de batch retorna 200 (Ok) mesmo que uma das operações tenha falhado; é necessário verificar o responseArray para cada httpCode individual!
DirectDb
Permite executar comandos e stored procedures diretamente no banco de dados sql e Hana;
Iniciando o serviço
Importar o módulo DirectDb e iniciar o serviço;
const { DirectDb } = require("sps-sap-interface");
await DirectDb.init({
server: "IP:30015",
database: "SBO_DATABASE",
databaseType: DirectDb.DATABASE_TYPES.HANA,
username: "username",
password: "password",
});
Caso a conexão seja do tipo HANA, o valor da propriedade server deve conter a porta do servidor hana (normalmente a porta 30015) junto do nome, caso contrário, basta informar o nome ou ip do servidor.
Queries
Usar sempre o placeholder {db} nos comandos.
Exemplo:
const response = await DirectDb.executeQuery(
`SELECT TOP 10 * FROM {db}.OITM WHERE "ItmsGrpCod" > ? AND "ItemName" LIKE ?`,
[1, "%A%"]
);
O módulo substituirá o placeholder {db} pelo schema se for HANA e removerá se for MSSQL
ATENÇAO
- Prefira sempre usar binding de variáveis (protege contra sql injection), isto substitui a lista de parâmetros nos "?", sem precisar se preocupar com o tipo do dado.
Stored Procedures
const response = await DirectDb.executeProcedure("SP_SPS_TESTSP", ["A%"]);
ATENÇÃO
- Nas SPs NÃO é necessário declarar o OUT REG;
Exemplo
HANA
const { DirectDb } = require("sps-sap-interface");
await DirectDb.init({
server: "192.168.0.1:30015",
database: "SBO_DEMO_HANA",
databaseType: DirectDb.DATABASE_TYPES.HANA,
username: "user01",
password: "1234",
});
const response = await DirectDb.executeProcedure("SP_SPS_TESTSP", ["A%"]);
console.log(response);
SQL
const { DirectDb } = require("sps-sap-interface");
await DirectDb.init({
server: "192.168.0.1",
database: "SBO_DEMO_SQL",
databaseType: DirectDb.DATABASE_TYPES.SQL,
username: "user1",
password: "5432",
});
const response = await DirectDb.executeProcedure("SP_SPS_TESTSP", ["A%"]);
console.log(response);