Процесс приложения Oracle Oracle Apex, написанный для печати отчетов с использованием макетов BLOB, хранящихся в таблице БД - PullRequest
0 голосов
/ 17 января 2019

Я использую решение Oracle Publisher для печати, у меня есть отчеты и запросы oracle apex, написанные для них в общих компонентах, единственная конфигурация, отличная от обычной конфигурации для печати (решение Oracle Publisher), у меня есть то, что я сохраняю свой RTF файлы макетов не в самой вершине, а в таблице, которую я сделал сам. теперь я столкнулся с проблемой, и я не знаю, что делает это. Когда я хочу напечатать свои отчеты в формате pdf, я вижу ошибку «неверный локатор локатора». Теперь у меня есть единственная подсказка: если я загружаю RTF-файл в APEX, все работает нормально, и напечатанный PDF-файл выглядит нормально, но если я выберу «использовать общий макет отчета» в запросе отчета, чтобы код в процессе приложения получал В макете из БД я вижу ошибку «неверный локатор».

проблема не на столе, потому что я проверял это тысячу раз. поэтому причиной, вероятно, является проблема - код процесса приложения PLSQL, который подключается к БД, получает макет и затем отправляет команду печати. ​​

это код:

declare

    l_file_as_clob CLOB ;
    l_layout BLOB;
    l_asdsad CLOB;

    l_dest_offset integer := 1;
    l_src_offset integer := 1;
    l_lang_context integer := dbms_lob.default_lang_ctx;
    l_warning integer;
BEGIN


    select layout into l_layout
    from B5REPORTS
    where code = :APP_PRINT_LAYOUT_CODE
    AND APEX_APP_ALIAS = :APP_ALIAS 
    AND APEX_PAGE_ID = :APP_PAGE_ID ;

    dbms_lob.createtemporary(lob_loc => l_file_as_clob , cache => false);


    dbms_lob.converttoclob(
        dest_lob => l_file_as_clob
      , src_blob => l_layout
      , amount => dbms_lob.lobmaxsize
      , dest_offset => l_dest_offset
      , src_offset => l_src_offset
      , blob_csid => dbms_lob.default_csid
      , lang_context => l_lang_context
      , warning => l_warning);


    l_file_as_clob:= replace(l_file_as_clob,'+','%2B');
    l_file_as_clob:= replace(l_file_as_clob,'/','%2F');
    l_file_as_clob:= replace(l_file_as_clob,'=','%3D'); 


    --signature 2
    apex_util.download_print_document (
        p_file_name => :APP_PRINT_NAME
      , p_content_disposition => 'inline'
      , p_application_id => :APP_ID
      , p_report_query_name => :APP_PRINT_NAME
      , p_report_layout => l_file_as_clob
      , p_report_layout_type => 'rtf'
      , p_document_format => 'PDF'
    );

END;

а также это таблица, в которой хранятся BLOBS (файлы макетов RTF):

    ALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_UK1 UNIQUE 
(
  CODE 
)
USING INDEX B5REPORTS_UK1
ENABLEALTER TABLE FARA.B5REPORTS
ADD CONSTRAINT B5REPORTS_PK PRIMARY KEY 
(
  ID 
)
USING INDEX B5REPORTS_PK
ENABLECREATE UNIQUE INDEX FARA.B5REPORTS_PK ON FARA.B5REPORTS (ID ASC) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 2 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOPARALLEL
CREATE UNIQUE INDEX FARA.B5REPORTS_UK1 ON FARA.B5REPORTS (CODE ASC) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 2 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOPARALLELCREATE TABLE FARA.B5REPORTS 
(
  ID NUMBER NOT NULL 
, CODE VARCHAR2(100 BYTE) NOT NULL 
, LAYOUT BLOB NOT NULL 
, DESCRIPTION VARCHAR2(4000 BYTE) NOT NULL 
, NAME VARCHAR2(4000 BYTE) NOT NULL 
, APEX_APP_ALIAS VARCHAR2(100 BYTE) NOT NULL 
, APEX_PAGE_ID NUMBER NOT NULL 
) 
LOGGING 
TABLESPACE APEX 
PCTFREE 10 
INITRANS 1 
STORAGE 
( 
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1 
  MAXEXTENTS UNLIMITED 
  BUFFER_POOL DEFAULT 
) 
NOCOMPRESS 
NOPARALLEL 
LOB (LAYOUT) STORE AS SYS_LOB0000103483C00003$$ 
( 
  ENABLE STORAGE IN ROW 
  CHUNK 8192 
  NOCACHE 
  LOGGING  
)

Я тоже добавлю картинку с некоторыми примерами данных.

Я был бы признателен за любой комментарий, мысль или что-то еще, потому что я действительно застрял здесь. Спасибо заранее. :)enter image description here

...