1 / 24

Report poziv arhitektura III

Report poziv arhitektura III. Kratki opis interakcije report/forms servisa u 10g. Stari način pozivanja reporta – 6i. param_list_id_L := Get_Parameter_List('INPUT_PARAMS');. ADD_PARAMETER(param_list_id_l, 'P_DATUM_OD', TEXT_PARAMETER, datum1_l); /* P - PLAN */

gay-moses
Download Presentation

Report poziv arhitektura III

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Report poziv arhitektura III Kratki opis interakcije report/forms servisa u 10g

  2. Stari način pozivanja reporta – 6i

  3. param_list_id_L := Get_Parameter_List('INPUT_PARAMS'); ADD_PARAMETER(param_list_id_l, 'P_DATUM_OD', TEXT_PARAMETER, datum1_l); /* P - PLAN */ ADD_PARAMETER(param_list_id_l, 'P_DATUM_DO', TEXT_PARAMETER, datum2_l); Forma datum1_l := TO_CHAR(:parametri.datum1, 'DD.MM.RRRR.'); datum2_l := TO_CHAR(:parametri.datum2, 'DD.MM.RRRR.'); Param_lista report_l := RUN_REPORT_OBJECT ('NEKI_REPORT', param_list_id_l); Pozovi report, poziv ide na report server

  4. Sav kod zajedno • param_list_id_L := Get_Parameter_List('INPUT_PARAMS'); • datum1_l := TO_CHAR(:parametri.datum1, 'DD.MM.RRRR.'); • datum2_l := TO_CHAR(:parametri.datum2, 'DD.MM.RRRR.'); • ADD_PARAMETER(param_list_id_l, 'P_DATUM_OD', TEXT_PARAMETER, datum1_l); /* P - PLAN */ • ADD_PARAMETER(param_list_id_l, 'P_DATUM_DO', TEXT_PARAMETER, datum2_l); • report_l := RUN_REPORT_OBJECT ('NEKI_REPORT', param_list_id_l);

  5. Pitanja?

  6. Način rada reporta sa 10g

  7. Zašto uopće mijenjati kod? • Report sada radi kao web servis. • Kako radi kao web servis, tako i forme više nisu usko vezane za reporte(i ostali programi mogu pristupati). • Parametarska forma koja je ponuđena ne radi kako bismo htjeli – potpuno je nefleksibilna. Savjetovanjem sa Uljanikom i sa Login-om, došli smo do zaključka da ćemo koristiti Custom parametarsku formu. • “The most secure approach for calling Reports from Forms on theWeb is to use the Oracle Application Server 10g reports Services in combination with RUN_REPORT_OBJECT. Because the user’s database connection is implicitly passed from Forms to Reports on the server, there is no risk of interception as if it were passed in a URL.” – iz Oracle Application Server 10J - Integrating Oracle Reports in Oracle Forms Services applications

  8. Primjer • report_id Report_Object; • ReportServerJob VARCHAR2(100); • BEGIN • report_id:= find_report_object(‘MyReport1’); • SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_COMM_MODE,SYNCHRONOUS); • SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_DESTYPE,CACHE); • SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_SERVER,’Repsrv’); • SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_OTHER,'p_deptno='||:Dept.De • ptno||' paramform=no'); • ReportServerJob:=run_report_object(report_id); • END; • Vidimo da se parametri prenose zajedno sa report “objektom”

  9. Parametarska forma Forma Prijenos parametra? Report

  10. Library migracija Podaci???? data_mode  NO_SHARE_LIBRARY_DATA (The default.) At runtime, Oracle Forms will not share data between forms that have identical libraries attached (at design time). SHARE_LIBRARY_DATA At runtime, Oracle Forms will share data between forms that have identical libraries attache.

  11. desetg.add___parameter(param_list_id_l, 'P_DATUM_OD', TEXT_PARAMETER, datum1_l); desetg.add___parameter(param_list_id_l, 'P_DATUM_DO', TEXT_PARAMETER, datum2_l); desetg.postavi_param_listu(param_list_id_l); CALL_FORM(lower('param_forma'), HIDE, DO_REPLACE, NO_QUERY_ONLY, SHARE_LIBRARY_DATA); --Generirano iz JDAPI-a... desetg.postavi_report_ime(lower('GAS5540')); param_list_id_L := Get_Parameter_List('INPUT_PARAMS'); Library migracija Param_lista

  12. Pročitaj parametre CALL_FORM(lower('param_forma'), HIDE, DO_REPLACE, NO_QUERY_ONLY, SHARE_LIBRARY_DATA); --Generirano iz JDAPI-a... Poziva report SET_REPORT_OBJECT_PROPERTY(report_id,REPORT_OTHER,hidden_action||'&paramform=no');

  13. Što se time postiglo?

  14. Što je postignuto? • Sada se svi report objekti nalaze u jednoj formi – param_forma.fmb • Postignuta je velika brzina prijenosa parametra u odnosu na druge solucije • Postignuta je modularnost, dobili smo još jedan abstraktni modul kojim “pomičemo” odgovornosti sa obje strane na domenu na kojoj treba biti. Ovo se prvobitno odnosi na forme koje pozivaju reporte. Sada, ako nastane neka promjena na reportima, nema potrebe pretraživati po svim formama, nego je sve na jednom mjestu • Smanjen je utjecaj mogućih grešaka – ako postoji greška u pozivu nije u nikakvom triggeru niti bug-u forme – moguće ali manje vjerovatno • Zadržan je isti format/dizajn formi od prije tako da se sada mogu migrirati forme sa 6i direktno dok mogu još uvijek izmjene biti “ubačene” kroz alat za migraciju

  15. Pitanja?

  16. Problematika URL encodinga • Problem nastaje kada se neki posebni znakovi šalju preko tih URL-ova • U svim primjerima koje Oracle daje šalju jednostavne parametre • U MISH aplikaciji, na drugu ruku, potpuno je uobičajeno poslati skoro pa čitav where uvijet • Neke su forme ispravljane na način da se where uvijeti “prebace” u report. Time se izbjegava slanje “posebnih znakova” preko URL-a • To nije moguće svugdje!

  17. Dobar slučaj

  18. Loš slučaj

  19. Zaključak? • Riješiti problem URL encodinga... Time se omogućuje slobodno slanje “biblija” preko parametra(što ne znači da je to dobro). • Primjer je GAS5380 – Ulaz/Izlaz artikala. (Primjer na desktopu) • Postoji još puno formi koje koriste čitave where uvijete za poziv reporta

  20. RWWebService • Web servis “Interface” • Omogućava par jendnostavnih metoda: • getAPIVersion() • getServerInfo(String serverName, String authId) • getJobInfo(Integer jobId, String serverName, String authId) • killJob(Integer jobId, String serverName, String authId) • runJob(String commandLine, Boolean synchronous)

  21. Zašto nova implementacija? • “Zastarijela” tehnologija – PL/SQL, treba puno više vremena potrošiti na izradu/održavanje/testiranje library-a. • Nedostatak dokumentacije Oracle-a – ne postoji dokument koji spominje “URL encoding”, kamoli još da je vezan za report server. • Jedna izmjena/testiranje zahtijeva sljedeće: • Zagasiti browser • Napraviti izmjenu • Kompajlirati • Napraviti executable • Kopirati u folder gdje se pokreće • Pokrenuti “attach debugger” • Pokrenuti browser sa opcijom “&debug=yes” • Ponovno u formi upisati detalje vezane za “konekciju” na debugger • Upisati user podatke • Ići na formu • Vratiti se na debugger • Doći na problematični slog • Pogledati vrijednosti(za neke vrijednosti niti ne postoji “watch”)

  22. Zašto nova implementacija? • JavaBean se puno lakše testira – imamo TDD, sve što forma treba je poslati par parametra • Nakon par napisanih testova možemo lako ustanoviti gdje je greška/bug • “Logika” poziva povučena je u Bean

  23. Primjer pozivanja • server=rep_iii-server-2_as10g report=test.rdf destype=file desname=output.pdf desformat=pdf userid=hnbgastro/hnbgastro@iii-11g • Problema je vidljiv. Sve se šalje preko XML-a. Da li je sa sigurnosne strane ovo dobra solucija? Sigurno da je lakše i jednostavnije, ali da li je i sigurnije?

More Related