* update

* update setup

* update
This commit is contained in:
oblomov-dev 2024-10-03 22:44:53 +02:00 committed by GitHub
parent ae831d52a9
commit e86f1c66da
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 504 additions and 5 deletions

31
.github/workflows/build_bsp.yaml vendored Normal file
View File

@ -0,0 +1,31 @@
name: build_downport
on:
push:
branches: [main]
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 20
- run: cd ci/app2bsp & npm i
- run: node run.js
- run: npm run build_bsp
- name: send to bsp repository
uses: peaceiris/actions-gh-pages@v3
with:
external_repository: abap2UI5-downports/abap2UI5
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
publish_branch: main
publish_dir: ./output
deploy_key: ${{ secrets.ACTIONS_BSP_KEY }}
destination_dir: src/02

View File

@ -1,13 +1,13 @@
{
"configurations": {
"default": {
"filename": "./ci/abaplint.jsonc"
"filename": "./ci/abaplint/abaplint.jsonc"
},
"abap_standard_readiness": {
"filename": "./ci/abap_standard_check.jsonc"
"filename": "./ci/abaplint/abap_standard_check.jsonc"
},
"abap_cloud_readiness": {
"filename": "./ci/abap_cloud_check.jsonc"
"filename": "./ci/abaplint/abap_cloud_check.jsonc"
}
}
}

View File

@ -31,7 +31,7 @@
"undeploy": "cf undeploy z2ui5 --delete-services --delete-service-keys --delete-service-brokers",
"deploy-test": "npm run build && fiori deploy --config ui5-deploy.yaml --testMode true",
"build:cf": "ui5 build preload --clean-dest --config ui5-deploy.yaml --include-task=generateCachebusterInfo",
"transform": "node trans/trans2abap.js && abaplint --fix ./trans/abaplint.jsonc",
"transform": "node ../ci/app2string/trans2abap.js && abaplint --fix ../ci/app2string/abaplint.jsonc",
"build:mta": "rimraf resources mta_archives && mbt build"
},
"sapuxLayer": "CUSTOMER_BASE"

30
ci/app2bsp/README.md Normal file
View File

