首页 > 其他分享 >金蝶云星空表单插件单据体批量删除,序号自增

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

时间:2023-12-01 17:24:45浏览次数:30  
标签:ToList 插件 XXXX 删除 自增 MaterialId 表单 entityD Id

一、字段标识说明
单据体标识: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);
    }
}

 其他方式,但是测试不通过,不建议使用

//循环删除分录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);
//}

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

//循环删除分录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"] + ""));

 

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

 

 五、序号重新生成

 //获取已经生成的行的最大序号,新的行按照这个继续递增
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");//刷新单据体

 六、测试

 

 

标签:ToList,插件,XXXX,删除,自增,MaterialId,表单,entityD,Id
From: https://www.cnblogs.com/lanrenka/p/17869652.html

相关文章

  • vue2+element 表单内使用el-rate组件时,校验失败后重新校验通过了,但校验提示信息未消
    问题:el-rate组件自定义的校验规则,必填项。打开表单,不做任何动作,点击提交,这时表单校验一次,然后再选择el-rate组件的评分,校验提示却并未消除。问题复现:1.打开表单,直接点确定 2.填写完所有的选项后,仍未消除提示 解决:首先排除了v-model是否绑定正确,单词有无错误,校验有没有写......
  • vscode插件 runcode 无法运行ts
    declarefunctionpick<TextendsRecord<string,unknown>>(traget:Record<string,unknown>,...keys:(keyofT)[]):unknown;//pick({asdfasfsa:'123'},'a','1').asdfasfsaconstsource={name:'John',......
  • 使用Unity Localization插件进行项目本地化实战详解
    在使用Unity开发游戏的过程中,本地化是必不可少的。网络上也有很多的本地化工具,本次我介绍的是Unity官方提供的Localization插件,大家可以在PackageManager进行安装 一、语言配置,本地化表创建在ProjectSetting中找到Localization,(需要先创建这个LocalizationSetting文件)点击L......
  • Day14 自增自减运算符,初始Math(幂运算)
    自增自减运算符,初始Math(幂运算)以下全程idea操作重点搞清楚++--在前还是在后分清楚先自增自减还是先赋值packageoperator;publicclassDemo04{publicstaticvoidmain(String[]args){//++--自增,自减一元运算符inta=3......
  • Apipost推出IDEA插件,代码写完直接调试
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、接......
  • Apipost推出IDEA插件,代码写完直接调试
    IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。今天给大家介绍一款IDEA插件:Apipost-Helper-2.0。代码写完直接编辑器内调试、还支持生成接口文档、......
  • antd 表单外提交进行规则校验
    import{Form,Input,Button}from'antd';constMyForm=()=>{constonFinish=(values)=>{console.log('Formvalues:',values);};constvalidateFields=()=>{form.validateFields().then(()=>......
  • form表单提交拿到返回值
    通过form的action属性提交表单,这个很容易。但是,由于这种方式是同步提交,所以会导致页面跳转,且不好拿到返回值。一般都用ajax代替。有些情况ajax是不能使用的,严格的说是不好使用的。例如文件上传功能。<inputtype="file">通过form的action属性提交表单,并接收处理返回值的......
  • 浩鲸科技:为什么要用雪花ID替代数据库自增ID?
    今天咱们来看一道数据库中比较经典的面试问题:为什么要使用雪花ID替代数据库自增ID?同时这道题也出现在了浩鲸科技的Java面试中,下面我们一起来看吧。浩鲸科技的面试题如下:其他面试题相对来说比较简单,大部人题目都可以在我的网站上(www.javacn.site)找到答案,这里就不再赘述,咱......
  • PageHelper插件注意事项
    PageHelper插件注意事项使用PageHelper.startPage后要紧跟查询语句下面的代码就有可能出问题:PageHelper.startPage(10,10);if(param!=null){List<Data>data=dataMapper.select(example);}因为如果param==null,那么就会导致设置了分页插件但却没有执行查询,此......