阅读:4591 回复:4
Koy
Koy
12

帖子

62

跟帖

869

积分

高级榴莲
高级榴莲
  • 社区居民

[产品需求]查询列表使用系统按钮进行逻辑删除

楼主#
更多 发布于:2016-07-14 09:23
我们论坛里,已经有了一个查询列表逻辑删除的解决方案。
现在我这个方法和论坛里的稍微有一些不太一致的地方,那么就是通过我们系统的删除按钮,来进行逻辑删除。下面说一下实现的具体步骤以及部分代码。


注:以下所说的都是我们H3代码下的路径
1.在Ajax-->BizObjectHander.ashx文件中,找到InvokeMethod方法,红色标记的代码就是本次修改的代码:

  void InvokeMethod()
        {
            string BizSchemaCode = CurrentParams["BizSchemaCode"];
            string BizObjectID = CurrentParams["BizObjectID"];
            string MethodName = CurrentParams["MethodName"];

            OThinker.H3.DataModel.BizObject BizObject = new OThinker.H3.DataModel.BizObject(
                this.Engine.Organization,
                this.Engine.MetadataRepository,
                this.Engine.BizObjectManager,
                this.Engine.BizObjectManager.GetPublishedSchema(BizSchemaCode),
                thisUserValidator.UserID,
                thisUserValidator.User.ParentID);
            BizObject.ObjectID = BizObjectID;
            BizObject.Load();

            if (BizObject != null)
            {
               // Add By Koy 2016-05-12 Start---------------------------
                // 获取当前模版的表名
                string strTableName = this.Engine.BizObjectManager.GetPublishedSchema(BizSchemaCode).TableName;
                // ----------------------End-----------------------------

                //校验权限
                if (//MethodName == OThinker.H3.DataModel.BizObjectSchema.MethodName_Update||
                    MethodName == OThinker.H3.DataModel.BizObjectSchema.MethodName_Remove)
                {

                    if (!this.UserValidator.ValidateBizObjectAdmin(BizSchemaCode, "", BizObject.OwnerId))
                    {
                        string[] Errors = new string[] { "无管理权限" };
                        CurrentContext.Response.Write(JSSerializer.Serialize((new { Result = false, Errors = Errors })));
                    }
                    else
                    {
                        // Add By Koy 2016-05-12 Start---------------------------
                        // 根据Table名称的表头来判断是否属于自定义的业务表
                        if (strTableName.Contains("I_CSS_"))
                        {                            
                            logicaldelete(BizObjectID, strTableName);
                        }
                        else
                        {
                            BizObject.Invoke(MethodName);
                        }
                        // 原代码
                        // BizObject.Invoke(MethodName);
                        // ----------------------End-----------------------------


                        
                        //this.Engine.BizObjectManager.InvokeBizObjectMethod(this.UserValidator.UserID, OThinker.Data.BoolMatchValue.False, BizSchemaCode, true, BizObject.BizObjectType, BizObjectID, MethodName, null);
                        CurrentContext.Response.Write(JSSerializer.Serialize((new { Result = true, NeedRefresh = true })));
                    }
                }
                else
                {
                   // Add By Koy 2016-05-12 Start---------------------------
                    // 根据Table名称的表头来判断是否属于自定义的业务表
                    if (strTableName.Contains("I_CSS_"))
                    {
                        logicaldelete(BizObjectID, strTableName);                        
                    }
                    else
                    {
                        BizObject.Invoke(MethodName);
                    }
                    // 原代码
                    // BizObject.Invoke(MethodName);
                    // ----------------------End-----------------------------    
               

                    CurrentContext.Response.Write(JSSerializer.Serialize((new { Result = true })));
                }
            }
            else
            {
                CurrentContext.Response.Write(JSSerializer.Serialize((new { Result = false })));
            }
        }



2.在Ajax-->BizObjectHander.ashx文件中,添加自定义逻辑删除方法。
       /// <summary>
        /// 自定义添加逻辑删除方法
        /// </summary>
        /// <param name="strObjectID" />主键ID</param />
        /// <param name="strTableName" />表名</param />
        void logicaldelete(string strObjectID, string strTableName)
        {
            MasterClass.LogicalDelete(strObjectID, strTableName);
        }





3.在自定义的Class类里边添加要更新的字段,其实就是将一个字段设置为0或者1来表示是否已删除的Flag,下边是我的代码:

        /// <summary>
        /// 逻辑删除数据
        /// </summary>
        /// <param name="strObjID" />主键</param />
        /// <param name="strTableName" />表名</param />
        /// <returns></returns>
        public static void LogicalDelete(string strObjectID, string strTableName)
        {
            string strSql = string.Empty;
            strSql = string.Format("update {0} set CState='0' where ObjectID='{1}'", strTableName, strObjectID);
            SqlFunction.ExecuteNonQuery(strSql);
        }



4.在我们H3后台设置查询列表的时候,直接设置该删除标志Flag为【未删除】的默认条件,并且不显示在画面上,这样我们在查询的时候,显示的所有记录都是未删除的记录。

最新喜欢:

YuliaYulia H3BPMH3BPM 上善若水上善若水
H3BPM
655

帖子

2504

跟帖

46410

积分

管理员
管理员
  • 社区居民
1楼#
发布于:2016-07-14 09:59
另一个查询列表逻辑删除的解决方案:http://bbs.h3bpm.com/read.php?tid=178&fid=11
有兴趣的可以对比看看
10月签到活动奖励发放啦:http://bbs.h3bpm.com/read.php?tid=5377&fid=5
Koy
Koy
12

帖子

62

跟帖

869

积分

高级榴莲
高级榴莲
  • 社区居民
2楼#
发布于:2016-07-14 10:02
H3BPM:另一个查询列表逻辑删除的解决方案:http://bbs.h3bpm.com/read.php?tid=178&fid=11
有兴趣的可以对比看看
回到原帖
H3BPM
655

帖子

2504

跟帖

46410

积分

管理员
管理员
  • 社区居民
3楼#
发布于:2016-07-14 10:03
请叫我红领巾
10月签到活动奖励发放啦:http://bbs.h3bpm.com/read.php?tid=5377&fid=5
H3产品支持_开心
61

帖子

154

跟帖

8473

积分

铂金榴莲
铂金榴莲
  • 社区居民
4楼#
发布于:2016-07-14 16:28
如果不是一定必要的话,不建议这样干哈,因为进行了代码修改,如果客户要产品升级,会比较麻烦
Stay hungry. Stay foolish.
游客

返回顶部