PLM如何二开实现在“我接收的发布单”选中发布单批量再次发布?

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

PLM如何二开实现在“我接收的发布单”选中发布单批量再次发布?

【应用场景】

需要实现在“我接收的发布单”选中发布单批量再次发布。


【注意事项】

(1)发布单单据标识:PLM_CFG_RELEASE(发布单)。因为“我接收的发布单”、“我创建的发布单”等都是共用同一个单据,因此在添加二开按钮时可以先设置为不可见,后续通过代码控制按钮的可见性。


(2)这里会调用创建发布单操作,前提是对应发布对象的业务类型上拥有“创建发布单”操作、当前用户有对应权限。


(3)代码仅供参考,具体以实际开发场景为准。



【实现步骤】

<1>编写表单插件和服务插件,代码如下。 

依赖:

using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.K3.PLM.Business.PlugIn;
using Kingdee.K3.PLM.CFG.Common.BusinessEntity.Manager.Release;
using System.Collections.Generic;
using System;
using System.ComponentModel;
using System.Linq;
using Kingdee.BOS.Util;

参考代码:

[Description("发布单列表二开插件")]
    public class ReleaseListSD : AbstractPLMListPlugIn
    {
        private string listOpenType = "";

        public override void PreOpenForm(PreOpenFormEventArgs e)
        {
            base.PreOpenForm(e);
            if (e.OpenParameter.GetCustomParameter("plm_param_ReleaseListOpenType") != null)
            {
                listOpenType = e.OpenParameter.GetCustomParameter("plm_param_ReleaseListOpenType").GetString();
            }
        }

        public override void AfterBindData(EventArgs e)
        {
            base.AfterBindData(e);
            if (listOpenType == "receive")//只有我接收的发布单才显示二开按钮
            {
                this.View.GetBarItem("", "tbReleaseAgain").Visible = true;
            }
            else
            {
                this.View.GetBarItem("", "tbReleaseAgain").Visible = false;
            }
        }

        public override void BarItemClick(BarItemClickEventArgs e)
        {
            base.BarItemClick(e);
            if (e.BarItemKey.ToUpper() == "TBRELEASEAGAIN")
            {
                //获取选中的行
                var selectRows = this.ListView.SelectedRowsInfo;
                if (selectRows.Count != 0)
                {
                    var ids = selectRows.Select(p => p.PrimaryKeyValue).ToList();
                    //获取所有发布单
                    var releases = ReleaseManager.Instance.Load(this.PLMContext, ids.ToArray());
                    //获取发布单中所有发布对象
                    List<long> objIds = new List<long>();
                    var PLMCFGReleaseObject = releases.Select(f => (DynamicObjectCollection)(f["PLMCFGReleaseObject"])).ToList();
                    foreach (var re in PLMCFGReleaseObject)
                    {
                        objIds.AddRange(re.Select(f => Convert.ToInt64(f["ObjectID_Id"])));
                    }
                    if (objIds.Count > 0)
                    {
                        //调用创建发布单操作,前提是对应发布对象的业务类型上拥有“创建发布单”操作、当前用户有对应权限
                        CrossOperationHelper.CrossDoOperation(this, "Release", objIds.Distinct().ToList());
                    }
                }
            }
        }
    }

<2>拷贝插件组件到应用站点的WebSite\Bin目录下,重启IIS。


<3>BOSIDE扩展发布单单据,注册二开表单插件、添加二开按钮,保存元数据,开发完毕。





PLM如何二开实现在“我接收的发布单”选中发布单批量再次发布?

【应用场景】需要实现在“我接收的发布单”选中发布单批量再次发布。【注意事项】(1)发布单单据标识:PLM_CFG_RELEASE(发布单)。因为“我...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息