1. 程式人生 > >K3Cloud系統整合實現下推單據轉換呼叫

K3Cloud系統整合實現下推單據轉換呼叫

  1. //服務端外掛程式碼
  2. //銷售退貨單 下推 應收單 服務端程式碼(Cloud5.0)
  3. //新建立.net 工程
  4. //引用元件 Kingdee.BOS.dll、Kingdee.BOS.Core.dll、Kingdee.BOS.DataEntity.dll、Kingdee.BOS.App.dll、Kingdee.BOS.Contracts.dll
  5. //wanghl 2015-03-24
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.ComponentModel;
  11. using System.Data;
  12. using Kingdee.BOS.Core.DynamicForm.PlugIn;
  13. using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
  14. using Kingdee.BOS.Core.DynamicForm;
  15. using Kingdee.BOS.Core.Metadata.ConvertElement;
  16. using Kingdee.BOS.Core.List;
  17. using Kingdee.BOS.Core.Metadata.ConvertElement.ServiceArgs;
  18. using Kingdee.BOS.Core.DynamicForm.Operation;
  19. using Kingdee.BOS.App;
  20. using Kingdee.BOS.Contracts;
  21. using Kingdee.BOS.Core.Metadata;
  22. using Kingdee.BOS.Orm.DataEntity;
  23. using Kingdee.BOS.App.Data;
  24. using Kingdee.BOS.Orm;
  25. namespace ClassLibrary.App.ServicePlugIn
  26. {
  27.     /// <summary>
  28.     /// 下推 單據轉換 測試
  29.     /// </summary>
  30.     [Description("服務端外掛")]
  31.     public class CustPushTestPlugIn : AbstractOperationServicePlugIn
  32.     {
  33.         /// <summary>
  34.         ///
  35.         /// </summary>
  36.         /// <param name="e"></param>
  37.         public override void EndOperationTransaction(EndOperationTransactionArgs e)
  38.         {
  39.             base.EndOperationTransaction(e);
  40.             //此引數是獲取由系統整合呼叫客戶端給的資料
  41.             var parameters = this.Option.GetVariableValue<object>("Parameters");
  42.             string getSourceSql = "select FID from T_SAL_RETURNSTOCK where FDOCUMENTSTATUS = 'C'";
  43.             //SAL_RETURNSTOCK 銷售退貨單, AR_receivable 應收單, 180ecd4afd5d44b5be78a6efe4a7e041 標準應收單型別內碼
  44.             IOperationResult result = Invoke("SAL_RETURNSTOCK", "AR_receivable", getSourceSql, "180ecd4afd5d44b5be78a6efe4a7e041");
  45.             this.OperationResult.IsSuccess = result.IsSuccess;
  46.             this.OperationResult.ValidationErrors = result.ValidationErrors;
  47.             this.OperationResult.OperateResult = result.OperateResult;
  48.         }
  49.         /// <summary>
  50.         /// 下推 單據轉換
  51.         /// </summary>
  52.         /// <param name="source">源單 業務物件標識</param>
  53.         /// <param name="target">目標單 業務物件標識</param>
  54.         /// <param name="getSourceSql">源單 查詢語句</param>
  55.         /// <param name="sargetBillTypeId">目標單 轉換目標型別</param>
  56.         /// <returns></returns>
  57.         private IOperationResult Invoke(string source, string target, string getSourceSql, string sargetBillTypeId)
  58.         {
  59.             IOperationResult result = new OperationResult();
  60.             //獲取單據轉換規則
  61.             ConvertRuleElement ruleElement = ServiceHelper.GetService<IConvertService>().GetConvertRules(this.Context, source, target).FirstOrDefault();
  62.             //如下程式碼 直接通過查詢資料庫獲取單據轉換源單資料
  63.             ListSelectedRowCollection rows = new ListSelectedRowCollection();
  64.             int i = 0;
  65.             using (IDataReader reader = DBUtils.ExecuteReader(this.Context, getSourceSql))
  66.             {
  67.                 while (reader.Read())
  68.                 {
  69.                     ListSelectedRow row = new ListSelectedRow(reader["FID"].ToString(), string.Empty, i++, source);
  70.                     rows.Add(row);
  71.                 }
  72.             }
  73.             PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray());
  74.             pushArgs.TargetBillTypeId = sargetBillTypeId;
  75.             //轉換生成目標單
  76.             ConvertOperationResult convertResult = ServiceHelper.GetService<IConvertService>().Push(this.Context, pushArgs);
  77.             //合併轉換操作結果
  78.             result.MergeResult(convertResult);
  79.             //目標單據資料集合
  80.             DynamicObject[] destObjs = convertResult.TargetDataEntities.Select(r => r.DataEntity).ToArray();
  81.             //根據實際情況,處理目標單據資料
  82.             DynamicObjectCollection col_FEntityDetail = destObjs[0]["AP_PAYABLEENTRY"] as DynamicObjectCollection;
  83.             int sum = 0;
  84.             foreach (var item in col_FEntityDetail)
  85.             {
  86.                 item["TaxPrice"] = 1;
  87.                 sum = sum + 1;//測試用,暫時設定 “含稅單價” 每條都是1
  88.             }
  89.             DynamicObjectCollection col_FEntityPlan = destObjs[0]["AP_PAYABLEPLAN"] as DynamicObjectCollection;
  90.             int iPAYAMOUNTFOR = sum / col_FEntityPlan.Count;//“價稅合計” 總金額平均分配到每一條付款計劃 “應付金額” 欄位
  91.             foreach (var item in col_FEntityPlan)
  92.             {
  93.                 item["PAYAMOUNTFOR"] = iPAYAMOUNTFOR;
  94.             }
  95.             //設定單據頭 “價稅合計” 即【明細】分錄的“含稅單價”合計
  96.             destObjs[0]["FALLAMOUNTFOR"] = sum;
  97.             //目標單元資料
  98.             FormMetadata destFormMetadata = ServiceHelper.GetService<IMetaDataService>().Load(this.Context, target) as FormMetadata;
  99.             //儲存目標單據
  100.             IOperationResult saveResult = ServiceHelper.GetService<ISaveService>().Save(this.Context, destFormMetadata.BusinessInfo, destObjs, OperateOption.Create());
  101.             //合併儲存操作結果
  102.             result.MergeResult(saveResult);
  103.             //根據操作結果構造返回結果
  104.             if ((result.ValidationErrors != null && result.ValidationErrors.Count > 0)
  105.             || (result.OperateResult != null && result.OperateResult.Count > 0))
  106.             {
  107.                 result.IsSuccess = false;
  108.             }
  109.             return result;
  110.         }
  111.     }
  112. }