Einführen zusätzlicher Parameter für Ordnerstruktur auf Object Store
This commit is contained in:
@@ -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. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user