Einführen zusätzlicher Parameter für Ordnerstruktur auf Object Store

This commit is contained in:
2026-04-09 09:29:05 +02:00
parent f52af5e438
commit edb5a70449
2 changed files with 21 additions and 15 deletions

View File

@@ -51,11 +51,14 @@ Alle zur Laufzeit via `pck_system.f_get_par_wert_by_programmid`:
| Parameter-ID | Inhalt | | Parameter-ID | Inhalt |
|---|---| |---|---|
| `NET_STORAGE_BUCKET` | Bucket-Name | | `NETSTORE_BUCKET` | Bucket-Name |
| `NET_STORAGE_NAMESPACE` | OCI Object Storage Namespace | | `NETSTORE_NAMESPACE` | OCI Object Storage Namespace |
| `NET_STORAGE_REGION` | z.B. `eu-frankfurt-1` | | `NETSTORE_REGION` | z.B. `eu-frankfurt-1` |
| `NET_STORAGE_TENANT_ID` | Erlaubter Root-Prefix, z.B. `mandant_42/` | | `NETSTORE_TENANT_ID` | Erlaubter Root-Prefix, z.B. `mandant_42/` |
| `NET_STORAGE_APEX_CREDENTIAL_ID` | Credential Static ID für apex_web_service calls, z.B. 'OCI_OBJ_STORE_CRED' | | `NETSTORE_CRED_ID` | Credential Static ID für apex_web_service calls, z.B. 'OCI_OBJ_STORE_CRED' |
| `NETSTORE_MARKER_NAME` | Name der Marker-Datei im Object Store, der von Automaton abgelegt wird, um zu signalisieren, dass der entsprechende Unterordner komplett hochgeladen wurde. Verhindert die Verarbeitung von unvollständig hochgeladenen Ordnern. z.B.: `_READY_FOR_DB_PROCESSING_` |
| `NETSTORE_BA_PREFIX` | Pfad in Object Storage, wo BA-Daten liegen. Muss mit einem `/` enden, z.B. `BA/Eingang/` |
| `NETSTORE_BA_IMPORT` | Name des Unterordners von NETSTORE_BA_PREFIX im Object Storage, wo entpackte Dateien, die noch importiert werden müssen, zwischengespeichert werden. |
--- ---

View File

@@ -1,10 +1,6 @@
create or replace package body pck_auto_import as create or replace package body pck_auto_import as
c_module constant varchar2(20) := 'PCK_AUTO_IMPORT'; c_module constant varchar2(20) := 'PCK_AUTO_IMPORT';
c_eingang_prefix constant varchar2(10) := 'eingang/';
c_marker constant varchar2(50) := '_READY_FOR_DB_PROCESSING_';
-- Zielordner nach erfolgreicher Verarbeitung — ggf. in sy_parameter auslagern
c_target_prefix constant varchar2(20) := 'verarbeitet/';
procedure p_import_file ( procedure p_import_file (
i_object_key in varchar2 i_object_key in varchar2
@@ -56,15 +52,22 @@ create or replace package body pck_auto_import as
l_file_etag varchar2(256); l_file_etag varchar2(256);
-- Verarbeitungsvariablen -- Verarbeitungsvariablen
l_marker_key varchar2(1024); l_marker_key varchar2(1024);
l_target_folder varchar2(1024); l_target_folder varchar2(4000 char);
l_target_prefix varchar2(4000 char);
l_eingang_prefix varchar2 (4000 char);
l_zip_name varchar2(512); l_zip_name varchar2(512);
l_file_content blob; l_file_content blob;
l_meta pck_net_storage.t_object_meta; l_meta pck_net_storage.t_object_meta;
l_remaining number; l_remaining number;
begin begin
-- Zielordner Name zusammenstellen
l_target_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || 'Verarbeitet ' || to_char(sysdate, 'YYYY') || '/';
l_eingang_prefix := pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_PREFIX') || pck_system.f_get_par_wert_by_programmid('NETSTORE_BA_IMPORT');
-- Unterordner in eingang/ auflisten (Delimiter '/' liefert nur direkte Kinder) -- Unterordner in eingang/ auflisten (Delimiter '/' liefert nur direkte Kinder)
l_folder_cursor := pck_net_storage.f_list_objects( l_folder_cursor := pck_net_storage.f_list_objects(
i_prefix => c_eingang_prefix i_prefix => l_eingang_prefix
,i_delimiter => '/' ,i_delimiter => '/'
); );
@@ -81,7 +84,7 @@ create or replace package body pck_auto_import as
-- Der Marker ist eine Datei mit speziellem Namen, welche vom quarkus automaton in einen entpackten zip-ordner gelegt wird um zu signalisieren, dass alle Dateien des ZIPs erfolgreich in den ordner gelegt wurden. -- Der Marker ist eine Datei mit speziellem Namen, welche vom quarkus automaton in einen entpackten zip-ordner gelegt wird um zu signalisieren, dass alle Dateien des ZIPs erfolgreich in den ordner gelegt wurden.
-- Das verhindert die verarbeitung von unvollständig entpackten zips -- Das verhindert die verarbeitung von unvollständig entpackten zips
l_marker_key := l_folder_name || c_marker; l_marker_key := l_folder_name || pck_system.f_get_par_wert_by_programmid('NETSTORE_MARKER_NAME');
-- Marker prüfen: -20001 = nicht vorhanden → Upload noch nicht abgeschlossen -- Marker prüfen: -20001 = nicht vorhanden → Upload noch nicht abgeschlossen
begin begin
@@ -99,10 +102,10 @@ create or replace package body pck_auto_import as
-- Zip-Namen aus Ordnerpfad ableiten: eingang/<zip-name>/ → <zip-name> -- Zip-Namen aus Ordnerpfad ableiten: eingang/<zip-name>/ → <zip-name>
l_zip_name := substr( l_zip_name := substr(
l_folder_name l_folder_name
,length(c_eingang_prefix) + 1 ,length(l_eingang_prefix) + 1
,length(l_folder_name) - length(c_eingang_prefix) - 1 ,length(l_folder_name) - length(l_eingang_prefix) - 1
); );
l_target_folder := c_target_prefix || l_zip_name || '/'; l_target_folder := l_target_prefix || l_zip_name || '/';
-- Alle Dateien im Unterordner auflisten (kein Delimiter = flach, alle Tiefen) -- Alle Dateien im Unterordner auflisten (kein Delimiter = flach, alle Tiefen)
l_file_cursor := pck_net_storage.f_list_objects( l_file_cursor := pck_net_storage.f_list_objects(