public static SReportTemplateTable GetTemplateVariants(String AReportType, String AAuthor, Boolean ADefaultOnly = false) { LoadTemplatesFromBackupFile(AReportType); SReportTemplateTable Tbl = new SReportTemplateTable(); SReportTemplateRow TemplateRow = Tbl.NewRowTyped(false); TemplateRow.ReportType = AReportType; TDBTransaction Transaction = null; DBAccess.GDBAccessObj.GetNewOrExistingAutoReadTransaction(IsolationLevel.ReadCommitted, TEnforceIsolationLevel.eilMinimum, ref Transaction, delegate { Tbl = SReportTemplateAccess.LoadUsingTemplate(TemplateRow, Transaction); }); String filter = String.Format("(s_author_c ='{0}' OR s_private_l=false)", AAuthor); if (ADefaultOnly) { filter += " AND (s_default_l=true OR s_private_default_l=true)"; } Tbl.DefaultView.RowFilter = filter; Tbl.DefaultView.Sort = (ADefaultOnly) ? "s_private_default_l DESC, s_default_l DESC" : "s_readonly_l DESC, s_default_l DESC, s_private_default_l DESC"; SReportTemplateTable Ret = new SReportTemplateTable(); Ret.Merge(Tbl.DefaultView.ToTable()); Ret.AcceptChanges(); return(Ret); }
public static SReportTemplateTable GetTemplateVariants(String AReportType, String AAuthor, Boolean ADefaultOnly = false) { SReportTemplateTable Tbl = new SReportTemplateTable(); SReportTemplateTable Ret = new SReportTemplateTable(); TDBTransaction Transaction = null; TDataBase dbConnection = new TDataBase(); try { dbConnection = TReportingDbAdapter.EstablishDBConnection(true, "GetTemplateVariants"); LoadTemplatesFromBackupFile(AReportType, dbConnection); dbConnection.BeginAutoReadTransaction( ref Transaction, delegate { SReportTemplateRow TemplateRow = Tbl.NewRowTyped(false); TemplateRow.ReportType = AReportType; Tbl = SReportTemplateAccess.LoadUsingTemplate(TemplateRow, Transaction); }); String filter = String.Format("(s_author_c ='{0}' OR s_private_l=false)", AAuthor); if (ADefaultOnly) { filter += " AND (s_default_l=true OR s_private_default_l=true)"; } Tbl.DefaultView.RowFilter = filter; if (Tbl.DefaultView.Count > 0) { Tbl.DefaultView.Sort = (ADefaultOnly) ? "s_private_default_l DESC, s_default_l DESC" : "s_readonly_l DESC, s_default_l DESC, s_private_default_l DESC"; } else // Something went wrong, but I'll try not to return empty-handed. { Tbl.DefaultView.RowFilter = ""; } Ret.Merge(Tbl.DefaultView.ToTable()); Ret.AcceptChanges(); } finally { dbConnection.CloseDBConnection(); } return(Ret); }
/// <summary> /// Called from a delegate set up by my constructor. /// Or if you're not using a reporting UI, you can call this directly, once the data and params have been set up. /// </summary> /// <param name="ACalc"></param> public void DesignReport(TRptCalculator ACalc) { ACalc.GetParameters().Add("param_design_template", true); if (FSelectedTemplate != null) { if (FDataGetter != null) { if (!FDataGetter(ACalc)) { return; } } FFastReportType.GetMethod("LoadFromString", new Type[] { FSelectedTemplate.XmlText.GetType() }).Invoke(FfastReportInstance, new object[] { FSelectedTemplate.XmlText }); LoadReportParams(ACalc); FFastReportType.GetMethod("Design", new Type[0]).Invoke(FfastReportInstance, null); // // The user can change the report template - if it's changed I'll update the server // (unless the template is read-only, in which case I'll need to make a copy.) object ret = FFastReportType.GetMethod("SaveToString", new Type[0]).Invoke(FfastReportInstance, null); String XmlString = (String)ret; // // I only want to check part of the report to assess whether it's changed, otherwise it always detects a change // (the modified date is changed, and the parameters may also be different.) Boolean TemplateChanged = false; Int32 Page1Pos = XmlString.IndexOf("<ReportPage"); Int32 PrevPage1Pos = FSelectedTemplate.XmlText.IndexOf("<ReportPage"); if ((Page1Pos < 1) || (PrevPage1Pos < 1)) { TemplateChanged = true; } else { if (XmlString.Substring(Page1Pos) != FSelectedTemplate.XmlText.Substring(PrevPage1Pos)) { TemplateChanged = true; } } if (TemplateChanged) { Boolean MakeACopy = false; if (FSelectedTemplate.Readonly) { if (MessageBox.Show( String.Format(Catalog.GetString("{0} cannot be ovewritten.\r\nMake a copy instead?"), FSelectedTemplate.ReportVariant), Catalog.GetString("Design Template"), MessageBoxButtons.YesNo) == DialogResult.No) { return; } MakeACopy = true; } else { if (MessageBox.Show( String.Format(Catalog.GetString("Save changes to {0}?"), FSelectedTemplate.ReportVariant), Catalog.GetString("Design Template"), MessageBoxButtons.YesNo) == DialogResult.No) { return; } } SReportTemplateTable TemplateTable = new SReportTemplateTable(); SReportTemplateRow NewRow = TemplateTable.NewRowTyped(); DataUtilities.CopyAllColumnValues(FSelectedTemplate, NewRow); TemplateTable.Rows.Add(NewRow); if (MakeACopy) { NewRow.TemplateId = -1; // The value will come from the sequence NewRow.ReportVariant = "Copy of " + TemplateTable[0].ReportVariant; NewRow.Readonly = false; NewRow.Default = false; NewRow.PrivateDefault = false; } else { TemplateTable.AcceptChanges(); // Don't allow this one-row table to be seen as "new" } NewRow.XmlText = XmlString; SReportTemplateTable Tbl = TRemote.MReporting.WebConnectors.SaveTemplates(TemplateTable); Tbl.AcceptChanges(); SetTemplate(Tbl[0]); } } if (FPetraUtilsObject != null) { FPetraUtilsObject.UpdateParentFormEndOfReport(); } }
public static SReportTemplateTable GetTemplateVariants(String AReportType, String AAuthor, Boolean ADefaultOnly = false) { LoadTemplatesFromBackupFile(AReportType); SReportTemplateTable Tbl = new SReportTemplateTable(); SReportTemplateRow TemplateRow = Tbl.NewRowTyped(false); TemplateRow.ReportType = AReportType; TDBTransaction Transaction = DBAccess.GDBAccessObj.BeginTransaction(IsolationLevel.ReadCommitted); Tbl = SReportTemplateAccess.LoadUsingTemplate(TemplateRow, Transaction); DBAccess.GDBAccessObj.RollbackTransaction(); String filter = String.Format("(s_author_c ='{0}' OR s_private_l=false)", AAuthor); if (ADefaultOnly) { filter += " AND (s_default_l=true OR s_private_default_l=true)"; } Tbl.DefaultView.RowFilter = filter; Tbl.DefaultView.Sort = (ADefaultOnly) ? "s_private_default_l DESC, s_default_l DESC" : "s_readonly_l DESC, s_default_l DESC, s_private_default_l DESC"; SReportTemplateTable Ret = new SReportTemplateTable(); Ret.Merge(Tbl.DefaultView.ToTable()); Ret.AcceptChanges(); return Ret; }