下面是小编为大家整理的打印开发流程及规范,供大家参考。
打印开发流程及规范
步骤:
新建解决方案—>分析项目组、分析项目
新建报表(命名规则:实体名+Print)
建立数据源、数据查询信息,选择打印的实体,布局要打印的信息,包括表头、表体等信息。
执行打印预览,确定无误后,发布打印模型,按照向导建立打印发布路径,在根目录下的AM下建立相应的文件夹,确定发布路径(主要是注名实体Key,格式如:UFIDA.U9.Cust.TY.AM.Chop.ChopCarryScheme)建议用实体全名以保证唯一。此内容是对应打印参照的分类标识。
新建打印模型容器
创建打印参照。模型源数据管理—>连接到打印元数据库,选择发布的报表,创建打印参照。
导出打印参照元数据,将导出的数据将文件拷贝的 U9Data 视图特定位置:
ApplicationServer\Libs\SqlScript\ReportMetaData\Print
目录下
建立与UI 的关联。在UI界面的Action中的Extend的打印事件加入代码,如下所示:
private void PrintClick_Extend(object sender, UIActionEventArgs e)
{
IExportSettings settings = ExportServiceFactory.GetInstance().CreateExportSettingsObject();
settings.PrintTemplateCatalogType = "UFIDA.U9.Cust.TY.AM.Chop.ChopCarryScheme";
settings.UserDataCallBack = new DataCallBackHandle(this.GetPrintData);
e.Tag = settings;
//调用模版定义的默认实现方法.如需扩展,请直接在此编程.
this.PrintClick_DefaultImpl(sender,e);
}
/// 打印模板产生
/// </summary>
/// <param name="tempalteID"></param>
/// <returns></returns>
public void GetPrintData(object sender, DataCallBackEventArgs args)
{
DataSet returnDataSet = null;
switch (args.PrintTemplateID)
{
//打印参照模版ID
case "ce4f2ccf-fb06-4aac-b416-fd6ef13197d1":
{
returnDataSet = this.GetOrderDocData();
}
break;
default:
break;
}
args.ReturnData = returnDataSet;
}
private DataSet GetOrderDocData()
{
DataSet returnDataSet = new DataSet();
DataTable tableTest = new DataTable();
tableTest.Columns.Add("ChopCarryScheme_SchemeNo");
tableTest.Columns.Add("ChopCarryScheme_SchemeDate");
tableTest.Columns.Add("ChopCarryScheme_ChopCarrySchemeLine_SchemeFactor");
tableTest.Columns.Add("ChopCarryScheme_ChopCarrySchemeLine_OrderBy");
tableTest.Columns.Add("ChopCarryScheme_ChopCarrySchemeLine_AscDes");
ChopCarrySchemeRecord header = this.CurrentModel.ChopCarryScheme.FocusedRecord;
#region 对枚举类型的处理 begin
GetEnumExtValueInfoProxy getEnumExtValueInfoProxy = new GetEnumExtValueInfoProxy();
getEnumExtValueInfoProxy.EnumFullName = "UFIDA.U9.Cust.TY.AM.Chop.ChopBE.ChopCarryScheme.SchemeFactorEnum";
List<EnumExtValueInfoDTOData> result = getEnumExtValueInfoProxy.Do();
getEnumExtValueInfoProxy.EnumFullName = "UFIDA.U9.Cust.TY.AM.Chop.ChopBE.ChopCarryScheme.AscDesEnum";
List<EnumExtValueInfoDTOData> result2 = getEnumExtValueInfoProxy.Do();
#endregion 对枚举类型的处理 end
foreach (ChopCarryScheme_ChopCarrySchemeLineRecord record in this.CurrentModel.ChopCarryScheme_ChopCarrySchemeLine.Records)
{
DataRow row = tableTest.NewRow();
row["ChopCarryScheme_SchemeNo"] = header["SchemeNo"];
row["ChopCarryScheme_SchemeDate"] = header["SchemeDate"];
row["ChopCarryScheme_ChopCarrySchemeLine_SchemeFactor"] = result[int.Parse(record["SchemeFactor"].ToString())].Name;
row["ChopCarryScheme_ChopCarrySchemeLine_OrderBy"] = record["OrderBy"];
row["ChopCarryScheme_ChopCarrySchemeLine_AscDes"] = result2[int.Parse(record["AscDes"].ToString())].Name;
tableTest.Rows.Add(row);
}
returnDataSet.Tables.Add(tableTest);
return returnDataSet;
}
注:执行该代码时要增加IExportSettings的引用UFSoft.UBF.ExportService;
GetEnumExtValueInfoProxy的引用 UFIDA.U9.Cust.TY.AM.CBO.PubBP.GetEnumExtBP.Proxy和 UFIDA.U9.Cust.TY.AM.CBO.PubBP.GetEnumExtBP;
UFIDA.UBF.MD.Business.ExtEnumType
internal partial class GetEnumExtValueInfoImpementStrategy : BaseStrategy
{
public GetEnumExtValueInfoImpementStrategy() { }
public override object Do(object obj)
{
GetEnumExtValueInfo bpObj = (GetEnumExtValueInfo)obj;
if (bpObj == null) return null;
ExtEnumType enumType = ExtEnumType.Finder.Find("Code=@Code", new OqlParam("Code", bpObj.EnumFullName));
if (enumType == null) return null;
List<EnumExtValueInfoDTO> enumValueDTOs = new List<EnumExtValueInfoDTO>();
EnumExtValueInfoDTO enumValueDTO = null;
foreach (ExtEnumValue enumValue in enumType.ExtEnumValues)
{
enumValueDTO = new EnumExtValueInfoDTO();
enumValueDTO.Code = enumValue.Code;
enumValueDTO.Name = enumValue.Name;
enumValueDTO.Value = enumValueDTO.Value;
enumValueDTOs.Add(enumValueDTO);
}
return enumValueDTOs;
}
}