using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn; using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn.Args; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; namespace GZ.LJY000.Biori.SAL_OUTSTOCK { [Description("发货通知单下推销售出库单#"), HotUpdate] public class BillConvertEventPlugInEx : AbstractConvertPlugIn { public override void AfterConvert(AfterConvertEventArgs e) { base.AfterConvert(e); if (e.Result.FindByEntityKey("FBillHead").Any()) { var billHead = e.Result.FindByEntityKey("FBillHead")[0].DataEntity; var sqlTables = new List(); var entrys = billHead["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection; foreach (var entry in entrys) { DynamicObject entityLinkObj = null; var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; if (entityLinkObjList != null && entityLinkObjList.Count > 0) entityLinkObj = entityLinkObjList[0]; var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int(); var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int(); var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString(); sqlTables.Add($" SELECT {sId} FENTRYID "); } var sqlL = $@"/*dialect*/ WITH #基础数据 AS ( {string.Join(" UNION ", sqlTables)} ) SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq ,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId' FROM #基础数据 t0 INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' INNER JOIN T_SAL_ORDERENTRY_LK t2e_lk on t2e_lk.FENTRYID = t1e_lk.FSID AND t2e_lk.FSTABLENAME = 'T_PLN_FORECASTENTRY' CROSS APPLY ( SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t4 INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID WHERE t4e.FSRCBILLENTRYID = t2e_lk.FSID UNION ALL SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t4 WHERE t4.FSRCBILLENTRYID = t2e_lk.FSID ) t4 UNION ALL SELECT t4.FBILLNO,t4.FEntryID,t4.FSeq ,t4.FSRCBILLENTRYID,t0.FENTRYID AS 'EntryId' FROM #基础数据 t0 INNER JOIN T_SAL_DELIVERYNOTICEENTRY_LK t1e_lk on t1e_lk.FENTRYID = t0.FENTRYID AND t1e_lk.FSTABLENAME = 'T_SAL_ORDERENTRY' CROSS APPLY ( SELECT t4.FBILLNO,t4e.FEntryID,t4e.FSeq,t4e.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t4 INNER JOIN T_PRD_PACKAGEINSTOCKENTRY t4e on t4.FID = t4e.FID WHERE t4e.FSRCBILLENTRYID = t1e_lk.FSID UNION ALL SELECT t4.FBILLNO,0,0,t4.FSRCBILLENTRYID FROM T_PRD_PACKAGEINSTOCK t4 WHERE t4.FSRCBILLENTRYID = t1e_lk.FSID ) t4 "; var dataList = DBServiceHelper.ExecuteDynamicObject(this.Context, sqlL); if (dataList != null && dataList.Any()) { foreach (var entry in entrys) { DynamicObject entityLinkObj = null; var entityLinkObjList = entry["FEntity_Link"] as DynamicObjectCollection; if (entityLinkObjList != null && entityLinkObjList.Count > 0) entityLinkObj = entityLinkObjList[0]; var sBillId = entityLinkObj == null ? 0 : entityLinkObj["SBillId"].Long2Int(); var sId = entityLinkObj == null ? 0 : entityLinkObj["SId"].Long2Int(); var sTableName = entityLinkObj == null ? "" : entityLinkObj["STableName"].ToString(); var data = dataList.FirstOrDefault(w => w["EntryId"].Long2Int() == sId); if (data != null) { entry["FPackBillNo"] = data["FBILLNO"]; entry["FPackBillSeq"] = data["FSeq"]; entry["FPackBillEntryId"] = data["FEntryID"]; } } } } } } }