2013-09-04 1 views
0

Je travaille sur iReport pour la conception de rapport suivante. Regardez ci-dessous le format donné: -Report Design Suggestion requise

Report Design

Après avoir examiné cette conception, je peux conclure les points suivants. Ce rapport est essentiellement basé sur les employés dont le travail est résumé en fonction des applications sur lesquelles ils ont travaillé, ainsi que de leurs statuts.

  • Pour moi, cela ressemble à un rapport croisé.
  • Si j'utilise POJO comme source de données, en fait, si je conçois le DTO, ce serait quelque chose comme un POJO, contenant une liste d'employés. Cet employé POJO lui-même aura une collection de types d'applications, qui à son tour aura une liste de statuts. Je suis novice en JasperReports. Ce que je suis impatient est, comment pouvons-nous concevoir la source de données dans afin d'obtenir la conception du rapport. Toutes les suggestions sont les bienvenues. Exemple de conception DTO:

    package com.renaissance.model;

    import java.util.List; 
    
    public class Employee { 
        private long employeeNo ; 
        private List<ApplicationType> applicationTypes; 
    
        public Employee(long employeeNo, List<ApplicationType> applicationTypes) { 
        this.employeeNo = employeeNo; 
        this.applicationTypes = applicationTypes; 
        } 
    
        public Employee() { 
    
        } 
    
        public long getEmployeeNo() { 
        return employeeNo; 
        } 
    
        public void setEmployeeNo(long employeeNo) { 
        this.employeeNo = employeeNo; 
        } 
    
        public List<ApplicationType> getApplicationTypes() { 
        return applicationTypes; 
        } 
    
        public void setApplicationTypes(List<ApplicationType> applicationTypes) { 
        this.applicationTypes = applicationTypes; 
        } 
    } 
    
    
    package com.renaissance.model; 
    
    import java.util.List; 
    
    public class ApplicationType { 
        private long appTypeId ; 
        private String appName ; 
        private List<ApplicationStatus> applicationStatuses; 
    
        public List<ApplicationStatus> getApplicationStatuses() { 
        return applicationStatuses; 
        } 
    
        public void setApplicationStatuses(List<ApplicationStatus> applicationStatuses) { 
        this.applicationStatuses = applicationStatuses; 
        } 
    
        public long getAppTypeId() { 
        return appTypeId; 
        } 
    
        public void setAppTypeId(long appTypeId) { 
        this.appTypeId = appTypeId; 
        } 
    
        public String getAppName() { 
        return appName; 
        } 
    
        public void setAppName(String appName) { 
        this.appName = appName; 
        } 
    
        public ApplicationType(long appTypeId, String appName) { 
        this.appTypeId = appTypeId; 
        this.appName = appName; 
        } 
    
        public ApplicationType() { 
    
        } 
    } 
    
    package com.renaissance.model; 
    
    public class ApplicationStatus { 
        private long appStatusId ; 
        private String appStatusNameEn ; 
    
        public ApplicationStatus(long appStatusId, String appStatusNameEn) { 
        this.appStatusId = appStatusId; 
        this.appStatusNameEn = appStatusNameEn; 
        } 
    
        public ApplicationStatus() { 
    
        } 
    
        public long getAppStatusId() { 
        return appStatusId; 
        } 
    
        public void setAppStatusId(long appStatusId) { 
        this.appStatusId = appStatusId; 
        } 
    
        public String getAppStatusNameEn() { 
        return appStatusNameEn; 
        } 
    
        public void setAppStatusNameEn(String appStatusNameEn) { 
        this.appStatusNameEn = appStatusNameEn; 
        } 
    } 
    

    programme pilote

    package com.renaissance.reporting; 
    
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.List; 
    
    import com.renaissance.model.ApplicationStatus; 
    import com.renaissance.model.ApplicationType; 
    import com.renaissance.model.Employee; 
    import net.sf.jasperreports.engine.JRDataSource; 
    import net.sf.jasperreports.engine.JRException; 
    import net.sf.jasperreports.engine.JRExporterParameter; 
    import net.sf.jasperreports.engine.JasperFillManager; 
    import net.sf.jasperreports.engine.JasperPrint; 
    import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; 
    import net.sf.jasperreports.engine.export.JRPdfExporter; 
    
    public class GenerateReport { 
        public static final String REPORT_DIRECTORY = "c:\\reporting"; 
        public static void main(String[] args) throws IOException, JRException { 
        JRDataSource jrDataSource = prepareDataSource(); 
        JasperPrint jasperPrint = generateJasperReportPrint(jrDataSource,REPORT_DIRECTORY+"\\crosstabTest.jasper"); 
        JRPdfExporter pdfExporter = new JRPdfExporter(); 
        pdfExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint); 
        pdfExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, 
         REPORT_DIRECTORY + "//" + "test" + ".pdf"); 
        System.out.println("Exporting report..."); 
        pdfExporter.exportReport(); 
        System.out.println("Done!"); 
    
        } 
    
        private static JRDataSource prepareDataSource(){ 
        List<ApplicationStatus> applicationStatuses1 = new ArrayList<ApplicationStatus>(); 
        List<ApplicationStatus> applicationStatuses2 = new ArrayList<ApplicationStatus>(); 
        List<ApplicationStatus> applicationStatuses3 = new ArrayList<ApplicationStatus>(); 
        List<ApplicationType> applicationTypes1 = new ArrayList<ApplicationType>(); 
        List<ApplicationType> applicationTypes2 = new ArrayList<ApplicationType>(); 
        List<ApplicationType> applicationTypes3 = new ArrayList<ApplicationType>(); 
    
    
    
        applicationStatuses1.add(new ApplicationStatus(2,"Approved")) ; 
        applicationStatuses1.add(new ApplicationStatus(3,"Rejected")) ; 
        applicationStatuses1.add(new ApplicationStatus(4,"NSD Cleared")); 
    
        applicationStatuses2.add(new ApplicationStatus(10,"Approved")) ; 
        applicationStatuses2.add(new ApplicationStatus(5,"Rejected")) ; 
        applicationStatuses2.add(new ApplicationStatus(6,"NSD Cleared")); 
    
    
    
        ApplicationType applicationType1 = new ApplicationType(); 
        ApplicationType applicationType2 = new ApplicationType(); 
        ApplicationType applicationType3 = new ApplicationType(); 
        ApplicationType applicationType4 = new ApplicationType(); 
        applicationType1.setAppTypeId(1); 
        applicationType1.setAppName("Short Term"); 
        applicationType1.setApplicationStatuses(applicationStatuses1); 
    
        applicationType2.setAppTypeId(2); 
        applicationType2.setAppName("Long Term"); 
        applicationType2.setApplicationStatuses(applicationStatuses2); 
    
        applicationType3.setAppTypeId(3); 
        applicationType3.setAppName("Outpass"); 
        applicationType3.setApplicationStatuses(applicationStatuses1); 
    
    
        Employee employee1 = new Employee(); 
        Employee employee2 = new Employee(); 
        employee1.setEmployeeNo(1); 
        employee2.setEmployeeNo(2); 
        applicationTypes1.add(applicationType1); 
        applicationTypes1.add(applicationType2); 
        applicationTypes2.add(applicationType3); 
        employee1.setApplicationTypes(applicationTypes1); 
        employee2.setApplicationTypes(applicationTypes2); 
    
        List<Employee> employees = new ArrayList<Employee>(); 
        employees.add(employee1); 
        employees.add(employee2); 
    
        return new JRBeanCollectionDataSource(employees); 
        } 
    
        private static JasperPrint generateJasperReportPrint(JRDataSource dataSource, String reportPath) 
         throws JRException, IOException { 
        JasperPrint jasperPrint = null; 
        FileInputStream inputStream = null; 
        try { 
    
         inputStream = new FileInputStream(new File(reportPath)); 
         jasperPrint = JasperFillManager.fillReport(inputStream, new HashMap(), dataSource); 
        } 
        catch(IOException e) { 
    
         if (inputStream != null) { 
         try { 
          inputStream.close(); 
         } 
         catch(IOException e1) { 
          e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
         } 
         } 
        } 
        return jasperPrint; 
        } 
    } 
    
  • +0

    Pouvez-vous montrer quelque chose que vous avez déjà fait (modèle, * code Java *)? –

    +0

    @AlexK, je viens de faire l'exemple pojo et le programme pilote. c'est juste une donnée fictive, pas de service et tout est mis en œuvre. Laissez-moi éditer la question pour ajouter du code. – benz

    +0

    @AlexK, je ne pense pas que le design est même approprié pour être utilisé dans la conception de l'ireport lui-même. – benz

    Répondre

    0

    J'utiliser l'élément crosstab iReport pour agréger les données présentées ici et il devrait fonctionner très bien pour votre cas d'utilisation. En ce qui concerne votre structure de données, j'essaierais de la normaliser. Par conséquent, si vous possédez des objets imbriqués, traitez-les comme un objet unique et laissez iRapport les données agrégées en fonction des critères de regroupement du tableau croisé.

    Ce serait similaire si vous n'aviez même pas travaillé à partir d'un POJO et qu'il extrayait des données d'une base de données SQL. Vous auriez un sac d'enregistrements avec Emp Non, Emp Nom, Type d'application, Statut. De là, la conception du tableau croisé est relativement facile, passez par l'assistant (si vous utilisez iReport) spécifiez l'Emp Non comme groupe de lignes, le statut comme groupe de colonnes, spécifiez le nombre de statuts comme mesure d'agrégat, et Ajoutez le nom d'Emp, et le type d'application en tant que mesures avec rien comme votre calcul. Modifiez la disposition selon vos spécifications, et cela devrait fonctionner raisonnablement bien.

    Questions connexes