diff --git a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs index 067cf6b..1fb67a4 100644 --- a/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs +++ b/Pilot_KD_Parino/Sal_Order/PushSaleOutBillPlugIn.cs @@ -11,6 +11,7 @@ using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.ConvertElement; using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs; +using Kingdee.BOS.Core.Metadata.FormElement; using Kingdee.BOS.Log; using Kingdee.BOS.Orm; using Kingdee.BOS.Orm.DataEntity; @@ -33,39 +34,68 @@ namespace Pilot_KD_Parino.Sal_Order public override void AfterBarItemClick(AfterBarItemClickEventArgs e) { base.AfterBarItemClick(e); - long sOutId = 0;//珠海分布式调出单单号内码 - string sOutBillNo = "";//珠海分布式调出单单号 - bool flag = true; - string sBillNo = ""; - long sEntryId = 0; - long slevel = 2; - long sId = 0; + //this.View.ShowMessage("669977"); if (e.BarItemKey.Equals("tbPushSalOut111", StringComparison.OrdinalIgnoreCase)) { - var FEntity = this.View.Model.DataObject; - - var fid = FEntity.GetPrimaryKeyValue(); - //var json = JsonUtil.Serialize(FEntity); - //var row = JsonHelper.ToObject(json); - //Logger.Error("FEntity",json,new Exception()); + var FEntity = this.View.Model.DataObject; var id = FEntity["id"]; - var FSALEORGID = FEntity["SaleOrgId"]; + string formid = FEntity["FFormId"].ToString(); + //var detailList = (FEntity["SAL_DELIVERYNOTICEENTRY"]); - - sBillNo = FEntity["BillNo"].ToString();//发货通知单号 - var detailList = (FEntity["SAL_DELIVERYNOTICEENTRY"]); - //sId = row.Id;//发货通知单ID - //sEntryId = row.SAL_DELIVERYNOTICEENTRY Convert.ToInt64(row.EntryPrimaryKeyValue);//发货通知单ID - //string sSql = "select FID from T_SAL_DELIVERYNOTICEENTRY where FID= " + sId + " and FENTRYID= " + sEntryId + " and abs(FBaseUnitQty) > abs(FBASEJOINOUTQTY) "; - //sSql = String.Format(@"/*dialect*/" + sSql); - //var dt = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); - if (detailList!=null) + //发货通知单或者发货出库单 + string getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM dbo.T_{formid}ENTRY_LK + WHERE FENTRYID IN ( SELECT FENTRYID FROM dbo.T_{formid}ENTRY WHERE FID = {id})"; + var dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + if (dt == null || dt.Count == 0) { - string getSourceSql = "select FID from T_SAL_DELIVERYNOTICE where FBILLNO='" + sBillNo + "'"; - IOperationResult result = Invoke("SAL_DELIVERYNOTICE", "PUR_ReceiveBill", getSourceSql, "7cd93c259999489c97798063f2f7bd70"); + this.View.ShowMessage("没有上查关联的发货通知单"); } + int tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + string tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + for (int kk = 0; kk < 6 && tablename.ToUpper() != "T_PUR_POORDERENTRY"; kk++) + { + ////发货通知单 + tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + string tempTable = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + getSourceSql = $@"/*dialect*/SELECT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk + WHERE FENTRYID IN ( SELECT FENTRYID FROM {tempTable} WHERE FID = {tempFid})"; + //dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + //if (dt == null || dt.Count == 0) + //{ + // this.View.ShowMessage("没有上查关联的销售单"); + //} + ////共享的采购订单 + //tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + //tempTable = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + //getSourceSql = $@"/*dialect*/ SELECT FSTABLENAME,FSBILLID FROM dbo.{tempTable}_lk + // WHERE FENTRYID IN ( SELECT FENTRYID FROM {tempTable} WHERE FID = {tempFid})"; + dt = DBServiceHelper.ExecuteDynamicObject(this.Context, getSourceSql); + + if (dt == null || dt.Count == 0) + { + + this.View.ShowMessage("没有上查关联的跨组织的采购订单"); + return; + } + else + { + tablename = dt.Select(t => t["FSTABLENAME"]).FirstOrDefault().ToString(); + //if (tablename.ToUpper() != "T_PUR_POORDERENTRY") + // this.View.ShowMessage("没有上查关联的跨组织的采购订单 " + tablename); + } + tempFid = int.Parse(dt.Select(t => t["FSBILLID"]).FirstOrDefault().ToString()); + } + if (tablename.ToUpper() != "T_PUR_POORDERENTRY") + { + this.View.ShowMessage("没有上查关联的跨组织的采购订单 " + tablename); + return; + } + IOperationResult result = Invoke("PUR_PurchaseOrder", "PUR_ReceiveBill", tempFid.ToString(), "7cd93c259999489c97798063f2f7bd70"); + + + //this.View.ShowMessage("就是这个按钮"+ id); @@ -97,7 +127,9 @@ namespace Pilot_KD_Parino.Sal_Order //} } } - private IOperationResult Invoke(string source, string target, string getSourceSql, string sargetBillTypeId) + + + private IOperationResult Invoke(string source, string target, string tempFid, string sargetBillTypeId) { try { @@ -108,14 +140,129 @@ namespace Pilot_KD_Parino.Sal_Order //如下代码 直接通过查询数据库获取单据转换源单数据 ListSelectedRowCollection rows = new ListSelectedRowCollection(); int i = 0; - using (IDataReader reader = DBUtils.ExecuteReader(this.Context, getSourceSql)) + ListSelectedRow row = new ListSelectedRow(tempFid, string.Empty, i++, source); + rows.Add(row); + + PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray()); + pushArgs.TargetBillTypeId = sargetBillTypeId;//单据类型 + //转换生成目标单 + ConvertOperationResult convertResult = ServiceHelper.GetService().Push(this.Context, pushArgs); + + ////合并转换操作结果 + //result.MergeResult(convertResult); + + ////目标单据数据集合 + DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray(); + //根据实际情况,处理目标单据数据 + //destObjs[0]["Date"] = Convert.ToDateTime(sDate); + DynamicObjectCollection col_FEntityDetail; + var sdsas = JsonHelper.ToJson(destObjs); + Logger.Error("目标单据数据集合", sdsas, new Exception()); + //this.View.ShowMessage("好了好了,就是这个按钮"); + + //return result; + ////if (target == "SAL_OUTSTOCK")//销售出库 + ////{ + //col_FEntityDetail = destObjs[0]["SAL_OUTSTOCKENTRY"] as DynamicObjectCollection; + ////} + ////else + ////{//销售退货 + //// col_FEntityDetail = destObjs[0]["SAL_RETURNSTOCKENTRY"] as DynamicObjectCollection; + ////} + //#region + //long sStockOrgID = 0; + //sStockOrgID = Convert.ToInt64(destObjs[0]["StockOrgId_Id"]); + + + //foreach (var item in col_FEntityDetail) + //{ + // //item["KeeperID_Id"] = item["OwnerID_Id"];//保管者 + + // string sStockSql = "select FOrgStockId from v_BusinessOrgId where FORGID= " + sStockOrgID + " "; + // sStockSql = String.Format(@"/*dialect*/" + sStockSql); + // var dt = DBServiceHelper.ExecuteDynamicObject(this.Context, sStockSql); + + // //if (dt.Count > 0 && Convert.ToInt64(dt[0]["FOrgStockId"]) != 0) + // if (dt.Count > 0) + // { + // //var targetBillMeta = ServiceHelper.GetService().Load(this.Context, target) as FormMetadata; + // //BusinessInfo info = targetBillMeta.BusinessInfo; + // //BaseDataField stockFld = info.GetField("FStockId") as BaseDataField; + // //long stockId = Convert.ToInt64(dt[0]["FOrgStockId"]); + // //IViewService viewService = ServiceHelper.GetService(); + // //DynamicObject[] stockObjs = viewService.LoadFromCache(this.Context, new object[] { stockId }, stockFld.RefFormDynamicObjectType); + // //stockFld.RefIDDynamicProperty.SetValue(item, stockId); + // //stockFld.DynamicProperty.SetValue(item, stockObjs[0]); + + // item["StockID_Id"] = Convert.ToInt64(dt[0]["FOrgStockId"]); + // } + //} + //#endregion + + ////目标单元数据 + FormMetadata destFormMetadata = ServiceHelper.GetService().Load(this.Context, target) as FormMetadata; + + ////保存目标单据 + IOperationResult saveResult = ServiceHelper.GetService().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create()); + ////合并保存操作结果 + //result.MergeResult(saveResult); + //根据操作结果构造返回结果 + if ((saveResult.ValidationErrors != null && saveResult.ValidationErrors.Count > 0)) + //|| (result.OperateResult != null && result.OperateResult.Count > 0)) { - while (reader.Read()) - { - ListSelectedRow row = new ListSelectedRow(reader["FID"].ToString(), string.Empty, i++, source); - rows.Add(row); - } + var errorInfo = string.Join(";", saveResult.ValidationErrors.Select(x => x.Message)); + //this.View.ShowErrMessage("调用下推, 导致自动保存失败 原因:" + errorInfo); + + //result.IsSuccess = false; + //this.View.ShowErrMessage("调用下推, 导致自动保存失败 原因:" + saveResult.ValidationErrors[0].Message.ToString()); + throw new KDBusinessException("", "未知原因导致自动保存失败原因:" + errorInfo); } + + //this.View.ShowMessage("1"); + // 取到需要自动提交、审核的单据内码 + object[] pkArray = (from p in destObjs select p[0]).ToArray(); + //设置提交参数 + IOperationResult submitResult = ServiceHelper.GetService().Submit(this.Context, destFormMetadata.BusinessInfo, pkArray, "Submit", OperateOption.Create()); + + // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 + if (submitResult.IsSuccess == false) + { + throw new KDBusinessException("", "未知原因导致自动提交失败!"); + } + //设置审核参数 + IOperationResult auditResult = ServiceHelper.GetService().Audit(this.Context, destFormMetadata.BusinessInfo, pkArray, OperateOption.Create()); + // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 + if (auditResult.IsSuccess == false) + { + throw new KDBusinessException("", "未知原因导致自动审核失败!"); + } + //显示下推后的单据 + //ShowPushResult("k0f9e182dbc5247fcabc9479ddb300fa3", convertResult, destObjs); + return result; + } + catch (Exception ex) + { + Logger.Error("同步报关信息时", "同步报关信息时 error:" + ex.Message + ex.StackTrace, ex); + throw ex; + } + + } + + + + private IOperationResult Invoke2(string source, string target, string tempFid, string sargetBillTypeId) + { + try + { + IOperationResult result = new OperationResult(); + //获取单据转换规则 + ConvertRuleElement ruleElement = ServiceHelper.GetService().GetConvertRules(this.Context, source, target).FirstOrDefault(); + + //如下代码 直接通过查询数据库获取单据转换源单数据 + ListSelectedRowCollection rows = new ListSelectedRowCollection(); + int i = 0; + ListSelectedRow row = new ListSelectedRow(tempFid, string.Empty, i++, source); + rows.Add(row); PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray()); pushArgs.TargetBillTypeId = sargetBillTypeId;//单据类型 diff --git a/组织间单据自动生成流程图.vsdx b/组织间单据自动生成流程图.vsdx index dad696b..5aadb9d 100644 Binary files a/组织间单据自动生成流程图.vsdx and b/组织间单据自动生成流程图.vsdx differ