UNPKG

navidev-adt-api

Version:

API de conexión al Abap Developer Tools

105 lines (104 loc) 5.95 kB
"use strict"; 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;