navidev-adt-api
Version:
API de conexión al Abap Developer Tools
105 lines (104 loc) • 5.95 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Result_1 = require("../shared/core/Result");
const abapObjectConstants_1 = require("./abapObjectConstants");
const xmlParser_1 = __importDefault(require("../shared/utilities/parser/xmlParser"));
const extractData_1 = __importDefault(require("./extractData"));
class AbapObjectActivateApp {
constructor(connectionController) {
this.connectionController = connectionController;
}
/**
* Activa el contenido de un objeto (codigo fuente principal, macros, etc..) la clase.
* @param objectUri URL del objeto
* @param objectName Nombre de la clase
* @returns Resultado del proceso de la activación. Si va todo bien no devuelve nada
*/
activate(objectUri, objectName) {
return __awaiter(this, void 0, void 0, function* () {
// La primera llamada sirve para activar directamente aunque puede devolver lo siguiente:
// 1) Errores en la activacion, muy similares cuando se hace el la validación con CheckRunApp, esto significa que son objetos
// que no tienen dependencias en la activación (como un report sin includes)
// 2) Objetos inactivos. En el caso de clases devuelve los objetos que se tienen que activar usando la misma URL pero con el
// preauditRequest=false y en el body pasandole los objetos.
const response = yield this.connectionController.request(abapObjectConstants_1.OBJECT_URL.ACTIVATE, {
method: "POST",
body: `<?xml version="1.0" encoding="UTF-8"?><adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core"><adtcore:objectReference adtcore:uri="${objectUri}" adtcore:name="${objectName}"/></adtcore:objectReferences>`,
qs: { method: "activate", preauditRequested: true },
});
if (response.isSuccess) {
let httpResponse = response.getValue();
const bodyParse = xmlParser_1.default.fullParse(httpResponse.body);
// Si tiene esta entrada es que hay que activar las distintas partes asociadas al objeto
if ("ioc:inactiveObjects" in bodyParse)
return this.activeInactiveObjects(bodyParse);
// Si tiene esta entrada es que hay errores de sintaxis, o cualquier otro mensaje relevante, en el objeto
if ("chkl:messages" in bodyParse)
return Result_1.Result.ok({ messages: this.extractMessages(bodyParse) });
return Result_1.Result.ok({});
}
else {
return Result_1.Result.fail(response.getErrorValue());
}
});
}
/**
* Activación de objetos inactivos
* @param inactiveObjects Array con objetos inactivos
* @returns Resultado del proceso de activacion.
*/
activeInactiveObjects(bodyParse) {
return __awaiter(this, void 0, void 0, function* () {
let body = `<?xml version="1.0" encoding="UTF-8"?><adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core">\n`;
xmlParser_1.default.nodeArray(bodyParse["ioc:inactiveObjects"]["ioc:entry"]).forEach((rowInactive) => {
body += `<adtcore:objectReference adtcore:uri="${rowInactive["ioc:object"]["ioc:ref"]["@_adtcore:uri"]}" adtcore:type="${rowInactive["ioc:object"]["ioc:ref"]["@_adtcore:type"]}" adtcore:name="${rowInactive["ioc:object"]["ioc:ref"]["@_adtcore:name"]}" adtcore:packageName="${rowInactive["ioc:object"]["ioc:ref"]["@_adtcore:packageName"]}"/>\n`;
});
body += `</adtcore:objectReferences>\n`;
const response = yield this.connectionController.request(abapObjectConstants_1.OBJECT_URL.ACTIVATE, {
method: "POST",
body: `${body}`,
qs: { method: "activate", preauditRequested: false },
});
if (response.isSuccess) {
let httpResponse = response.getValue();
const bodyParse = xmlParser_1.default.fullParse(httpResponse.body);
if ("chkl:messages" in bodyParse)
return Result_1.Result.ok({ messages: this.extractMessages(bodyParse) });
return Result_1.Result.ok({});
}
else {
return Result_1.Result.fail(response.getErrorValue());
}
});
}
/**
* Extrae los mensaje que vienen el cuerpo ya parseado
* @param bodyParse
* @returns Array con los mensajes
*/
extractMessages(bodyParse) {
return xmlParser_1.default.nodeArray(bodyParse["chkl:messages"]).map((rowMsg) => {
let sourceUriPos = extractData_1.default.extractSourcePositionBlockElement(rowMsg.msg["@_href"]);
return {
pos: sourceUriPos.start,
sourceUri: sourceUriPos.source,
quickFix: false,
shortText: rowMsg.msg.shortText.txt,
type: rowMsg.msg["@_type"],
};
});
}
}
exports.default = AbapObjectActivateApp;