文章目录
- 金蝶云星空表单插件单据体批量删除,序号自增
- 字段标识说明
- 表单插件
- 获取单据体数据包
- 移除物料为空的行
- 其他移除物料为空的行的方式,但是测试不通过,不建议使用
- 序号重新生成
- 测试
金蝶云星空表单插件单据体批量删除,序号自增
字段标识说明
单据体标识: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");//刷新单据体
测试