using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using Kingdee.BOS.WebApi.Client; using Kingdee.BOS; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Core.Bill.PlugIn.Args; using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.Metadata.EntityElement; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using Kingdee.BOS.Core.DynamicForm; using Kingdee.BOS.Core.DynamicForm.PlugIn; namespace aoyuPlugIn { [Description("其他应付生成费用归集")] public class MJ_qtyf : AbstractBillPlugIn { //调用API生成费用归集单 public Boolean SaveBill() { string fbillno = this.View.Model.GetValue("FBillNo").ToString(); try { var sSql = String.Format("EXEC hw_get_qtyf '" + fbillno + "'"); var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); int i = 0; if (dr.Count > 0) { try { string url = "https://hui-wei.ik3cloud.com/K3cloud/"; string dbid = "5c85f54f52a132"; string user = "wwj01"; string pwd = "wwj@123456"; url = "http://61.145.228.58:9656/k3cloud"; dbid = "5e0f100d492605"; user = "Hezhiq"; pwd = "abc123++"; ApiClient client = new ApiClient(url); var loginResult = client.Login( dbid, user, pwd, 2052); string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!"; // 登陆成功,开始保存数据 if (loginResult == true) { // 开始构建Web API参数对象 // 参数根对象:包含Creator、NeedUpDateFields、Model这三个子参数 // using Newtonsoft.Json.Linq; // (需引用Newtonsoft.Json.dll) JObject jsonRoot = new JObject(); // Creator: 创建用户 //jsonRoot.Add("Creator", "Demo"); // NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新 jsonRoot.Add("NeedUpDateFields", new JArray("")); // Model: 单据详细数据参数 JObject model = new JObject(); jsonRoot.Add("Model", model); // 开始设置单据字段值 // 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段 // 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来 // 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0 model.Add("FID", 0); //核算体系编码 JObject FACCTGSYSTEMID = new JObject(); FACCTGSYSTEMID.Add("FNumber", "KJHSTX01_SYS"); model.Add("FACCTGSYSTEMID", FACCTGSYSTEMID); //核算体组织码 JObject FACCTGORGID = new JObject(); FACCTGORGID.Add("FNumber", "107"); model.Add("FACCTGORGID", FACCTGORGID); //会计政策编码 JObject FACCTPOLICYID = new JObject(); FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); model.Add("FACCTPOLICYID", FACCTPOLICYID); ////业务类型 //model.Add("FBusinessType", "CG");//标准采购 // 开始构建单据体参数:集合参数JArray JArray entryRows = new JArray(); // 把单据体行集合,添加到model中,以单据体Key为标识 string entityKey = "FEntity"; model.Add(entityKey, entryRows); // 通过循环创建单据体行:示例代码仅创建一行 foreach (var item in dr) { //string k = item[0].ToString(); //this.Model.SetValue("F_YGNM", item[0], i); //this.Model.SetValue("F_ISXYG", item[1], i); //this.Model.SetValue("F_ISSYQ", item[2], i); // 添加新行,把新行加入到单据体行集合 JObject entryRow = new JObject(); entryRows.Add(entryRow); // 给新行,设置关键字段值 // 单据体主键:必须填写,系统据此判断是新增还是修改行 entryRow.Add("FEntryID", 0); //业务组织 JObject FBIZORGID = new JObject(); FBIZORGID.Add("FNumber", "107"); entryRow.Add("FBIZORGID", FBIZORGID); //费用项目编码 JObject FEXPENSEITEMID = new JObject(); FEXPENSEITEMID.Add("FNumber", "FYXM04_SYS"); entryRow.Add("FEXPENSEITEMID", FEXPENSEITEMID); //this.Model.SetValue("F_ISSYQ", item[2], i); //日期 entryRow.Add("FDATE", item[1].ToString()); //成本中心编码 JObject FCOSTCENTERID = new JObject(); FCOSTCENTERID.Add("FNumber", "CBZX000016"); entryRow.Add("FCOSTCENTERID", FCOSTCENTERID); //金额 entryRow.Add("FAMOUNT", item[1].ToString()); //产品编号 JObject FPRODUCTID = new JObject(); FPRODUCTID.Add("FNumber", item[2].ToString()); entryRow.Add("FPRODUCTID", FPRODUCTID); i++; } // 调用Web API接口服务,保存 result = client.Execute( "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save", new object[] { "CB_EXPENSECOLLECTION", jsonRoot.ToString() }); } this.View.ShowMessage("操作成功!"); return true; } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("程序运行遇到了未知的错误:"); sb.Append("错误提示:").AppendLine(ex.Message); sb.Append("错误堆栈:").AppendLine(ex.StackTrace); this.View.ShowMessage(sb.ToString()); return false; } } else { this.View.ShowMessage("无数据,请确认后再操作!"); return false; } } catch (Exception ex) { this.View.ShowMessage("生成费用归集单时发生错误为:" + ex.Message); return false; } } //单据头菜单点击 public override void BarItemClick(BarItemClickEventArgs e) { base.BarItemClick(e); if (e.BarItemKey == "tbfygj") { SaveBill(); } } } }