阅读:5171
回复:4
|
[已解决]关于H3数据库插件取数据问题 OThinker.H3.WorkSheet
打印模板里面获取子表内容方法
/// <summary> /// 获取子表内容 /// </summary> /// <param name="rowTemplate"></param> /// <returns></returns> private string GetGridValue(string rowTemplate) { // 获取第一个业务对象数组数据项 string[] fields = rowTemplate.ToString().Split(new string[] { "{" }, StringSplitOptions.None); if (fields.Length == 1) return rowTemplate; string bizObjectField = string.Empty; // 业务对象数组编码 for (int i = 1; i < fields.Length; i++) { bizObjectField = fields.Substring(0, fields.IndexOf("}")); if (bizObjectField.IndexOf(".") > 0) bizObjectField = bizObjectField.Substring(0, bizObjectField.IndexOf(".")); if (this.Enviroment.InstanceData[bizObjectField] != null && this.Enviroment.InstanceData[bizObjectField].LogicType == Data.DataLogicType.BizObjectArray) { break; } bizObjectField = string.Empty; } // 没有找到业务对象数组数据项 if (bizObjectField == string.Empty) return rowTemplate; BizObject[] bizObjects = this.Enviroment.InstanceData[bizObjectField].Value as BizObject[]; if (bizObjects == null || bizObjects.Length == 0) return string.Empty; StringBuilder gridContent = new StringBuilder(); string field; foreach (BizObject obj in bizObjects) { for (int i = 0; i < fields.Length; i++) { if (i == 0 || fields.IndexOf("}") == -1) { gridContent.Append(fields); continue; } field = fields.Substring(0, fields.IndexOf("}")); if (field.IndexOf(".") > 0) field = field.Substring(field.IndexOf(".") + 1); gridContent.Append(GetBizObjectFieldValue(obj, field)); gridContent.Append(fields.Substring(fields.IndexOf("}") + 1)); } } return gridContent.ToString(); } 其中, BizObject[] bizObjects = this.Enviroment.InstanceData[bizObjectField].Value as BizObject[]; if (bizObjects == null || bizObjects.Length == 0) return string.Empty; 这里表示从数据库中取数据,当前项目数据库里面数据按年度录入,但是只需要显示近3年的数据,当前插件怎么实现排序取数据,怎么用,请大拿指导 |
最新喜欢:![]() |
1楼#
发布于:2017-01-17 20:41
帖内置顶 – – 2017-01-23 13:59
不知道要怎么用才能让this.ActionContext能够操作,因为打印模板的父类好像没有这个操作
namespace OThinker.H3.Portal { /// <summary> /// 默认表单 /// </summary> public partial class SheetPrint : SheetPage H3的学习资料太少,只能自己摸索,不过你提供了一个查询数据库的方式供我借鉴,我直接操作数据库处理了这问题,谢谢你的回复 |
|
2楼#
发布于:2017-01-17 20:41
不知道要怎么用才能让this.ActionContext能够操作,因为打印模板的父类好像没有这个操作
namespace OThinker.H3.Portal { /// <summary> /// 默认表单 /// </summary> public partial class SheetPrint : SheetPage H3的学习资料太少,只能自己摸索,不过你提供了一个查询数据库的方式供我借鉴,我直接操作数据库处理了这问题,谢谢你的回复 |
|
4楼#
发布于:2017-01-17 08:56
|
|
|
5楼#
发布于:2017-01-16 17:52
1、先直接写一个SQL语句,把近3年排序后的数据读取出来
2、在调用子表接口加载数据 3、示例: var monthly = DateTime.Now.Month; var selectsql = string.Format(@"SELECT t1.Yearly, t1.Monthly, t1.BudgetUnitName, t1.BudgetUnitCode, t1.BudgetItemName, t1.BudgetItemCode, t1.Budget FROM XL_YS_BudgetPay t1 WHERE t1.Yearly = {0} --AND Monthly > {1} AND t1.BudgetUnitCode = '{2}' AND BudgetItemCode = '{3}' ORDER BY Monthly", yearly, monthly, budgetunitcode, budgetitemcode); var dt = OThinker.H3.WorkSheet.AppUtility.Engine.Query.QueryTable(selectsql); var list = new List<BizObject>(); var monthlist = new List<string> { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "December" }; if (dt.Rows.Count > 0) { //DeptCostBudgetInfo 为子表名称 BizObjectSchema childSchema = this.ActionContext.Schema.GetProperty("DeptCostBudgetInfo").ChildSchema; var bizObject = new BizObject(this.ActionContext.Engine, childSchema, this.ActionContext.User.UserID); bizObject["DataType"] = "原始"; bizObject["BudgetItemName"] = dt.Rows[0]["BudgetItemName"].ToString(); bizObject["BudgetItemCode"] = dt.Rows[0]["BudgetItemCode"].ToString(); var bizObject2 = new BizObject(this.ActionContext.Engine, childSchema, this.ActionContext.User.UserID); bizObject2["DataType"] = "修改"; bizObject2["BudgetItemName"] = dt.Rows[0]["BudgetItemName"].ToString(); bizObject2["BudgetItemCode"] = dt.Rows[0]["BudgetItemCode"].ToString(); for (int i = 0; i < monthlist.Count; i++) { bizObject[monthlist] = dt.Rows["Budget"].ToString(); bizObject2[monthlist] = dt.Rows["Budget"].ToString(); } list.Add(bizObject); list.Add(bizObject2); } if (bos != null) { if (bos.Length > 1) { list.AddRange(bos); } } this.ActionContext.InstanceData["DeptCostBudgetInfo"].Value = list.ToArray(); ActionContext.InstanceData.Submit(); |
|