当前位置: 首页 > article >正文

金蝶云星空表单插件单据体批量删除,序号自增

文章目录

  • 金蝶云星空表单插件单据体批量删除,序号自增
    • 字段标识说明
    • 表单插件
    • 获取单据体数据包
    • 移除物料为空的行
    • 其他移除物料为空的行的方式,但是测试不通过,不建议使用
    • 序号重新生成
    • 测试

金蝶云星空表单插件单据体批量删除,序号自增

字段标识说明

单据体标识:FEntity
序号标识:Seq
物料标识:F_XXXX_MaterialId
【一键删除】操作标识:CleanEmptyEntity

表单插件

在这里插入图片描述

获取单据体数据包

//获取单据体,为空提示操作失败
var entityD = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
if (entityD==null || entityD.Count<=0)
{
    e.Cancel = true;
    base.View.ShowErrMessage("明细信息为空,无需操作。");
    break;
}
//不为空时,将物料为空的行全部删除,如果没有为空的行,那就提示操作失败
var canEntity = entityD.Where(s=>(s["F_XXXX_MaterialId_Id"]+"").Equals("0")).ToList();
if (canEntity == null || canEntity.Count <= 0)
{
    e.Cancel = true;
    base.View.ShowErrMessage("明细信息全部有效,无需操作。");
    break;
}

移除物料为空的行

 //循环删除分录1 测试通过
for (int i = entityD.Count - 1; i >= 0; i--)
{
    string seq = Convert.ToString(entityD[i]["Seq"]);
    var getIsDelete = canEntity.Where(s => (s["Seq"] + "").Equals(seq)).ToList().FirstOrDefault();
    if (getIsDelete != null)
    {
        entityD.RemoveAt(i);
    }
}

其他移除物料为空的行的方式,但是测试不通过,不建议使用

//循环删除分录4 测试不通过 删除第一条后,下一次循环获取报错:集合已修改;可能无法执行枚举操作。
foreach (var item in entityD)
{
    //直接判断 物料编码为空,则直接删除
    if ((item["F_XXXX_MaterialId_Id"] + "").Equals("0"))
    {
        entityD.Remove(item);
    }
}

在这里插入图片描述

//循环删除分录2 测试不通过 每删除一行,集合就少一行,然而循环的索引是递增的,所以就会有需要删除的行往前挪了,错过了判断删除的时机
//for (int i = 0; i <= entityD.Count - 1; i++)
//{
//    string seq = Convert.ToString(entityD[i]["Seq"]);
//    var getIsDelete = canEntity.Where(s => (s["Seq"] + "").Equals(seq)).ToList().FirstOrDefault();
//    if (getIsDelete != null)
//    {
//        entityD.RemoveAt(i);
//    }
//}

//循环删除分录3 测试不通过 不影响原来的实体
//for (int i = canEntity.Count - 1; i >= 0; i--)
//{
//    canEntity.RemoveAt(i);
//}


//循环删除分录5 测试不通过,无反应
//entityD.ToList().RemoveAll(s => (s["F_XXXX_MaterialId_Id"] + "").Equals("0"));
//entityD.ToList().RemoveAll(canEntity);
//entityD.ToList().RemoveAll(s => canEntity.Select(d => (d["F_XXXX_MaterialId_Id"] + "")).ToList().Contains((s["F_XXXX_MaterialId_Id"] + "")));
//entityD.ToList().RemoveAll(s => "0".Contains(s["F_XXXX_MaterialId_Id"] + ""));

序号重新生成

 //获取已经生成的行的最大序号,新的行按照这个继续递增
int maxSeq = entityD.Where(s => Convert.ToInt64(s["Id"]) > 0).Max(d => Convert.ToInt32(d["Seq"]));
//需要 序号重新编号
var sortSeqE = entityD.Where(s => Convert.ToInt64(s["Id"]) == 0).ToList();
for (int i=0;i< sortSeqE.Count();i++) 
{
    sortSeqE[i]["Seq"] = ++maxSeq;
}

this.View.UpdateView("FEntity");//刷新单据体

测试

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/news/156913.html

相关文章:

  • Java基本数据类型、包装类及拆装箱详解
  • Spring Cloud + Vue前后端分离-第2章 使用Maven搭建SpringCloud项目
  • centos7上源码安装mysql--运维高级
  • codeforces 1859B - Olya and Game with Arrays
  • 设计简单高效的短链系统
  • 沿着马可·波罗的足迹,看数字云南
  • MT8390商显广告机主板_MTK联发科安卓主板方案开发
  • pip的基本命令和使用
  • 力扣二叉树--第三十八天
  • GO基础之运算符
  • 目标检测中的损失函数:IOU_Loss、GIOU_Loss、DIOU_Loss和CIOU_Loss
  • 基于Go语言实现简易Web应用
  • 【基础知识】Windows/Linux文件系统类型基本介绍
  • YITH Product Countdown Premium电商商城产品倒计时高级版插件
  • 前端与VR/AR:代码的魔法穿越
  • 智能优化算法应用:基于吉萨金字塔建造算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 跟我学c++高级篇——动态反射之二动态列表
  • 【自动化测试】pytest 用例执行中print日志实时输出
  • Python标识符与运算符
  • UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大内核ConvNet
  • 旅游消费+区块链业务场景
  • 实战分析和精华总结:服务器端请求伪造SSRF漏洞数据劫持、复现、分析、利用及修复过程
  • PostgreSQL + SQL Server = WiltonDB
  • 什么是负载均衡?
  • 数据结构——二叉树(相关术语、性质、遍历过程)
  • 深度学习手势检测与识别算法 - opencv python 计算机竞赛
  • 线程变量引发的session混乱问题
  • MJPG-streamer方案实现物联网视频监控
  • 亿发专业MES制造系统,现代化MES精益制造管理,建设数字化车间
  • 正则表达式(3):入门