systemy informatyczne GSM/SMS
systemy raportowania

Raporty PDF w programach Informix-4GL



Jak wiadomo technologia Informix-4GL powstała w latach 90-tych ubiegłego stulecia. Wówczas jeszcze obecnie używane formaty biurowe (np. PDF, DOC, XLS) dopiero rozpoczynały swoją ekspansję. W dzisiejszych czasach są już na tyle popularne, że ich brak staje się poważną wadą systemów tworzonych w technologii Informix-4gl. Dzięki integracji z systemem raportowym ProReports, dokonując niewielkich przeróbek w kodzie 4GL, można wzbogacić systemy o możliwość generacji raportów PDF.

Poniżej zostanie zaprezentowana metodologia, dzięki której w prosty sposób można dokonać integracji dowolnego systemu opracowanego w technologii Informix-4GL z systemem raportowym ProReports i przez to uzyskać możliwość generowania raportów w nowoczesnych formatach biurowych.

Konwersja plików *.4gl zawierających raporty 4GL

Pierwszy etap polega na użyciu konwertera repo.sh dla wszystkich plików *.4gl, które zawierają typowe raporty *.4gl:



$REPO/repo.sh rapprm.4gl > rapprm.4gl.new
mv raprm.4gl.new rapprm.4gl

gdzie $REPO wskazuje na ścieżkę dostępu do konwertera.

Konwerter przetwarza plik *.4gl i dodaje kilka linii kodu:

  • na początku pliku zmienną globalną g_id_repo
    
    DEFINE g_id_repo INTEGER     
    FUNCTION f_MakeRaportPrm()   
    

  • przed START REPORT dodaje funkcję włączającą przygotowywanie danych dla raportu PDF

    
    CALL fb_set_repo(TRUE)                   
    IF fb_get_repo() THEN                    
     LET g_id_repo=fb_repo_start(l_plik,"")  
    END IF                                   
    START REPORT f_ReportPRM TO l_plik       
    



    Funkcja fb_set_repo włączą (TRUE) bądź wyłącza (FALSE) dostępność raportu PDF. Funkcja fb_repo_start dostarcza indywidualnego identyfikatora raportu (g_id_repo) oraz rejestruje kilka informacji o generującym raport. Drugi parametr funkcji wskazuje nazwę pluginu obsługującego konwersję raportu do postaci PDF (default – wartość „” – oznacza wykorzystanie pluginu 4gl2pdf.php).

  • przed każdą frazą PRINT dodaje funkcję zapisu danych dla raportu PDF
    
    ON EVERY ROW                                                                    
                                                                                    
       lET l_wartosc=fb_JustLeft(20," ",l_rec.wartosc)                              
       LET l_linia="|",l_rec.pok USING "#######","|",l_rec.parametr,"|",l_rec.grupa,
    "|",l_wartosc,"|"                                                               
                                                                                    
    IF fb_get_repo() THEN                                                           
    LET l_str_repo="","l_linia==",l_linia,";;"                                      
    LET l_sts_repo=fb_repo_print(g_id_repo,"row","",l_str_repo);                    
    END IF                                                                          
      PRINT l_linia                                                                 
     
    

    Funkcja fb_repo_print zapisuje dane, które będą przetwarzany w procesie przygotowywania raportu PDF. Drugi parametr funkcji wskazuje na sekcję, w której występuje dany element, zaś trzeci (w przykładzie „”) pozwala określić tzw. klasę wiersza. Dzięki temu przygotowując indywidualny plugin dla raportu można określać indywidualne cech danego wiersza, np. font, kolor czcionki, wielkość czcionki itp.

    Przygotowanie pliku main.4gl

    Aby nasz program był bardziej elastyczny w pliku main.4gl możemy dodać obsługę dwóch parametrów:


    
    -PDF          : włączenie generacji raportu PDF
    -PCFG{plugin} : nazwa pluginu obsługi raportu PDF                                                              
    

    Poniżej zostanie opisany proces dodania obsługi tychże parametrów jedną z dostępnych metod, ale podkreślamy, że każdy developer może tutaj zastosować własne rozwiązania.

  • na początku pliku main.4gl dodajemy dwie zmienne globalne
    
    DEFINE g_pdf_sts  SMALLINT   
    DEFINE g_pdf_cfg  VARCHAR(60)
    

  • w funkcji analizy parametrów programu dodajemy
    
    WHEN l_prm="-PDF"                                             
         LET g_pdf_sts=TRUE                                       
                                                                  
    WHEN l_prm matches "-PCFG*"                                   
          LET l_len=LENGTH(l_prm)                                 
          LET g_pdf_cfg=l_prm[6,l_len]                            
                                                                  
                                                                  
                                                                  
     WHEN l_prm="-?"                                              
         DISPLAY "Lokalne parametry:"   
         ...
         ...                            
         DISPLAY "-PDF            : raport w PDF"                 
         DISPLAY "-PCFG   : nazwa pluginu obsługi PDF "   
         EXIT PROGRAM                                             
    

  • i ostatecznie dwie funkcje zwracające wartości zmiennych globalnych g_pdf_sts i g_pdf_cfg
    
    FUNCTION f_gGetPDF()       
    RETURN g_pdf_sts           
    END FUNCTION               
                               
    FUNCTION f_gGetPCFG()      
    RETURN g_pdf_cfg           
    END FUNCTION               
    

    Funkcji tych można użyć w pliku raportu:


    
    CALL fb_set_repo(f_gGetPDF())                        
    IF fb_get_repo() THEN                                
     LET g_id_repo=fb_repo_start(l_plik,f_gGetPCFG())    
    END IF                                               
    START REPORT f_ReportPRM TO l_plik                         
    

    Dzięki temu uzyskujemy elastyczność przy tworzeniu raportów PDF, gdyż możemy decydować czy raport PDF można w ogóle generować i przy pomocy jakiego pluginu ma być obsługiwany. Zmiana pluginu daję nam swobodę całkowitego kształtowania końcowej postaci raportu.

    Kompilacja programu

    Aby wprowadzone zmiany były uwzględnione oczywiście tak przygotowany program należy przekompilować. Do listy bibliotek używanych podczas kompilacji należy dodać bibliotekę repo.a


    
    c4gl -static ../lib/utl.a ../lib/menu.a ../lib/repo.a
    main.4gl wins.4gl rapprm.4gl                                 
    

    Drukowanie raportu PDF

    Raport w programie 4GL uzyskuje się poprzez wykorzystanie „wirtualnej drukarki” (np. o nazwie MakePDF), z którą jest skojarzony skrypt generujący plik PDF – pro_druk_4gl2pdf



    W kodzie 4GL obsługa uruchomienia opcji "MakePDF" może wyglądać jak poniżej:


    
    LET l_komenda="cat ",l_plik_raportu CLIPPED,"|pro_druk_4gl2pdf" 
    RUN l_komenda                                    
    

    Poniżej zaprezentowano dwie postacie tego samego raportu. Jeden przygotowany standardowym pluginem (4gl2pdf.php) a drugi pluginem 4gl2pdf_graph.php

    prm.4ge –PDF –PCFG4gl2pdf.php



    prm.4ge –PDF –PCFG4gl2pdf_grapth.php



    Jak widać zastosowany plugin może mieć znaczący wpływ na wygląd końcowego raportu PDF.

  • Last modified: 2013-03-01, 09:44

    Copyright © 2006 GeMail

    powered by phpSQLiteCMS