using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Util; using Kingdee.K3.Core.Mobile.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GZ_LTHPilot_ORDER.PRD_PPBOMCHANGE { [Description("表单插件:生产用料清单变更单,点击批量替换#按钮实现批量复制行替换功能"), HotUpdate] public class PLTH : AbstractDynamicFormPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); //按钮点击事件 if (e.BarItemKey.Equals("GZTH_PLTH", StringComparison.OrdinalIgnoreCase)) { string resultWlFID = ""; //获取单据的生产组织的FID值 var FPrdOrg = (Kingdee.BOS.Orm.DataEntity.DynamicObject)this.View.Model.GetValue("FPrdOrgId"); if (FPrdOrg != null) { //获取生产组织ID值 var FPrdOrgId = Convert.ToString(FPrdOrg["Id"]); //打开动态表单,并对动态表单传值 DynamicFormShowParameter parameter = new DynamicFormShowParameter(); //动态表单ID值 parameter.FormId = "VRYF_SCYLQDBGPLTH"; parameter.MultiSelect = false; //获取生产组织的FID值发送到打开的动态表单 parameter.CustomComplexParams.Add("EntryPrimaryKeys", FPrdOrgId); this.View.ShowForm(parameter, result => { if (result.ReturnData != null) { //记录动态窗口的返回值 resultWlFID = result.ReturnData.ToString(); //获取单据体数据包 var entiy = this.View.BillBusinessInfo.GetEntryEntity("FEntity"); var entityObjs = this.View.Model.GetEntityDataObject(entiy); List FSEQ = new List(); if (entityObjs != null) { foreach (var entityObj in entityObjs) { //当变更类型为变更前 if (Convert.ToString(entityObj["ChangeType"]) == "2") { //记录序号。通过list记录 var i = Convert.ToInt32(entityObj["Seq"]); FSEQ.Add(i - 1); } } } //循环遍历,并且选中行,执行复制行操作 for (int i = 0; i < FSEQ.Count; i++) { if (i == 0) { this.View.Model.CopyEntryRow("FEntity", FSEQ[i], FSEQ[i] + 2, true); if (i + 1 != FSEQ.Count) { FSEQ[i + 1] = FSEQ[i] + 2; } } else { this.View.Model.CopyEntryRow("FEntity", FSEQ[i] + 1, FSEQ[i] + 3, true); if (i + 1 == FSEQ.Count) { FSEQ[i] = FSEQ[i] + 3; } else { FSEQ[i + 1] = FSEQ[i] + 3; } } } /*复制行执行操作完毕后,因序号变更,对单据体需要再次循环执行重新赋值操作*/ foreach (var entityObj in entityObjs) { /*遍历单据体,变更类型为变更前复制这一列并更改物料编码; 变更类型为变更后,将分子赋值为0*/ if (Convert.ToString(entityObj["ChangeType"]) == "3") { //变更类型为变更后,分子赋值为0 this.View.Model.SetValue("FNumerator", 0, Convert.ToInt32(entityObj["Seq"]) - 1); } /*变更类型为新增,将物料编码替换为动态窗口选择的物料FID*/ if (Convert.ToString(entityObj["ChangeType"]) == "1") { //对新增物料进行替换 this.View.Model.SetValue("FMaterialID2", resultWlFID, Convert.ToInt32(entityObj["Seq"]) - 1); } } } }); } } } } }