二开实现单据体上移下移数据行,导致上下游关系丢失或是单据体数据行丢失

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

二开实现单据体上移下移数据行,导致上下游关系丢失或是单据体数据行丢失

1、问题现象

  • 单据下推或是选单新增,单据体上移下移数据行,单据保存后,单据上下游关系丢失

  • 新增单据,单据体上移下移数据行,单据保存后,单据体数据行丢失


2、实现思路

    第一个问题可能原因是因为上移下移是通过删除行插入行实现,导致关联关系被删除。

    第一个问题一般是因为删除重新插入数据后,新增的数据行会被识别为空数据行,而平台在保存时会删除空数据行导致。解决第二个问题除了通过调整代码,还可通过为单据体设置关键字段处理,需确保关键字段有值。

image.webp


3、案例演示

    设计器配置:

image.webp

image.webp

image.webp

image.webp

    运行时效果:

image.webp

image.webp


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、问题现象单据下推或是选单新增,单据体上移下移数据行,单据保存后,单据上下游关系丢失。新增单据,单据体上移下移数据行,单据保存后...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息