using Kingdee.BOS.App.Core.ScheduleService; using Kingdee.BOS.App.Data; using Kingdee.BOS.Contracts; using Kingdee.BOS.Core.DynamicForm.Operation; using Kingdee.BOS.Core.List; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; using Kingdee.BOS.Core; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.Orm; using Kingdee.BOS.Util; using System; using System.Collections.Generic; using System.Linq; using System.Text; using Kingdee.BOS; using System.ComponentModel; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Core.Metadata.FieldElement; using Kingdee.BOS.App; using Kingdee.BOS.Core.DynamicForm; namespace CY.SAL_OUTSTOCK { [Description("测试自动下推功能"), HotUpdate] public class TestAutoPushPlugIn : AbstractListPlugIn { public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); if (e.BarItemKey.Equals("tbTestAutoP")) { Run(this.Context); } } public void Run(Context ctx) { try { IConvertService service = Kingdee.BOS.App.ServiceHelper.GetService(); string sourceFormId = "SAL_OUTSTOCK"; string targetFormId = "AR_RECEIVABLE"; string targetBillTypeId = "180ecd4afd5d44b5be78a6efe4a7e041"; //var rules = service.GetConvertRules(ctx, sourceFormId, targetFormId); string convertRuleId = "AR_OutStockToReceivableMap"; //销售出库单下推应付单 var ruleMeta = service.GetConvertRule(ctx, convertRuleId); var rule = ruleMeta.Rule; var dbList = GetDBData(ctx); if (dbList != null && dbList.Any()) { var groupbyList = dbList.GroupBy(x => x["FBILLNO"]); StringBuilder stringBuilder = new StringBuilder(); foreach (var list in groupbyList) { var pkid = dbList.Select(x => x["FID"]).ToArray(); List selectedRows = list.Select(x => new ListSelectedRow(x["FID"].ToString(), x["FENTRYID"].ToString(), 0, sourceFormId)).ToList(); PushArgs pushArgs = new PushArgs(rule, selectedRows.ToArray());//下推入口参数 pushArgs.TargetBillTypeId = targetBillTypeId; OperateOption option = OperateOption.Create();//选项参数 try { ConvertOperationResult convertResult = service.Push(ctx, pushArgs, option); DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray(); FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, targetFormId) as FormMetadata; IOperationResult saveResult = ServiceHelper.GetService().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); if ((saveResult.ValidationErrors != null && saveResult.ValidationErrors.Count > 0)) { var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message)); throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + errorInfo); } } catch (KDBusinessException ex) { stringBuilder.AppendLine($"单据:{list.Key}{ex.GetErrorInfo()}"); } } if (!stringBuilder.IsNullOrEmpty()) throw new Exception(stringBuilder.ToString()); } } catch (Exception ex) { //ScheduleMsgDal _msgDal = new ScheduleMsgDal(); //ScheduleMsg msg = new ScheduleMsg(); //msg.MsgDetail = ex.Message; //msg.HappenTime = DateTime.Now; //msg.MsgType = 5;// 1 成功 5异常, //msg.ScheduleTypeId = schedule.ScheduleTypeId; //_msgDal.InsertScheduleMsg(ctx, msg); } } private DynamicObjectCollection GetDBData(Context ctx) { var unSql = $@" select * from V_NOT_RECEIVABLE_OUTSTOCK "; var dbList = DBUtils.ExecuteDynamicObject(ctx, $"/*dialect*/{unSql}"); return dbList; } } }