using System; using System.ComponentModel; using System.Collections.Generic; using System.Linq; using System.Text; 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; using Kingdee.BOS.Core.List.PlugIn; using Kingdee.BOS.WebApi.FormService; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Web.Script.Serialization; namespace aoyuPlugIn { [Description("列表费用归集新增")] [Kingdee.BOS.Util.HotUpdate] public class MJ_wgd_lb : AbstractListPlugIn { //列表菜单事件 public override void AfterBarItemClick(AfterBarItemClickEventArgs e) { base.AfterBarItemClick(e); if (e.BarItemKey == "tbfygjlb")//生成费用归集单 { if (this.ListView.SelectedRowsInfo.Count > 0) { for (int i = 0; i < this.ListView.SelectedRowsInfo.Count; i++) { //取指定行单据编号 string fbillno = this.ListView.SelectedRowsInfo[i].BillNo; //string zt = this.ListView.SelectedRowsInfo[i].DataRow["FDOCUMENTSTATUS"].ToString();//取单据状态 SaveBill(fbillno); } } } } //调用API生成费用归集单--本机 public Boolean SaveBill2(string fbillno) { try { var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); int i = 0; if (dr.Count > 0) { try { JObject jsonRoot = new JObject(); // 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) { // 添加新行,把新行加入到单据体行集合 JObject entryRow = new JObject(); entryRows.Add(entryRow); // 给新行,设置关键字段值 // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 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[0].ToString()); entryRow.Add("FDATE", "2019-5-31"); //成本中心编码 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接口服务,保存 object result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); string t = objzjs(result); if (strJson(t)) { sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); DBServiceHelper.Execute(this.Context, sSql); this.View.ShowMessage("操作成功!"); return true; } else { this.View.ShowMessage("操作失败!" + t); return false; } } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("程序运行遇到了未知的错误11:"); 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; } } //调用API生成费用归集单--汇威 public Boolean SaveBill(string fbillno) { try { var sSql = String.Format("EXEC hw_get_wwdd '" + fbillno + "'"); var dr = DBServiceHelper.ExecuteDynamicObject(this.Context, sSql); int i = 0; if (dr.Count > 0) { try { JObject jsonRoot = new JObject(); // 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"); FACCTGORGID.Add("FNumber", "100"); model.Add("FACCTGORGID", FACCTGORGID); //会计政策编码 JObject FACCTPOLICYID = new JObject(); //FACCTPOLICYID.Add("FNumber", "KJZC02_SYS"); FACCTPOLICYID.Add("FNumber", "KJZC01_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) { // 添加新行,把新行加入到单据体行集合 JObject entryRow = new JObject(); entryRows.Add(entryRow); // 给新行,设置关键字段值 // 单据体主键:必须填写,系统据此判断是新增还是修改行,0是新增 entryRow.Add("FEntryID", 0); //业务组织 JObject FBIZORGID = new JObject(); //FBIZORGID.Add("FNumber", "107"); FBIZORGID.Add("FNumber", "100"); 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[0].ToString()); //entryRow.Add("FDATE", "2019-5-31"); //成本中心编码 JObject FCOSTCENTERID = new JObject(); //FCOSTCENTERID.Add("FNumber", "CBZX000016"); FCOSTCENTERID.Add("FNumber", "CBZX000049"); 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接口服务,保存 var result = WebApiServiceCall.Save(this.Context, "CB_EXPENSECOLLECTION", jsonRoot.ToString()); string t = objzjs(result); if (strJson(t)) { sSql = string.Format("exec hw_fxwgd '{0}'", fbillno); DBServiceHelper.Execute(this.Context, sSql); this.View.ShowMessage("操作成功1!"); return true; } else { this.View.ShowMessage("操作失败!" + t); return false; } } catch (Exception ex) { StringBuilder sb = new StringBuilder(); sb.AppendLine("程序运行遇到了未知的错误11:"); 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; } } //object转json public string objzjs(Object obj) { JavaScriptSerializer js = new JavaScriptSerializer(); string myJson = js.Serialize(obj); return myJson; } // 将字符串转换成Json格式显示 //字符串转json public bool strJson(string t) { string jsonText = t; // "{"shenzheng":"深圳","beijing":"北京","shanghai":[{"zj1":"zj11","zj2":"zj22"},"zjs"]}"; JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);//或者JObject jo = JObject.Parse(jsonText); //string zone = jo["shenzheng"].ToString();//输出 "深圳" //string zone_en = jo["shanghai"].ToString();//输出 "[{"zj1":"zj11","zj2":"zj22"},"zjs"]" //string zj1 = jo["shanghai"][1].ToString();//输出 "zjs" //Console.WriteLine(jo); string tt = jo["Result"].ToString(); JObject jo1 = (JObject)JsonConvert.DeserializeObject(tt); string t3 = jo1["ResponseStatus"].ToString(); JObject jo2 = (JObject)JsonConvert.DeserializeObject(t3); string t4 = jo2["IsSuccess"].ToString(); if (t4.ToLower() == "true") return true; else return false; } } }