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 |
|
||||
|---|---|
|
||||
| `NET_STORAGE_BUCKET` | Bucket-Name |
|
||||
| `NET_STORAGE_NAMESPACE` | OCI Object Storage Namespace |
|
||||
| `NET_STORAGE_REGION` | z.B. `eu-frankfurt-1` |
|
||||
| `NET_STORAGE_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_BUCKET` | Bucket-Name |
|
||||
| `NETSTORE_NAMESPACE` | OCI Object Storage Namespace |
|
||||
| `NETSTORE_REGION` | z.B. `eu-frankfurt-1` |
|
||||
| `NETSTORE_TENANT_ID` | Erlaubter Root-Prefix, z.B. `mandant_42/` |
|
||||
| `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
|
||||
|
||||
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 (
|
||||
i_object_key in varchar2
|
||||
@@ -56,15 +52,22 @@ create or replace package body pck_auto_import as
|
||||
l_file_etag varchar2(256);
|
||||
-- Verarbeitungsvariablen
|
||||
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_file_content blob;
|
||||
l_meta pck_net_storage.t_object_meta;
|
||||
l_remaining number;
|
||||
|
||||
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)
|
||||
l_folder_cursor := pck_net_storage.f_list_objects(
|
||||
i_prefix => c_eingang_prefix
|
||||
i_prefix => l_eingang_prefix
|
||||
,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.
|
||||
-- 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
|
||||
begin
|
||||
@@ -99,10 +102,10 @@ create or replace package body pck_auto_import as
|
||||
-- Zip-Namen aus Ordnerpfad ableiten: eingang/<zip-name>/ → <zip-name>
|
||||
l_zip_name := substr(
|
||||
l_folder_name
|
||||
,length(c_eingang_prefix) + 1
|
||||
,length(l_folder_name) - length(c_eingang_prefix) - 1
|
||||
,length(l_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)
|
||||
l_file_cursor := pck_net_storage.f_list_objects(
|
||||
|
||||
Reference in New Issue
Block a user