private void Page_Load(object sender, System.EventArgs e) { CrystalDecisions.Enterprise.SessionMgr boSessionMgr; CrystalDecisions.Enterprise.InfoStore boInfoStore; CrystalDecisions.Enterprise.EnterpriseService boEnterpriseService; CrystalDecisions.Enterprise.InfoObjects boInfoObjects; string boReportName; string boQuery; CrystalDecisions.ReportAppServer.ClientDoc.ReportAppFactory boReportAppFactory; CrystalDecisions.ReportAppServer.DataDefModel.ParameterField boParameterField; CrystalDecisions.ReportAppServer.ReportDefModel.Section boSection; CrystalDecisions.ReportAppServer.ReportDefModel.FieldObject boFieldObject; if (Session["boEnterpriseSession"] != null) { boEnterpriseSession = (CrystalDecisions.Enterprise.EnterpriseSession)Session["boEnterpriseSession"]; } else { //Log on to the Enterprise CMS boSessionMgr = new CrystalDecisions.Enterprise.SessionMgr(); boEnterpriseSession = boSessionMgr.Logon(Request.QueryString["username"], Request.QueryString["password"], Request.QueryString["cms"], Request.QueryString["authtype"]); Session.Add("boEnterpriseSession", boEnterpriseSession); } //get report object from session or create a new report object if (Session["boReportClientDocument"] != null) { boReportClientDocument = (CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocument)Session["boReportClientDocument"]; } else { boEnterpriseService = boEnterpriseSession.GetService("", "InfoStore"); boInfoStore = new CrystalDecisions.Enterprise.InfoStore(boEnterpriseService); boReportName = "SimpleRCAPIReport.rpt"; //Retrieve the report object from the InfoStore, only need the SI_ID for RAS boQuery = "Select SI_ID From CI_INFOOBJECTS Where SI_NAME = '" + boReportName + "' AND SI_Instance=0"; boInfoObjects = boInfoStore.Query(boQuery); boInfoObject = boInfoObjects[1]; boEnterpriseService = null; //Retrieve the RASReportFactory boEnterpriseService = boEnterpriseSession.GetService("RASReportFactory"); boReportAppFactory = (CrystalDecisions.ReportAppServer.ClientDoc.ReportAppFactory)boEnterpriseService.Interface; //Open the report from Enterprise boReportClientDocument = boReportAppFactory.OpenDocument(boInfoObject.ID, 0); //Create a parameter field. boParameterField = new CrystalDecisions.ReportAppServer.DataDefModel.ParameterField(); //Set its name. boParameterField.Name = "boParameterField"; //set its type. boParameterField.Type = CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeStringField; //add it to the report definition. boReportClientDocument.DataDefController.ParameterFieldController.Add(boParameterField); //This will not prompt as the parameter is not yet in use. We will have to add it to the report first //get the section we want to use. In this case the report header. boSection = boReportClientDocument.ReportDefController.ReportDefinition.ReportHeaderArea.Sections[0]; //Create a new field object. boFieldObject = new CrystalDecisions.ReportAppServer.ReportDefModel.FieldObject(); //set where to get the data from. (The parameter field name.) boFieldObject.DataSourceName = "{?boParameterField}"; //set the type. boFieldObject.FieldValueType = CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeStringField; //set the location boFieldObject.Top = 120; boFieldObject.Left = 3000; //set the size boFieldObject.Height = 240; boFieldObject.Width = 2115; //set the font info. boFieldObject.FontColor = new CrystalDecisions.ReportAppServer.ReportDefModel.FontColor(); boFieldObject.FontColor.Font.Name = "Arial"; boFieldObject.FontColor.Font.Size = 10; //set the alignment boFieldObject.Format.HorizontalAlignment = CrystalDecisions.ReportAppServer.ReportDefModel.CrAlignmentEnum.crAlignmentLeft; //add the field to the report header. boReportClientDocument.ReportDefController.ReportObjectController.Add(boFieldObject, boSection, -1); //Add the reportClientDocument to session Session.Add("boReportClientDocument", boReportClientDocument); } //Set the ReportSource of the viewer to the report in Session boCrystalReportViewer.ReportSource = Session["boReportClientDocument"]; }
private static void TransformReportTest() { var rpt = new ReportDocument(); rpt.Load(@"Reports\SimpleReport.rpt"); var doc = rpt.ReportClientDocument; // var fieldObjects = rpt.ReportDefinition.ReportObjects.OfType<FieldObject>().ToList(); var fields = doc.ReportDefController.ReportObjectController.GetReportObjectsByKind(CrystalDecisions.ReportAppServer.ReportDefModel.CrReportObjectKindEnum.crReportObjectKindField); // var q = doc.ReportDefController.ReportDefinition.DetailArea.Sections.Count; var textObject = new CrystalDecisions.ReportAppServer.ReportDefModel.TextObject(); var sectionStart = doc.ReportDefController.ReportDefinition.DetailArea.Sections[0]; sectionStart.Format.BackgroundColor = 16; var fontColor = new CrystalDecisions.ReportAppServer.ReportDefModel.FontColor(); var font = new CrystalDecisions.ReportAppServer.ReportDefModel.Font(); font.Bold = true; font.Name = "Arial"; fontColor.Font = font; fontColor.Color = 0; var header1 = new CrystalDecisions.ReportAppServer.ReportDefModel.FieldHeadingObject(); header1.FieldObjectName = "headerPole"; header1.FontColor = fontColor; // doc.ReportDefController.ReportObjectController.Add(textObject, sectionStart, -1); foreach (CrystalDecisions.ReportAppServer.ReportDefModel.ISCRReportObject fieldObject in fields) { // Utworzenie nowej sekcji CrystalDecisions.ReportAppServer.ReportDefModel.Section newSection = new CrystalDecisions.ReportAppServer.ReportDefModel.Section(); newSection.Kind = CrystalDecisions.ReportAppServer.ReportDefModel.CrAreaSectionKindEnum.crAreaSectionKindDetail; newSection.Name = "Detail" + fieldObject.Name; newSection.Height = 300; newSection.Width = 11520; // var area = doc.ReportDefController.ReportDefinition.DetailArea; var index = fields.FindIndexOf(fieldObject); if (index % 2 == 0) { newSection.Format.BackgroundColor = 14803425; } doc.ReportDefController.ReportSectionController.Add(newSection, doc.ReportDefController.ReportDefinition.DetailArea, -1); fieldObject.Format.HorizontalAlignment = CrystalDecisions.ReportAppServer.ReportDefModel.CrAlignmentEnum.crAlignmentLeft; fieldObject.Left = 200; fieldObject.Top = 0; fieldObject.Width = 6 * 1440; // Przesuwamy pole doc.ReportDefController.ReportObjectController.Remove(fieldObject); doc.ReportDefController.ReportObjectController.Add(fieldObject, newSection); } // Utworzenie grupy var group = new CrystalDecisions.ReportAppServer.DataDefModel.Group(); var tableIndex = doc.DatabaseController.Database.Tables.FindByAlias("Orzeczenia"); var table = (CrystalDecisions.ReportAppServer.DataDefModel.Table)doc.DatabaseController.Database.Tables[tableIndex]; // Pobranie pola z raportu var field = (CrystalDecisions.ReportAppServer.DataDefModel.Field)table.DataFields.FindField("{Orzeczenia.OsobaId}", CrystalDecisions.ReportAppServer.DataDefModel.CrFieldDisplayNameTypeEnum.crFieldDisplayNameFormula, CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleUserDefault); // Ustawienie pola do grupowania group.ConditionField = field; // Dodanie grupy do raportu doc.DataDefController.GroupController.Add(-1, group); // Dodanie pola z bazy danych var field2 = new CrystalDecisions.ReportAppServer.ReportDefModel.FieldObject(); field2.DataSourceName = "{Orzeczenia.OsobaId}"; field2.FieldValueType = CrystalDecisions.ReportAppServer.DataDefModel.CrFieldValueTypeEnum.crFieldValueTypeInt32sField; field2.Left = 4 * 1440; //1440 twips per inch field2.Width = 3 * 1440; field2.FontColor = new CrystalDecisions.ReportAppServer.ReportDefModel.FontColor(); field2.FontColor.Font.Name = "Arial"; field2.FontColor.Font.Size = 10; field2.Format.HorizontalAlignment = CrystalDecisions.ReportAppServer.ReportDefModel.CrAlignmentEnum.crAlignmentLeft; // var sectionStart = doc.ReportDefController.ReportDefinition.DetailArea.Sections[0]; var groupSection = doc.ReportDefController.ReportDefinition.GroupHeaderArea[0].Sections[0]; //Add the object to the report doc.ReportDefController.ReportObjectController.Add(field2, groupSection, -1); rpt.SaveAs(@"Reports\TransformReport.rpt"); rpt.ExportToDisk(ExportFormatType.PortableDocFormat, "TransformReport.pdf"); rpt.Close(); rpt.Dispose(); System.Diagnostics.Process.Start("TransformReport.pdf"); }