B4J Library jNxtReportsB4J: Library to view reports generated by Next-Reports

Discussion in 'B4J Libraries & Classes' started by Philip Chatzigeorgiadis, Sep 2, 2015.

  1. Philip Chatzigeorgiadis

    Philip Chatzigeorgiadis Member Licensed User

    jNxtReportsB4J Library allows B4J programs to handle report files generated by NextReports.

    It contains just one function, which receives all its parameters in a list.

    LIMITATIONS:
    Library was compiled with Java 8. So, I assume, it will require Java 8 to run.

    Only table reports are supported.
    Charts are NOT supported.

    Report files can be exported CSV, TXT, XLS, XML, PDF, HTML or RTF format.

    If a report contains images, then images are automatically displayed only in the HTML format export case. In order to display images in other formats, you must edit the MANIFEST.MF file (see instructions in Step 6 below).

    Output files are always exported in your application folder (i.e. where your application’s Jar file is located).


    TESTING:
    The demo and library supplied here have been tested on Windows 7 and Windows 8.1, running Java 8, with reports generated by Next Reports Version 8.1., against a Microsoft SQL Server database.

    HOW TO USE:
    Step 1
    Copy your report file (i.e. a file with “report” extension, generated by Next Reports), including any images necessary for your report,into a folder of your choice.
    (Next Reports by default saves report files at C:\Users\YourUserName\.nextreports-8.1\output\YourConnectionName\Reports.)

    Step 2
    Extract the jNxtReportsB4J.zip (it contains 3 files: jNxtReportsB4J.jar, jNxtReportsB4J.xml, nextreports-engine-8.1.jar) to the Additional Libraries folder of B4J.

    Step 3
    Download and save to the Libraries folder of B4J the applicable Jar files listed in the “Additional Jar” section of the demo program. All files are available on the web.

    Step 4
    Copy the appropriate JDBC Jar file (necessary for the database type you are using), into the Libraries folder of B4J.

    Step 5
    Edit, as necessary, the code of NxtReportsDemo. This demo operates on a Microsoft SQL SERVER database, outputs the report in the format specified and then opens it for viewing.
    You must, at least, specify your own report name and report location (the folder where you saved your report in Step 1) plus the url and driverclass parameters applicable to your database.

    Step 6 (Images)
    If your report contains images, these are automatically displayed ONLY in html format. In order to display them in other formats, you must add a Class-Path parameter in the MANIFEST.MF file of the Jar file of your program. In order to do this, you must have 7-Zip and Notepad++ installed (or other programs with similar functionality). Follow these steps:
    1. Locate your Jar file (in the Objects folder of your application).
    2. Right click on you Jar file and open it with 7-Zip
    3. Enter in the META-INF folder
    4. Open the MANIFEST.MF program with Notepad++
    5. Add a line similar to this: Class-Path: .\reports\
    The Class-Path should point to the folder where you have stored the images of your report – see Step 1. In my example, this is a folder called “reports” which is located in my application folder (which is also the current folder). You can specify an absolute path or a relative path, as I did above.
    Now the MANIFEST.MF file will look like this:

    Manifest-Version: 1.0
    JavaFX-Version: 2.2
    JavaFX-Application-Class: b4j.example.main
    Created-By: JavaFX Packager
    Main-Class: anywheresoftware.b4a.keywords.Common
    Class-Path: .\reports\


    Next, save changes and close Notepad++.
    7-Zip will ask you if MANIFEST.MF file should be updated.
    Press Yes.
    Close 7-Zip.
    You can now run your Jar file and the images will be displayed regardless of format output.
     

    Attached Files:

    Last edited: Sep 3, 2015
  2. Duncan H Williamson

    Duncan H Williamson Member Licensed User


    Hi
    I have downloaded next reports ver 8.2 (latest and only version available ) however when compiled and run the following error occurs:

    unsupported classversion error unsupported major.minor ver 52.0

    Im assuming this is due to the version of next reports..... any help would be greatly apreciated
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    As the bold message says you need to use Java 8 (Tools - Configure Paths).
     
  4. Duncan H Williamson

    Duncan H Williamson Member Licensed User

    Thanks Erel , I thought I had set the path to Java 8 but when I looked again I had not... must be getting old :)
     
  5. Philip Chatzigeorgiadis

    Philip Chatzigeorgiadis Member Licensed User

    Erel, thanks for your post.

    Duncan,
    I tested my library against a v.8.2 report and it works OK.
     
    Last edited: Dec 7, 2015
    Duncan H Williamson likes this.
  6. Duncan H Williamson

    Duncan H Williamson Member Licensed User

    Thats great , :) I have not had the opportunity to get my report running due to time constraints.... I pointed to java 8 and lost all the error messages but created new ones due to database access issues :) so when I have time I will have another go
     
  7. khaleel Ismail

    khaleel Ismail New Member Licensed User

    can you post the source project for jNxtReportsB4J ?
    I tried to use this library with no luck !
     
  8. atiaust

    atiaust Active Member Licensed User

    I have this library working with Next Reports Designer and Engine v9.1.

    Does anyone know how to pass a 'date' variable to to the engine. Strings & numbers are fine but I get an error with dates. I have a report with 'start_date' and 'end_date'. The report works in the designer.

    "ro.nextreports.engine.ReportRunnerException: ro.nextreports.engine.ReportRunnerException: java.lang.ClassCastException: javafx.scene.control.DatePicker cannot be cast to java.util.Date"

    Thanks
     
  9. atiaust

    atiaust Active Member Licensed User

    Hi All,

    I have added an updated tutorial that uses NextReports 9.1 and Mysql as the data source.
    All the additional jar files can be obtained from the NextReports web site. http://www.next-reports.com/download.html

    The NextReports 9.1 Designer, Engine and Server are available "free" and works quite well for my application which is mostly simple reports with date ranges and totals.

    I have a menu in my app to select the required report and input parameters, then present the report in a PDF reader for viewing or printing.
    Create the reports using the designer and copy them from the "c:/users/user_name/.nextreports-9.1/output/database_name/reports/report_name.report" to your
    app/objects/reports folder or where ever you want to place them.

    Code:
    #Region Project Attributes
        
    #MainFormWidth: 600
        
    #MainFormHeight: 400
    '  
        'This jar file must be present in the B4J Additional Libraries folder
        '#AdditionalJar:nextreports-engine-8.1
        #AdditionalJar:nextreports-engine-9.1
    '  
        'Don't forget to add jNxtReportsB4J in the B4J IDE Libraries tab
    '  
    '    Download these jar files to the B4J Libraries folder
    '    All these jar files are available from http://www.next-reports.com/download.html
        #AdditionalJar:commons-jexl-2.1.1
        
    #AdditionalJar:commons-logging-1.1.1
        
    #AdditionalJar:itext-2.1.7
        
    #AdditionalJar:itext-rtf-2.1.7
        
    #AdditionalJar:itextpdf-5.0.6
        
    #AdditionalJar:xstream-1.3.1
        
    #AdditionalJar:xstream-1.4.7
        
    #AdditionalJar:poi-3.7
    '  
        'replace this by your applicable database jar file
        #AdditionalJar:mysql-connector-java-5.1.39
        
    '#AdditionalJar:mysql-connector-java-5.1.27.jar
    '      
    #End Region

    #Region Notes
    '    Updated 20-10-2016 - atiaust
    '
    '    This demo was adapted from one posted by Philip Chatzigeorgiodis with his library jNxtReportsB4J
    '    This works with NextReports designer and Engine Version 9.1 - see Philips Tutorial for install instructions
    '    This is a UI demo using Datepickers for DateFrom and DateTo selection criteria
    '
    '    The report was generated using the NextReports Report Designer and adding "Between ${start_date} And ${end_date}" as the
    '    selection criteria in the query
    '
    #End Region

    Sub Process_Globals
        
    Private fx As JFX
        
    Private MainForm As Form
        
    Private repexec As jNxtReportsB4J        ' jNxtReportsB4J library from B4x.com
    '    form for testing
        Private btnOK As Button
        
    Private dpDateFrom As DatePicker
        
    Private dpDateTo As DatePicker
    '
    End Sub

    Sub AppStart (Form1 As Form, Args() As String)
        MainForm = Form1
        MainForm.RootPane.LoadLayout(
    "frmMain"'Load the layout file.
        MainForm.Show
    '
    End Sub

    Sub btnOK_MouseClicked (EventData As MouseEvent)
            
    'File separator character is set, according to the OS detected.
        Dim os As String = GetSystemProperty("os.name""").ToLowerCase
        
    Dim filesep As String
        
    If os.Contains("win"Then  
              filesep=
    "\"
        
    Else If os.Contains("mac"Then
              filesep=
    "/"
        
    End If  
    '
        Dim inputlist As List
        
    Dim inlocation,repin, repout, reptype, driverclass, url As String
    '  
        'Location of the *.report file and any necessary images
        inlocation=File.DirApp & filesep & "reports" 'For this demo the report is stored in the Objects/reports directory. You can specify any other directory.
        'name of report created by NextReports.
        repin="Test" ' Report specified: Report_name.report - No need for the .report extension
    '  
        'Output file specification
        repout="MYOUTPUT" 'name of output report
        reptype="PDF"  ' Available options: CSV, TXT, XLS, XML, PDF, HTML or RTF. File type must be in CAPITALS.
        'Output file will be MYOUTPUT.RTF. Output file (and any necessary images) will be stored in your application directory

    '    logs the location of the report file
        LogDebug("Location = "&inlocation)
        
    'replace this by your database driver class name
        driverclass="com.mysql.jdbc.Driver"            '    driver class for Mysql
    '  
        'replace this by applicable url for your database
        'I use IP instead of server name. For some reason, in my tests with SQL SERVER, when I used server name, it would not not work on MACs
        'jdbc:mysql://localhost:3306/HerongDB?user=Herong&password=TopSecret
        url="jdbc:mysql://192.168.0.1:3306/database_name?user=db_user&password=user_pw"
        
    'Initialize input list and add necessary arguments in the order shown below
        inputlist.initialize
        
    inputlist.Add(inlocation)
        
    inputlist.add(repin)
        
    inputlist.add(repout)
        
    inputlist.add(reptype)
        
    inputlist.add(driverclass)
        
    inputlist.add(url)
      
    '    Now add your parameters - if any
    '    First, the parameter name - as it was defined in NextReports ie.
    '    add compare field in Report Designer ${surname}  
    '    Then add your parameter value - see examples below...
    '
    '    inputlist.add("surname")
    '    inputlist.add("xxxxx")
    '
    '    for dates use dates from DatePicker inputs on the B4j UI
    '  
        Dim t As Long
    '
        t = dpDateFrom.DateTicks
        
    inputlist.add("start_date")
        
    inputlist.add(TicksToDate(t))
    '  
        t = dpDateTo.DateTicks
        
    inputlist.add("end_date")
        
    inputlist.add(TicksToDate(t))
    '  
    '    you can add as many parameters as necessary
    '
    Try
        
    'Run the report and export the output report file
        repexec.reportPrepAndRun(inputlist)
    Catch
        LogDebug(
    "Error: Loading Reports : " & LastException.Message)
    End Try  
        
    'Show the output report file
        fx.ShowExternalDocument(File.GetUri(File.DIRAPP, repout & "." & reptype))
    '  
    End Sub

    Sub TicksToDate (ticks As Long) As Object
       
    Dim jo As JavaObject
       jo.InitializeNewInstance(
    "java.util.Date"Array(ticks))
       
    Return jo
    End Sub
    Thanks to Philip for the library and tutorial, rwblinn for his assistance and Erel for B4j

    Hope this helps someone.
     
    Last edited: Oct 24, 2016
    magi6162, DonManfred, jroriz and 3 others like this.
  10. Philip Chatzigeorgiadis

    Philip Chatzigeorgiadis Member Licensed User

    I had not tried the library with Date parameters - so thanks for your clarification.
    It's also good to see that everything works with NextReports 9.1 and MySql!
    Please verify that the TicksToDate function can be found here:
    https://www.b4x.com/android/forum/threads/java-util-date-error.72261/#content
     
    Last edited: Oct 24, 2016
  11. atiaust

    atiaust Active Member Licensed User

    Hi Philip,

    That is correct. For some reason the tickstodate sub didn't copy.
    I will correct this and add to my post.

    Thanks
     
  12. Juan Marrero

    Juan Marrero Active Member Licensed User

    Did you encountered an error of Permission Denied? I get this when using your code applied to my database: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    NOTE: I have tried with 3 different users, all with full GRANT OPTIONS.
     
  13. atiaust

    atiaust Active Member Licensed User

    Hi Juan,

    The answer to your question s 'YES' I have had that error.

    You may find that the "bind.address" statement in the my.cnf file is only allowing logins on the 'localhost' and not allowing the Mysql connector to log in remote.

    On my server I have 'bind.address = 0.0.0.0'

    Hope this helps.
     
  14. Juan Marrero

    Juan Marrero Active Member Licensed User

    Strange. I already have 'bind-address = 0.0.0.0' at the end of my.ini (in my case) file because I didn't have connection from any other PC in the same network to the server and that bind-address setting solved it. I guess I'm missing another security setting. I'm used to Microsoft SQL Server, I'm practically starting to understand MySQL. From Next Reports Designer connects perfectly and display the data perfectly.
     
    Last edited: Aug 2, 2017
  15. Juan Marrero

    Juan Marrero Active Member Licensed User

    this is what i get when using this library, mssql and java 8.
    Code:
    Waiting for debugger to connect...
    Program started.
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Oracle = ro.nextreports.engine.querybuilder.sql.dialect.OracleDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Adaptive 
    Server Anywhere = ro.nextreports.engine.querybuilder.sql.dialect.MSSQLDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Microsoft 
    SQL Server = ro.nextreports.engine.querybuilder.sql.dialect.MSSQLDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: MySQL = ro.nextreports.engine.querybuilder.sql.dialect.MySQLDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Apache Derby = ro.nextreports.engine.querybuilder.sql.dialect.DerbyDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: PostgreSQL = ro.nextreports.engine.querybuilder.sql.dialect.PostrgreSQLDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: SQLite = ro.nextreports.engine.querybuilder.sql.dialect.SQLiteDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: CsvJdbc = ro.nextreports.engine.querybuilder.sql.dialect.CSVDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Vertica Database = ro.nextreports.engine.querybuilder.sql.dialect.VerticaDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Pervasive.SQL = ro.nextreports.engine.querybuilder.sql.dialect.PervasiveDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Teradata = ro.nextreports.engine.querybuilder.sql.dialect.TeradataDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.DialectFactory addDialect
    INFO: Dialect added: Ucanaccess = ro.nextreports.engine.querybuilder.sql.dialect.MSAccessDialect
    Aug 
    152017 1:37:32 PM ro.nextreports.engine.querybuilder.sql.dialect.AbstractDialect <init>
    INFO: Using dialect: ro.nextreports.engine.querybuilder.sql.dialect.MSSQLDialect@7c031263
    java.io.FileNotFoundException:
       at java.io.FileOutputStream.open0(Native Method)
       at java.io.FileOutputStream.open(FileOutputStream.java:
    270)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:
    213)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:
    101)
       at ro.nextreports.integration.ReportExec.runReport(ReportExec.java:
    61)
       at ro.nextreports.integration.ReportExec.reportPrepAndRun(ReportExec.java:
    90)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
    43)
       at java.lang.reflect.Method.invoke(Method.java:
    498)
       at anywheresoftware.b4a.shell.Shell.runVoidMethod(
    Shell.java:657)
       at anywheresoftware.b4a.shell.Shell.raiseEventImpl(
    Shell.java:234)
       at anywheresoftware.b4a.shell.Shell.raiseEvent(
    Shell.java:159)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
    43)
       at java.lang.reflect.Method.invoke(Method.java:
    498)
       at anywheresoftware.b4a.BA.raiseEvent2(BA.java:
    90)
       at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:
    93)
       at anywheresoftware.b4a.BA$
    1.run(BA.java:215)
       at com.sun.javafx.application.PlatformImpl.lambda$
    null$173(PlatformImpl.java:295)
       at java.security.AccessController.doPrivileged(Native Method)
       at com.sun.javafx.application.PlatformImpl.lambda$runLater$
    174(PlatformImpl.java:294)
       at com.sun.glass.ui.InvokeLaterDispatcher$
    Future.run(InvokeLaterDispatcher.java:95)
       at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
       at com.sun.glass.ui.win.WinApplication.lambda$
    null$148(WinApplication.java:191)
       at java.lang.Thread.run(
    Thread.java:745)
    Aug 
    152017 1:40:22 PM ro.nextreports.engine.querybuilder.sql.dialect.AbstractDialect <init>
    INFO: Using dialect: ro.nextreports.engine.querybuilder.sql.dialect.MSSQLDialect@12473b1c
    java.io.FileNotFoundException:
       at java.io.FileOutputStream.open0(Native Method)
       at java.io.FileOutputStream.open(FileOutputStream.java:
    270)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:
    213)
       at java.io.FileOutputStream.<init>(FileOutputStream.java:
    101)
       at ro.nextreports.integration.ReportExec.runReport(ReportExec.java:
    61)
       at ro.nextreports.integration.ReportExec.reportPrepAndRun(ReportExec.java:
    90)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
    43)
       at java.lang.reflect.Method.invoke(Method.java:
    498)
       at anywheresoftware.b4a.shell.Shell.runVoidMethod(
    Shell.java:657)
       at anywheresoftware.b4a.shell.Shell.raiseEventImpl(
    Shell.java:234)
       at anywheresoftware.b4a.shell.Shell.raiseEvent(
    Shell.java:159)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
    62)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
    43)
       at java.lang.reflect.Method.invoke(Method.java:
    498)
       at anywheresoftware.b4a.BA.raiseEvent2(BA.java:
    90)
       at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:
    93)
       at anywheresoftware.b4a.BA$
    1.run(BA.java:215)
       at com.sun.javafx.application.PlatformImpl.lambda$
    null$173(PlatformImpl.java:295)
       at java.security.AccessController.doPrivileged(Native Method)
       at com.sun.javafx.application.PlatformImpl.lambda$runLater$
    174(PlatformImpl.java:294)
       at com.sun.glass.ui.InvokeLaterDispatcher$
    Future.run(InvokeLaterDispatcher.java:95)
       at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
       at com.sun.glass.ui.win.WinApplication.lambda$
    null$148(WinApplication.java:191)
       at java.lang.Thread.run(
    Thread.java:745)
    I know the report is in the correct folder.
    This is my code:
    Code:
    Sub btnOK_Action
       
    Try
         
    Dim os As String = GetSystemProperty("os.name""").ToLowerCase
         
    Dim filesep As String
         
    If os.Contains("win"Then
           filesep=
    "\"
         
    Else
           filesep=
    "/"
         
    End If
        
         
    If Not(File.Exists(File.DirApp & filesep & "reports""")) Then
           
    File.MakeDir(File.DirApp, "reports")
         
    End If
        
         
    Dim inputlist As List
         
    Dim inlocation, repin, repout, reptype, driverclass, url As String
         
    Dim repexec As jNxtReportsB4J
        
         inlocation = 
    File.DirApp & filesep & "reports"
         repin = 
    "UsersByName"
         
    'repin = "Sales"
         'repin = "testCust"
         repout = "UsersByName"
         
    'repout = "Sales"
         'repout = "testCust"
         reptype = "HTML"
         driverclass = 
    "net.sourceforge.jtds.jdbc.Driver"
         
    'driverclass="com.mysql.jdbc.Driver"
         url="jdbc:jtds:sqlserver://itprogrammer-pc:1433;databaseName=Membership;user=sa;password=xxxxxx"
         
    'url="jdbc:mysql://192.168.0.221:3306/unicentaopos?user=unicentaReports&password=mvp687en?autoReconnect=true&useSSL=false"
        
         
    inputlist.initialize
         
    inputlist.Add(inlocation)
         
    inputlist.add(repin)
         
    inputlist.add(repout)
         
    inputlist.add(reptype)
         
    inputlist.add(driverclass)
         
    inputlist.add(url)
         
    'inputlist.add("custid")
         'inputlist.add(5)
         repexec.reportPrepAndRun(inputlist)
        
         fx.ShowExternalDocument(
    File.GetUri(File.DirApp, repout & "." & reptype))
       
    Catch
         
    Log(LastException.Message)
       
    End Try
     
    Last edited: Aug 15, 2017
  16. Juan Marrero

    Juan Marrero Active Member Licensed User

    Ok for whatever reason if I put "stops" in debug mode the code errors, but if I remove the "stops" the code works. Odd. Still got permission problems with MySQL.
     
  17. atiaust

    atiaust Active Member Licensed User

    Hi Juan,

    I am using Java 8 and Mysql without any issues. Your code looks similar to mine and should work.

    I was going to suggest using 'LogDebug("File Location = "&InLocation) to check the report location is correct.

    My preference is to use 'LogDebug' or 'Log' instead of using 'stops'.
     
  18. Juan Marrero

    Juan Marrero Active Member Licensed User

    I use stops for knowing exactly at which line the code crashes. But for this library LogDebug is a most. Can you tell me how is your my.ini file configured for not giving you permission denied? Already have bind-address=0.0.0.0. I'm gonna try again without the stops to see what brings me.
     
  19. Harris

    Harris Well-Known Member Licensed User

    Nice!

    I have it working with ABMaterial as well. This example uses the start and end date params... NextReport 9.1...
    Including all jars turned my 5 meg app jar into 12 meg. Nice to have the (small) engine included (as opposed to separate server - yet is available).
    Beats the 900 meg of JasperSoft...
    Now, to try this on my Ubuntu remote server...

    pdfFolder = File.DirApp &"/www/"&AppName&"/rptout_"&Main.comp_id
    repout=pdfFolder&"/"&fn 'name of output report

    The output report folder was created during login for the site user.
    It prepends the directory to the output report name.... Seems to work, however an Output Directory property would be nice, as well as output report name.

    For complex reports that involves much data processing, I find it easier to create the report if you normalize the data first. Output processed data to a temp table for the report to use, where each column has the complex computed values. Then all you have to do is render column text.

    This report's query in Next Reports... It get's funcky due to long type DateTime values sent by the android app to MySQL.
    Code:
    SELECT
        e1.First_name,
        e1.Last_name,
        s1.start,
        s1.end,
        s1.worktype,
        FROM_UNIXTIME(s1.start / 
    1000as SD,
        FROM_UNIXTIME(s1.end / 
    1000)   as ED,
        SUBTIME(    FROM_UNIXTIME(s1.end / 
    1000) , ( FROM_UNIXTIME(s1.start / 1000))  ) as ST
    FROM
        emp e1,
        shifthist s1
    WHERE
       e1.PK = s1.empid 
    AND DATE(FROM_UNIXTIME(s1.start / 1000)) >= ${sdate} AND DATE(FROM_UNIXTIME(s1.start / 1000)) <= ${edate}
       ORDER BY e1.Last_name, e1.First_name

    As a simple test example - On RUN REPORT, the pdf is loaded in ABMPDFViewer. From viwer, you can download or print.
    pdf1.SetDocument("../rptout_"&Main.comp_id&"/"&name)

    pdfview.jpg
     
  20. Harris

    Harris Well-Known Member Licensed User

    Been screwing with this for some time...

    Dim tlist as list
    tlist.intilaize
    tlist.addall('1054', '1056', '1057')

    I need to add a list ('1054', '1056', '1057')
    to a NextReport param called trkid
    inputlist.add("trkid")
    tlist.Add(tlist) ' this should be a objects of a list - tlist

    This list will contain a value of -1 (meaning all ALL trkid values in the table)
    or ONLY the values in the list (or one value).

    example:

    Next Reports SQL..

    case when ${trkid} = -1 then eventmast.trkid > -1
    else eventmast.trkid in (${trkid}) end

    Maybe someone else has confronted this issue and has some light to shed.

    Essentially,
    I need to to select one or all items form a list (db table).
    If param = -1 , then ALL items are used in query.
    If param > 0, then ONLY this item is used.

    Any suggestions will help..

    Thanks
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice