阅读:4184 回复:4
实名用户_67af3ddc
9

帖子

28

跟帖

565

积分

高级榴莲
高级榴莲

[已解决]关于H3数据库插件取数据问题 OThinker.H3.WorkSheet

楼主#
更多 发布于:2017-01-16 16:22
打印模板里面获取子表内容方法

/// <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年的数据,当前插件怎么实现排序取数据,怎么用,请大拿指导

最新喜欢:

上善若水上善若水
实名用户_67af3ddc
9

帖子

28

跟帖

565

积分

高级榴莲
高级榴莲
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的学习资料太少,只能自己摸索,不过你提供了一个查询数据库的方式供我借鉴,我直接操作数据库处理了这问题,谢谢你的回复
武汉技术支持团队
40

帖子

1181

跟帖

3860

积分

论坛版主
论坛版主
2楼#
发布于: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();
上善若水
17

帖子

1282

跟帖

12345

积分

管理员
管理员
  • 社区居民
3楼#
发布于:2017-01-17 08:56
武汉技术支持团队:1、先直接写一个SQL语句,把近3年排序后的数据读取出来
2、在调用子表接口加载数据
3、示例:
var monthly = DateTime.Now.Month;
            var selectsql = string.Fo...
回到原帖
H3 BPM 让天下没有难用的流程。全国统一服务热线 :400-889-8625
秦始皇
167

帖子

1099

跟帖

19415

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
4楼#
发布于:2017-01-17 14:58
实名用户_67af3ddc
9

帖子

28

跟帖

565

积分

高级榴莲
高级榴莲
5楼#
发布于:2017-01-17 20:41
不知道要怎么用才能让this.ActionContext能够操作,因为打印模板的父类好像没有这个操作
namespace OThinker.H3.Portal
{
    /// <summary>
    /// 默认表单
    /// </summary>
    public partial class SheetPrint : SheetPage

H3的学习资料太少,只能自己摸索,不过你提供了一个查询数据库的方式供我借鉴,我直接操作数据库处理了这问题,谢谢你的回复
游客

返回顶部