diff --git a/src/abap/JSONToAbapXml.ts b/src/abap/JSONToAbapXml.ts new file mode 100644 index 0000000..fdb52f7 --- /dev/null +++ b/src/abap/JSONToAbapXml.ts @@ -0,0 +1,16 @@ +export function JSON2AbapXML(original: any, root: string = "DATA") { + //only flat objects for now, might extend later... + let inner = "" + for (const key of Object.keys(original)) + if (original[key]) + inner = `${inner}\n<${key}>${original[key] || ""}` + else inner = `${inner}\n<${key}/>` + + return ` + + <${root}> + ${inner} + + +` +} diff --git a/src/adt/AdtConnection.ts b/src/adt/AdtConnection.ts index 723cb62..96bf4b0 100644 --- a/src/adt/AdtConnection.ts +++ b/src/adt/AdtConnection.ts @@ -94,7 +94,12 @@ export class AdtConnection { }) }) } - + createUri(path: string, query: string = "") { + return Uri.parse("adt://" + this.name).with({ + path, + query + }) + } connect(): Promise { return this.myrequest("/sap/bc/adt/compatibility/graph").then( (response: request.Response) => { diff --git a/src/adt/AdtServer.ts b/src/adt/AdtServer.ts index c4fb777..a8bb607 100644 --- a/src/adt/AdtServer.ts +++ b/src/adt/AdtServer.ts @@ -4,6 +4,7 @@ import { MetaFolder } from "../fs/MetaFolder" import { AbapObjectNode, AbapNode, isAbap } from "../fs/AbapNode" import { AbapObject, TransportStatus } from "../abap/AbapObject" import { getRemoteList } from "../config" +import { JSON2AbapXML } from "../abap/JSONToAbapXml" export const ADTBASEURL = "/sap/bc/adt/repository/nodestructure" // visual studio paths are hierarchic, adt ones aren't @@ -57,8 +58,17 @@ export class AdtServer { const conn = await this.connectionP await file.abapObject.lock(conn) - if (file.abapObject.transport === TransportStatus.REQUIRED) + if (file.abapObject.transport === TransportStatus.REQUIRED) { + const response = await conn.request( + conn.createUri("/sap/bc/adt/cts/transportchecks"), + "POST", + { + body: JSON2AbapXML({ URI: file.abapObject.getContentsUri(conn).path }) + } + ) + console.log(response.body) throw new Error("transport selection not supported(yet)") + } await file.abapObject.setContents(conn, content)