阅读:4591
回复:4
|
[产品需求]查询列表使用系统按钮进行逻辑删除
我们论坛里,已经有了一个查询列表逻辑删除的解决方案。
现在我这个方法和论坛里的稍微有一些不太一致的地方,那么就是通过我们系统的删除按钮,来进行逻辑删除。下面说一下实现的具体步骤以及部分代码。 注:以下所说的都是我们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为【未删除】的默认条件,并且不显示在画面上,这样我们在查询的时候,显示的所有记录都是未删除的记录。 |
1楼#
发布于:2016-07-14 09:59
另一个查询列表逻辑删除的解决方案:http://bbs.h3bpm.com/read.php?tid=178&fid=11,
有兴趣的可以对比看看 |
|
|
2楼#
发布于:2016-07-14 10:02
H3BPM:另一个查询列表逻辑删除的解决方案:http://bbs.h3bpm.com/read.php?tid=178&fid=11, |
|
3楼#
发布于:2016-07-14 10:03
请叫我红领巾
|
|
|
4楼#
发布于:2016-07-14 16:28
如果不是一定必要的话,不建议这样干哈,因为进行了代码修改,如果客户要产品升级,会比较麻烦
|
|
|