@ -0,0 +1,30 @@
## abap2UI5 - Connector SAP Fiori Launchpad
_Running into problems or found a bug? Create an issue [**here**](https://github.com/abap2UI5/abap2UI5/issues)_
#### Key Features
* **Launchpad Connector:** Host your abap2UI5 Apps on SAP Fiori Launchpad
* **User-Friendly:** Launch different apps simply by adjusting the start parameter "app_start"
* **Project Consistency:** All abap2UI5 apps can remain unchanged in your ABAP system
* **Compatibility:** Runs minimum with SAP Netweaver v.7.50 or S/4 2021 (Standard ABAP)
_Lower UI5 releases are not supported, but you can try the experimental branch [here.](https://github.com/abap2UI5-connectors/fiori-launchpad-connector-onpremise/tree/low_ui5_release)_
#### Functionality
<img width="700" alt="Screenshot 2024-06-02 at 16 05 28" src="https://github.com/abap2UI5/abap2UI5-connector_sap_fiori_launchpad/assets/102328295/7a66b131-0516-473d-a4ad-9468bdc5fdfb"><br>
___[Link](https://excalidraw.com/#json=n4Y2VdcMD32F0LvuJWs4-,NREoe051wicmP4XJfOSv5Q)___<br>
Install with [abapGit](https://abapgit.org) ![abapGit](https://docs.abapgit.org/img/favicon.png), and you will find a UI5 app (BSP Application) in your system. Add it multiple times to your launchpad and maintain different ABAP classes as starting parameters. Each tile will then call a different abap2UI5 app.
#### Preview
<img width="700" alt="image" src="https://github.com/abap2UI5/ext-fiori_launchpad_on_premise/assets/102328295/17c375e8-10cd-471e-83f8-d62ed27224e3">
#### Installation & Usage
[**(1) Installation & Configuration**](https://www.linkedin.com/pulse/copy-abap2ui5-host-your-apps-sap-fiori-launchpad-abap2ui5-ocn2e/) <br>
[**(2) Features: Title, Parameters, Navigation**](https://www.linkedin.com/pulse/abap2ui5-host-your-apps-sap-fiori-launchpad-23-features-abap2ui5-upche/) <br>
[**(3) Integration of KPIs**](https://www.linkedin.com/pulse/abap2ui5-host-your-apps-sap-fiori-launchpad-33-kpis-abap2ui5-uuxxe/) <br>
#### FAQ
* check out the [**documentation**](https://github.com/abap2UI5/abap2UI5-documentation) for installation & configuration guidelines
* your comments, questions, wishes and bugs are welcome, please create an [**issue**](https://github.com/abap2UI5/integration-fiori_launchpad_on_premise/issues)

13
ci/app2bsp/package-lock.json generated Normal file
View File

@ -0,0 +1,13 @@
{
"name": "fiori-launchpad-connector-onpremise",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "fiori-launchpad-connector-onpremise",
"version": "1.0.0",
"license": "MIT"
}
}
}

12
ci/app2bsp/package.json Normal file
View File

@ -0,0 +1,12 @@
{
"name": "fiori-launchpad-connector-onpremise",
"version": "1.0.0",
"description": "Ein Projekt zum Kopieren von Dateien von source nach target21",
"main": "run.js",
"scripts": {
"start": "node run.js"
},
"author": "Ihr Name",
"license": "MIT",
"dependencies": {}
}

89
ci/app2bsp/run.js Normal file
View File

@ -0,0 +1,89 @@
const fs = require('fs');
const path = require('path');
const sourceDir = '../../app/webapp';
const staticDir = './static';
const targetDir = './output';
const prefix = 'z2ui5.wapa.';
function generateTargetFileName(sourcePath, baseDir) {
const relativePath = path.relative(baseDir, sourcePath);
const fileName = prefix + relativePath.replace(/\//g, '_-').replace(/\\/g, '_-').toLowerCase();
return fileName;
}
function copyFilesRecursively(source, target, baseDir, renameFiles = true) {
fs.readdir(source, { withFileTypes: true }, (err, entries) => {
if (err) {
console.error('Fehler beim Lesen des Verzeichnisses:', err);
return;
}
entries.forEach(entry => {
const sourcePath = path.join(source, entry.name);
const targetFileName = renameFiles ? generateTargetFileName(sourcePath, baseDir) : entry.name;
const targetPath = path.join(target, targetFileName);
if (entry.isDirectory()) {
// Rekursiver Aufruf für Unterordner
copyFilesRecursively(sourcePath, target, baseDir, renameFiles);
} else if (entry.isFile()) {
// Lese die Quelldatei
fs.readFile(sourcePath, 'utf8', (err, data) => {
if (err) {
console.error(`Fehler beim Lesen der Quelldatei ${entry.name}:`, err);
return;
}
// Erstelle den Zielordner, falls er nicht existiert
fs.mkdir(path.dirname(targetPath), { recursive: true }, (err) => {
if (err) {
console.error('Fehler beim Erstellen des Zielordners:', err);
return;
}
// Schreibe den Inhalt in die Zieldatei
fs.writeFile(targetPath, data, 'utf8', (err) => {
if (err) {
console.error(`Fehler beim Schreiben der Zieldatei ${entry.name}:`, err);
return;
}
console.log(`Datei ${entry.name} erfolgreich kopiert als ${targetFileName}.`);
});
});
});
}
});
});
}
function deleteFilesRecursively(directory) {
if (fs.existsSync(directory)) {
fs.readdirSync(directory).forEach((file) => {
const curPath = path.join(directory, file);
if (fs.lstatSync(curPath).isDirectory()) {
deleteFilesRecursively(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(directory);
}
}
// Lösche alle Dateien im Zielverzeichnis
deleteFilesRecursively(targetDir);
// Erstelle das Zielverzeichnis, falls es nicht existiert
fs.mkdir(targetDir, { recursive: true }, (err) => {
if (err) {
console.error('Fehler beim Erstellen des Zielverzeichnisses:', err);
return;
}
// Starte den Kopiervorgang für den Quellordner
copyFilesRecursively(sourceDir, targetDir, sourceDir);
// Starte den Kopiervorgang für den statischen Ordner ohne Umbenennung
copyFilesRecursively(staticDir, targetDir, staticDir, false);
});

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_SMIM" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<URL>/SAP/BC/BSP/SAP/Z2UI5</URL>
<FOLDER>X</FOLDER>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DEVC" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DEVC>
<CTEXT>abap2UI5</CTEXT>
</DEVC>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_SICF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<URL>/sap/bc/ui5_ui5/sap/z2ui5/</URL>
<ICFSERVICE>
<ICF_NAME>Z2UI5</ICF_NAME>
<ORIG_NAME>z2ui5</ORIG_NAME>
</ICFSERVICE>
<ICFDOCU>
<ICF_NAME>Z2UI5</ICF_NAME>
<ICF_LANGU>E</ICF_LANGU>
<ICF_DOCU>test</ICF_DOCU>
</ICFDOCU>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_SICF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<URL>/sap/bc/bsp/sap/z2ui5/</URL>
<ICFSERVICE>
<ICF_NAME>Z2UI5</ICF_NAME>
<ORIG_NAME>z2ui5</ORIG_NAME>
</ICFSERVICE>
<ICFDOCU>
<ICF_NAME>Z2UI5</ICF_NAME>
<ICF_LANGU>E</ICF_LANGU>
<ICF_DOCU>test</ICF_DOCU>
</ICFDOCU>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,109 @@
<?xml version="1.0"?>
<UI5RepMapping version="1.0" xmlns="sap.ui5.tools.repository.mapping">
<MappingEntries>
<MappingEntry
path = "Component.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "Component.js" />
<MappingEntry
path = "cc"
is_folder = "X"
internal_rep = ""
internal_rep_path = "" />
<MappingEntry
path = "cc/DebugTool.fragment.xml"
is_folder = ""
internal_rep = "B"
internal_rep_path = "cc/DebugTool.fragment.xml" />
<MappingEntry
path = "cc/DebugTool.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "cc/DebugTool.js" />
<MappingEntry
path = "cc/Server.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "cc/Server.js" />
<MappingEntry
path = "controller"
is_folder = "X"
internal_rep = ""
internal_rep_path = "" />
<MappingEntry
path = "controller/App.controller.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "controller/App.controller.js" />
<MappingEntry
path = "controller/View1.controller.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "controller/View1.controller.js" />
<MappingEntry
path = "css"
is_folder = "X"
internal_rep = ""
internal_rep_path = "" />
<MappingEntry
path = "css/style.css"
is_folder = ""
internal_rep = "B"
internal_rep_path = "css/style.css" />
<MappingEntry
path = "index.html"
is_folder = ""
internal_rep = "B"
internal_rep_path = "index.html" />
<MappingEntry
path = "manifest.json"
is_folder = ""
internal_rep = "B"
internal_rep_path = "manifest.json" />
<MappingEntry
path = "model"
is_folder = "X"
internal_rep = ""
internal_rep_path = "" />
<MappingEntry
path = "model/models.js"
is_folder = ""
internal_rep = "B"
internal_rep_path = "model/models.js" />
<MappingEntry
path = "view"
is_folder = "X"
internal_rep = ""
internal_rep_path = "" />
<MappingEntry
path = "view/App.view.xml"
is_folder = ""
internal_rep = "B"
internal_rep_path = "view/App.view.xml" />
<MappingEntry
path = "view/View1.view.xml"
is_folder = ""
internal_rep = "B"
internal_rep_path = "view/View1.view.xml" />
</MappingEntries>
</UI5RepMapping>

View File

@ -0,0 +1,162 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_WAPA" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<APPLCLAS>/UI5/CL_UI5_BSP_APPLICATION</APPLCLAS>
<APPLEXT>Z2UI5</APPLEXT>
<SECURITY>X</SECURITY>
<ORIGLANG>E</ORIGLANG>
<MODIFLANG>E</MODIFLANG>
<TEXT>test</TEXT>
</ATTRIBUTES>
<PAGES>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CC/DEBUGTOOL.FRAGMENT.XML</PAGEKEY>
<PAGENAME>cc/DebugTool.fragment.xml</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CC/DEBUGTOOL.JS</PAGEKEY>
<PAGENAME>cc/DebugTool.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CC/SERVER.JS</PAGEKEY>
<PAGENAME>cc/Server.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>COMPONENT.JS</PAGEKEY>
<PAGENAME>Component.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CONTROLLER/APP.CONTROLLER.JS</PAGEKEY>
<PAGENAME>controller/App.controller.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CONTROLLER/VIEW1.CONTROLLER.JS</PAGEKEY>
<PAGENAME>controller/View1.controller.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>CSS/STYLE.CSS</PAGEKEY>
<PAGENAME>css/style.css</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>INDEX.HTML</PAGEKEY>
<PAGENAME>index.html</PAGENAME>
<MIMETYPE>text/html</MIMETYPE>
<IS_START_PAGE>X</IS_START_PAGE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>MANIFEST.JSON</PAGEKEY>
<PAGENAME>manifest.json</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>MODEL/MODELS.JS</PAGEKEY>
<PAGENAME>model/models.js</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>UI5REPOSITORYPATHMAPPING.XML</PAGEKEY>
<PAGENAME>UI5RepositoryPathMapping.xml</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>VIEW/APP.VIEW.XML</PAGEKEY>
<PAGENAME>view/App.view.xml</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
<item>
<ATTRIBUTES>
<APPLNAME>Z2UI5</APPLNAME>
<PAGEKEY>VIEW/VIEW1.VIEW.XML</PAGEKEY>
<PAGENAME>view/View1.view.xml</PAGENAME>
<PAGETYPE>X</PAGETYPE>
<LAYOUTLANGU>E</LAYOUTLANGU>
<VERSION>A</VERSION>
<LANGU>E</LANGU>
</ATTRIBUTES>
</item>
</PAGES>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -4,7 +4,7 @@ const abapClassTemplate = require('./abapClassTemplate');
const xmlTemplate = require('./abapXMLTemplate');
// Define source and target directories
const sourceDir = path.join(__dirname, '../webapp');
const sourceDir = path.join(__dirname, '../../app/webapp');
const targetDir = path.join(__dirname, '../../src/01/03');
// Initial XML content with BOM