二开实现单据体上移下移数据行,导致上下游关系丢失或是单据体数据行丢失
1、问题现象
单据下推或是选单新增,单据体上移下移数据行,单据保存后,单据上下游关系丢失。
新增单据,单据体上移下移数据行,单据保存后,单据体数据行丢失。
2、实现思路
第一个问题可能原因是因为上移下移是通过删除行插入行实现,导致关联关系被删除。
第一个问题一般是因为删除重新插入数据后,新增的数据行会被识别为空数据行,而平台在保存时会删除空数据行导致。解决第二个问题除了通过调整代码,还可通过为单据体设置关键字段处理,需确保关键字段有值。
3、案例演示
设计器配置:
运行时效果:
4、示例代码
using System; using System.ComponentModel; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel; using Kingdee.BOS.Util; namespace Running.Sample.PlugIn.BusinessPlugIn.Bill { [Description("测试单据体上移下移"), HotUpdate] public class P20240106EntryUpDownMoveEdit : AbstractBillPlugIn { /// <summary> /// 分录行菜单点击事件 /// </summary> /// <param name="e"></param> public override void EntryBarItemClick(BarItemClickEventArgs e) { //单据体标识 string entityKey = "FEntity"; //上移 if (e.BarItemKey.Equals("tbMoveUp", StringComparison.OrdinalIgnoreCase)) { EntryUpDownMove(entityKey, true); } //下移 if (e.BarItemKey.Equals("tbMoveDown", StringComparison.OrdinalIgnoreCase)) { EntryUpDownMove(entityKey, false); } } /// <summary> /// 移动分录行。 /// </summary> /// <param name="entityKey">单据体标识。</param> /// <param name="isUp">是否上移。</param> private void EntryUpDownMove(string entityKey, bool isUp) { int rowIndex = this.View.GetControl<EntryGrid>(entityKey).GetFocusRowIndex(); if (isUp) { // 上移 if (rowIndex <= 0) { return; } ((IDynamicFormModelService)this.Model).MoveToSpecifyRow(entityKey, rowIndex, rowIndex - 1); MoveGoToPage(entityKey, rowIndex - 1); } else { // 下移 var rowCount = this.View.Model.GetEntryRowCount(entityKey); if (rowIndex < 0 || rowIndex >= rowCount - 1) { return; } ((IDynamicFormModelService)this.Model).MoveToSpecifyRow(entityKey, rowIndex, rowIndex + 1); MoveGoToPage(entityKey, rowIndex + 1); } } /// <summary> /// 移动分录时,焦点跳转逻辑。 /// </summary> /// <param name="entityKey">单据体标识。</param> /// <param name="targetRowIndex">移动目标行索引。</param> private void MoveGoToPage(string entityKey, int targetRowIndex) { IEntryState entryState = this.View.GetEntryState(entityKey); EntryGrid entryGrid = this.View.GetControl<EntryGrid>(entityKey); if (entryState != null) { if (entryState.PageRows > 0) {//单据体分页 var rowCount = this.View.Model.GetEntryRowCount(entityKey); if (rowCount > 0) { var targetPageIndex = targetRowIndex / entryState.PageRows; if (entryState.CurrentPageIndex != targetPageIndex) { ((IDynamicFormViewService)this.View).EntryGotoPage(entityKey, targetPageIndex + 1); } } } entryGrid.SetFocusRowIndex(targetRowIndex); } } } }
二开实现单据体上移下移数据行,导致上下游关系丢失或是单据体数据行丢失
1、问题现象单据下推或是选单新增,单据体上移下移数据行,单据保存后,单据上下游关系丢失。新增单据,单据体上移下移数据行,单据保存后...
点击下载文档
本文2024-09-16 18:28:09发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-22341.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章