Hi all,I'm using webuti library to create an excel file... when I deploy it on the server as soon as I execute the following code I get a "please acknowledge" message.
My client's oracle assistance group just told me that "this is an issue a consultant should know per sé" so they corrected the form and didn't tell me what they did (yeah I'm working in a highly collaborative environment).
here's the code, I didn't translate the variable names and so on... please forgive me for that:D
-- cursore dati OUTPUT
CURSOR c_cur IS
select * from processi;
rec c_cur%rowtype;
-- Oggetti OLE
XlApp client_ole2.OBJ_TYPE;
args client_ole2.LIST_TYPE;
wkbook client_ole2.OBJ_TYPE;
wksheet client_ole2.OBJ_TYPE;
wksheets client_ole2.OBJ_TYPE;
wkbooks client_ole2.OBJ_TYPE;
cell client_ole2.OBJ_TYPE;
-- font client_ole2.OBJ_TYPE;
border client_ole2.OBJ_TYPE;
args1 client_ole2.LIST_TYPE;
cols client_ole2.LIST_TYPE;
-- contatori di riga e colonna
riga number(4);
colonna number(4);
-- varie
temp_dir varchar2(100); -- directory temp di lavoro
file_name varchar2(100);
num_righe number;
-- costanti
FONT_BOLD constant boolean := true;
/*******************************************************************/
procedure scrivi_cella (r in number, c in out number, val in varchar2, bold in boolean :=false) IS
BEGIN
args := client_ole2.CREATE_ARGLIST;
client_ole2.ADD_ARG(args, r);
client_ole2.ADD_ARG(args, c);
cell := client_ole2.GET_OBJ_PROPERTY(wksheet,'Cells', args);
client_ole2.set_property(cell, 'Value', val);
--font := client_ole2.GET_OBJ_PROPERTY (cell, 'Font');
--client_ole2.set_property (font, 'Bold', bold); --> commentato perché non funziona in client_ole2
border := client_ole2.GET_OBJ_PROPERTY (cell, 'Borders');
client_ole2.set_property(border, 'LineStyle', 1);
client_ole2.DESTROY_ARGLIST(args);
client_ole2.release_obj(cell);
client_ole2.release_obj(border);
c:=c+1;
END scrivi_cella;
/*******************************************************************/
begin
set_application_property(cursor_style,'BUSY');
:elaborazione:='Attenzione: è in corso il download degli output su file excel.'||chr(10)
||'L''operazione può richiedere alcuni minuti, si consiglia di non'
||chr(10)||'chiudere l''applicazione.';
synchronize;
select count(1)
into num_righe
from output a, r54_arif_arif b, sostitui c, modalita_forn d, r8_t_ente e, r7_t_archivio f,
tipo_fornitore g
where b.id_periodo = a.id_periodo
and b.id_processo = a.id_processo
and nvl(a.flag_cancellato,0) != 1
and c.cod_sostitui = a.cod_sostitui
and d.cod_modal_forn = a.cod_modal_forn
and e.codice_ente = a.cod_ente
and f.codice_archivio = a.cod_archivio
and g.cod_fornitore = a.cod_fornitore;
-- DEFINIZIONI OGGETTI OLE
XlApp := client_ole2.create_obj ('Excel.Application');
client_ole2.set_property (XlApp, 'Visible', false);
wkbooks := client_ole2.GET_OBJ_PROPERTY (XlApp, 'Workbooks');
wkbook := client_ole2.invoke_obj (wkbooks,'Add');
wksheets := client_ole2.GET_OBJ_PROPERTY (wkbook, 'Worksheets');
--wksheet := client_ole2.GET_OBJ_PROPERTY (wksheets, 'ActiveSheet');
wksheet := client_ole2.invoke_obj (wksheets,'Add'); --> Aggiunge un nuovo sheet
client_ole2.set_property (wksheet,'Name','Output');
-- RIGA DI INTESTAZIONE
riga:=1;
colonna:=1;
scrivi_cella(riga,colonna,'ID PROCESSO',FONT_BOLD);
scrivi_cella(riga,colonna,'TIPO PROCESSO',FONT_BOLD);
scrivi_cella(riga,colonna,'DENOM. PROCESSO',FONT_BOLD);
scrivi_cella(riga,colonna,'ANNO RIFERIMENTO',FONT_BOLD);
scrivi_cella(riga,colonna,'VINCOLI TEMPORALI',FONT_BOLD);
scrivi_cella(riga,colonna,'SOSTITUIBILITÀ',FONT_BOLD);
scrivi_cella(riga,colonna,'MODAL. FORNITURA',FONT_BOLD);
scrivi_cella(riga,colonna,'NOME ENTE',FONT_BOLD);
scrivi_cella(riga,colonna,'TIPO ENTE',FONT_BOLD);
scrivi_cella(riga,colonna,'NOME ARCHIVIO',FONT_BOLD);
scrivi_cella(riga,colonna,'FORNITORE',FONT_BOLD);
scrivi_cella(riga,colonna,'SIGLA DIREZIONE',FONT_BOLD);
scrivi_cella(riga,colonna,'SIGLA STRUTTURA',FONT_BOLD);
scrivi_cella(riga,colonna,'STATO',FONT_BOLD);
OPEN c_cur;
LOOP
colonna:=1;
riga:=riga+1;
fetch c_cur into rec;
exit when c_cur%NOTFOUND;
scrivi_cella(riga,colonna,rec.id_processo);
scrivi_cella(riga,colonna,rec.sigla);
scrivi_cella(riga,colonna,rec.denom_proces);
scrivi_cella(riga,colonna,rec.anno_rif);
scrivi_cella(riga,colonna,rec.vincolo);
scrivi_cella(riga,colonna,rec.descr_sostitui);
scrivi_cella(riga,colonna,rec.descr_modal_forn);
scrivi_cella(riga,colonna,rec.nome_ente);
scrivi_cella(riga,colonna,rec.nome_tipo_ente);
scrivi_cella(riga,colonna,rec.nome_archivio);
scrivi_cella(riga,colonna,rec.descr_fornitore);
scrivi_cella(riga,colonna,rec.sigla_direzione);
scrivi_cella(riga,colonna,rec.sigla_struttura);
scrivi_cella(riga,colonna,rec.descr_stato);
END LOOP;
CLOSE c_cur;
client_ole2.DESTROY_ARGLIST(args);
args := client_ole2.CREATE_ARGLIST;
client_ole2.ADD_ARG(args, 'A:N');
cols := client_ole2.GET_OBJ_PROPERTY(wksheet,'Columns', args);
client_ole2.set_property (cols,'Autofit',true);
client_ole2.DESTROY_ARGLIST(args);
client_ole2.release_obj(cols);
tool_env.getvar('TEMP',temp_dir);
file_name := 'Output_'||to_char(sysdate,'yyyymmdd.hh24miss')||'.xls';
args1 := client_ole2.CREATE_ARGLIST;
client_ole2.ADD_ARG(args1, temp_dir||'\'||file_name);
client_ole2.INVOKE(wkbook, 'SaveAs', args1);
client_ole2.set_property (XlApp, 'Visible', TRUE);
client_ole2.DESTROY_ARGLIST(args1);
client_ole2.release_obj(wksheet);
client_ole2.release_obj(wksheets);
client_ole2.release_obj(wkbook);
client_ole2.release_obj(wkbooks);
client_ole2.RELEASE_OBJ(XlApp);
set_application_property(cursor_style,'NORMAL');
:elaborazione:='';
synchronize;