批量修改列表单据日期插件的实践原创
金蝶云社区-abstrct
abstrct
3人赞赏了该文章 66次浏览 未经作者许可,禁止转载编辑于2024年11月01日 10:54:43
  1. 参考帖子:25.1、列表插件,批改,批量更新,物料属性批量修改125.2、列表插件,批改,批量更新,物料属性批量修改2

  2. 对此插件进行了一次开发实践。

  3. 先说开发过程中遇到的问题,以及评论中出现的问题的分析

  4. length-1的问题,这个确实是需要-1,因为拼接了一个逗号,-1代码出现问题的,大概率是FID没有拼接逗号的原因。

    1730428554336.png

    5.dateset的替代方法:dateset因为已经弃用,按照源码来的话,执行是有问题的,即无返回结果。

    这边建议使用DBUtils.ExecuteDynamicObject来使用。返回的数据每一行即为doc[0],doc[1].....,然后doc[0]["对应字段"]即可返回查询的值。


  5.  [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人打赏
还没有人打赏,快来当第一个打赏的人吧!