批量修改列表单据日期插件的实践原创
3人赞赏了该文章
66次浏览
编辑于2024年11月01日 10:54:43
参考帖子:25.1、列表插件,批改,批量更新,物料属性批量修改1,25.2、列表插件,批改,批量更新,物料属性批量修改2
对此插件进行了一次开发实践。
先说开发过程中遇到的问题,以及评论中出现的问题的分析
length-1的问题,这个确实是需要-1,因为拼接了一个逗号,-1代码出现问题的,大概率是FID没有拼接逗号的原因。
5.dateset的替代方法:dateset因为已经弃用,按照源码来的话,执行是有问题的,即无返回结果。
这边建议使用DBUtils.ExecuteDynamicObject来使用。返回的数据每一行即为doc[0],doc[1].....,然后doc[0]["对应字段"]即可返回查询的值。
[Description("批量修改日期"),Kingdee.BOS.Util.HotUpdate] public class UpdateDateForm:AbstractDynamicFormPlugIn { object FID; object Ftype; string sql; string sql2; DynamicObjectCollection doc; DynamicObjectCollection doc2; public override void OnLoad(EventArgs e) { base.OnLoad(e); FID = this.View.OpenParameter.GetCustomParameter("FID"); this.View.Model.SetValue("FID", FID.ToString()); } public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); IOperationResult operation=new OperationResult(); if (e.BarItemKey == "SRWX_BATCH_UPDATE") { string[] strFID; strFID=this.View.Model.GetValue("FID").ToString().Split(','); for (int i = 0; i < strFID.Length; i++) { sql = "/*dialect */ UPDATE T_AP_PAYBILL SET FDATE='" + this.Model.DataObject["FDATE"].ToString() + "' WHERE FID=" + strFID[i]; sql2 = "/*dialect */ select FBILLNO FROM T_AP_PAYBILL WHERE FID=" + strFID[i]; doc = DBUtils.ExecuteDynamicObject(this.Context, sql); doc2 = DBUtils.ExecuteDynamicObject(this.Context, sql2); //DataSet ds = DBUtils.ExecuteDataSet(this.Context, sql); //dt.Table[0] = itemDataTabl.ToList(); if (doc2.Count > 0) { operation.OperateResult.Add(new OperateResult() { Name = "更新" + doc2[0]["FBILLNO"].ToString(), Message = "更新成功!", MessageType = MessageType.Normal, SuccessStatus = true }); } this.View.ShowOperateResult(operation.OperateResult); } } } }
6.总结:BOS设计过程,参考帖子,这里不再详述。帖子的字符长度问题,已经截图说明。即传过去的字符格式为: FID1,FID2,FID3......(末尾没有逗号) 接收到字符已逗号分割获取FID数组,循环数组。length-1然后有问题的,检查下上面FID有没有拼接逗号FID=FID+ID[i].ToString()+",";
sql执行问题或者说dateset弃用问题,建议使用DynamicObjectCollection来替代。数据结构已在上面说明。最好插件注册记得是注册两个,一个是列表,一个在新增的动态表单上。
赞 3
3人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读