遇到的问题:
一:下推的时候收料通知单的仓库不是必填,但采购入库单的字段是必填的,无法默认传值,只能额外插入新的数据仓库才能下推成功?
方法一:先下推 下推成功后 入库订单为暂存 (暂存状态的数据可以不是很全) 然后由暂存状态转为保存状态 (把需要额外填的数据放入保存的json里) 保存状态后提交 提交后审核数据。

方法二:金蝶老师建议的Bos平台配置单据。

问题2:一个收料通知单里一个源单号可能对应多个物料号,下推的时候可能只会下推当中的一个物料,用单据查询的如何需要如何查询?如果只是根据Fid和物料号去条件过滤查出的数据不准。
解决方法:单据分录内码 多个筛选条件的时候 用and 拼接
json工具类

public class JsonHelper{/// <summary>/// 将对象序列化为JSON格式/// </summary>/// <param name="o">对象</param>/// <returns>json字符串</returns>public static string SerializeObject(object o){string json = JsonConvert.SerializeObject(o);return json;}/// <summary>/// 解析JSON字符串生成对象实体/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子儿"})</param>/// <returns>对象实体</returns>public static T DeserializeJsonToObject<T>(string json) where T : class{JsonSerializer serializer = new JsonSerializer();StringReader sr = new StringReader(json);object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));T t = o as T;return t;}/// <summary>/// 解析JSON数组生成对象实体集合/// </summary>/// <typeparam name="T">对象类型</typeparam>/// <param name="json">json数组字符串(eg.[{"ID":"112","Name":"石子儿"}])</param>/// <returns>对象实体集合</returns>public static List<T> DeserializeJsonToList<T>(string json) where T : class{JsonSerializer serializer = new JsonSerializer();StringReader sr = new StringReader(json);object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));List<T> list = o as List<T>;return list;}/// <summary>/// 反序列化JSON到给定的匿名对象./// </summary>/// <typeparam name="T">匿名对象类型</typeparam>/// <param name="json">json字符串</param>/// <param name="anonymousTypeObject">匿名对象</param>/// <returns>匿名对象</returns>public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject){T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);return t;}public static string ToJson(DataTable dt){//JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();//javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值ArrayList arrayList = new ArrayList();foreach (DataRow dataRow in dt.Rows){Dictionary<string, object> dictionary = new Dictionary<string, object>();  //实例化一个参数集合foreach (DataColumn dataColumn in dt.Columns){string s_value = dataRow[dataColumn.ColumnName].ToString();dictionary.Add(dataColumn.ColumnName, s_value);}arrayList.Add(dictionary); //ArrayList集合中添加键值}// return javaScriptSerializer.Serialize(arrayList);  //返回一个json字符串return JsonConvert.SerializeObject(arrayList);}/// <summary>  /// 对象序列化成 XML String  /// </summary>  public static string XmlSerialize<T>(T obj){string xmlString = string.Empty;XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));using (MemoryStream ms = new MemoryStream()){xmlSerializer.Serialize(ms, obj);xmlString = Encoding.UTF8.GetString(ms.ToArray());}return xmlString;}/// <summary>  /// XML String 反序列化成对象  /// </summary>  public static T XmlDeserialize<T>(string xmlString){T t = default(T);XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString))){using (XmlReader xmlReader = XmlReader.Create(xmlStream)){Object obj = xmlSerializer.Deserialize(xmlReader);t = (T)obj;}}return t;}

Hettclient 工具类:

    public class HttpClient{/// <summary>/// Seivice URL/// </summary>public string Url { get; set; }/// <summary>/// 内容/// </summary>public string Content { get; set; }/// <summary>/// Cookie,保证登录后,所有访问持有一个Cookie;/// </summary>static CookieContainer Cookie = new CookieContainer();/// <summary>/// HTTP访问/// </summary>public string AsyncRequest(){HttpWebRequest httpRequest = HttpWebRequest.Create(Url) as HttpWebRequest;httpRequest.Method = "POST";httpRequest.ContentType = "application/json";httpRequest.CookieContainer = Cookie;httpRequest.Timeout = 1000 * 60 * 10;//10minusing (Stream reqStream = httpRequest.GetRequestStream()){JObject jObj = new JObject();jObj.Add("format", 1);jObj.Add("useragent", "ApiClient");jObj.Add("rid", Guid.NewGuid().ToString().GetHashCode().ToString());jObj.Add("parameters", Content);jObj.Add("timestamp", DateTime.Now);jObj.Add("v", "1.0");string sContent = jObj.ToString();var bytes = UnicodeEncoding.UTF8.GetBytes(sContent);reqStream.Write(bytes, 0, bytes.Length);reqStream.Flush();}using (var repStream = httpRequest.GetResponse().GetResponseStream()){using (var reader = new StreamReader(repStream)){return ValidateResult(reader.ReadToEnd());}}}public static string ValidateResult(string responseText){if (responseText.StartsWith("response_error:")){return responseText.TrimStart("response_error:".ToCharArray());}return responseText;}}

金蝶社区的入门教程:
https://vip.kingdee.com/article/71624106696524544
分录内码:比如一个单据编号下多个物料号的时候 可以根据分录内码下推一条,相当于明细子表的id一样
1.WebAPI如何查询单据体分录内码?

使用Web API ExecuteBillQuery 服务,查询单据数据,如果需要输出单据体内码,请按照如下格式填写单据体主键标识:单据体标识 + “_” + 单据体主键字段名
Json请求示例:

{"FormId": "PUR_PurchaseOrder","FieldKeys": "FPOOrderEntry_FEntryID","FilterString": "","OrderString": "","TopRowCount": 0,"StartRow": 0,"Limit": 0}

收料通知单:FDetailEntity_FEntryID
采购入库单:FInStockEntry_FEntryId
Bos平台的截图:

2.FilterString:过滤条件,字符串类型(非必录) 如何多个筛选条件并行
用and拼接,比如:“FilterString”: "FDocumentStatus = ‘C’ and FStatus = ‘4’ "
3.下推的流程,因为从收料通知单下推采购入库单的过程不知道如何传值,所以我的解决方法是先下推采购入库单为暂存状态,再去根据fid去查找到暂存的采购入库单 修改 提交 审批

  {"Ids": "","Numbers": [],//如果只想下推一条,而不是整个单据就不要再这里填入单据编码,填了就会整个单据下推"EntryIds": "\"101462\"",//单据分录内码"RuleId": "","TargetBillTypeId": "","TargetOrgId": 0,"TargetFormId": "STK_InStock",  //入库单的单据编号"IsEnableDefaultRule": "true", //是否启用默认转换规则,布尔类型,默认false(非必录)"IsDraftWhenSaveFail": "true",//保存失败时是否暂存"CustomParams": {}{}}

4.暂存的数据如何修改?以及传入自己想修改的部分
先查询出这条暂存数据的fid和单据内码分录

  {"Creator": "","NeedUpDateFields": ["FInStockEntry","FStockId"],//修改的字段"NeedReturnFields": ["FStockId"],"IsDeleteEntry": "false",//默认为true 修改数据的时候为false"SubSystemId": "","IsVerifyBaseDataField": "false","IsEntryBatchFill": "true","ValidateFlag": "true","NumberSearch": "true","InterationFlags": "","Model": {"FID": 100271, //主键id"FInStockEntry": [{"FEntryID": 101812,//单据分录内码"FStockId": {"FNumber": "1.11"  //仓库数据},}],"F_aaaa_Entity":[{"F_aaaa_Base":{"FNUMBER":"1.01.0000"},"F_aaaa_Text":"9999080" },{"F_aaaa_Base": { "FNUMBER": "1.01.0000"},"F_aaaa_Text": "99998083"}]}
}

5.如何查询收料通知单下推为采购入库单后实际的实收数量?
在收料通知单无法查看到已收数量,这个数据只能在收料通知单下推为采购入库单的时候才能查看,第二个情况,就是考虑到我们实际使用中收料通知单只会下推为采购入库单,所以可以根据源单号在采购入库单查询所有然后累加这个值:
//已入库数量查询 “CGSL000092”

       public double Num(string FSRCBillNo ){double num = 0;HttpClient httpClient = new HttpClient();List<object> Parameters = new List<object>();//根据 源单号 查询采购入库单String data = "{\n" +"    \"FormId\": \"STK_InStock\",\n" +"    \"FieldKeys\": \"FRealQty \",\n" +"    \"FilterString\": \"FSRCBillNo = \'"+FSRCBillNo + "\'and  FDocumentStatus = 'C'" +" \",   \"OrderString\": \"\",\n" +"    \"TopRowCount\": 0,\n" +"    \"StartRow\": 0,\n" +"    \"Limit\": 0\n" +"}";httpClient.Url = "http://192.168.1.208/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc";Parameters.Add(data);httpClient.Content = JsonConvert.SerializeObject(Parameters);string jsonString = httpClient.AsyncRequest().ToString();JArray jarry = JArray.Parse(jsonString);//string fid = jarry[0][0].ToString();// "[[10.0000000000],[1990.0000000000],[30.0000000000]]"double value = 0;if (jarry.Count > 0) {for (int i = 0; i < jarry.Count; i++){if (jarry[i] != null){value += (double)jarry[i][0];}}}return value;}

ERP对接过程中遇到的问题总结(webapi)相关推荐

  1. 国标GB/T28181视频流媒体服务器4G摄像头视频无插件直播方案对接过程中前端设备正常上线但视频无法播放问题解决

    背景分析 2012年6月1日,由公安部牵头起草的GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>正式发布实施.要将全国视频统一联网,制定统一的国家标准 ...

  2. 在实施ERP系统过程中如何进行培训工作?

    要想ERP实施成功,对人员的培训不能少.但是,很多企业在人员培训上却遇到了很大的困难,具体表现在在培训内容与实际的实施过程脱节,各个员工在工作中总是学习归学习,工作按照老套路.那么,企业究竟应该如何对 ...

  3. ERP实施过程中的摘记

    ERP是一个大而全的业务逻辑系统,关注产.购.销.财:每个模块可以理解为一个小的定制系统:好的应用系统可以通过配置,部分二次开发来完成业务要求. 对于已经公司历史悠久,切之前使用定制开发产品,简单实现 ...

  4. ERP实施过程中的十个“拦路虎”

    ERP软件实施失败通常是由大事件中隐藏的各种微小.看似无关的细节导致的.这会为企业的劳动力成本.延误.停工.生产率和设备等多方面带来损失,此外还有高管层的形象和信誉,并损害贵公司的品牌诚信度.那么,E ...

  5. erp实施过程中企业会受到怎样的影响?

    随着经济全球化的发展,企业面临着更加激烈的市场竞争和更加严峻的形势,这也使得企业更加重视信息化建设.ERP作为信息化建设项目的重要项目之一,逐渐受到企业的关注.那么ERP的实施对企业有什么影响呢? 1 ...

  6. ERP实施过程中的误区 你知道吗?

    当下,ERP管理系统越来越受到市场青睐,企业纷纷上马该系统来辅助企业发展.在传统的印刷领域上马ERP管理系统的印刷企业不在少数,一些效益好,发展快.有规模.有创新理念的企业希望通过ERP管理系统助推企 ...

  7. 新旧ERP系统替换过程中的数据迁移

    由于各种原因,越来越多的企业面临着ERP系统替换问题,而在系统更换前,现有ERP系统中有效数据的导入,对ERP系统切换以及新系统正常运行有着重要影响.数据迁移稍有不慎,便会造成新系统不能正常启动,而迁 ...

  8. ERP系统实施过程问题概览

    ERP系统在我国国内实施的成功率还不是很高,ERP实施过程中存在着大量的问题.总的来说,没有明确的目标.没有业务流程的观点.员工的抵制.不合理的绩效考核制度,这四个问题严重的阻碍了ERP系统的实施效果 ...

  9. 分析ERP在中小企业中的应用(最新市场洞析)

    迄今为止,在工商行政部门注册的中小企业已超1000万家,占全部注册企业的99.3%.中小企业创造的最终产品和服务价值占国内生产总值的比重超过55.6%,创造的税收收入占全国税收的46.2%,提供出口6 ...

最新文章

  1. Ehcache的介绍
  2. BeX5报表开发中Excel格式修改的一个小问题
  3. postgresql查询栅格数据范围(extent)
  4. PHP foreach遍历数组(多种方式)
  5. 有没有可以在JavaScript里可以用的锁?
  6. ASP.NET Core依赖注入深入讨论
  7. java8optional_关于Java 8的Optional的介绍
  8. REBOOT Reload - 可安装在优盘的 Windows 和 DOS 启动盘
  9. 华为鸿蒙系统明年8月份,华为鸿蒙系统明年上线,力争第五大操作系统,能否成功?...
  10. EZchip将推全球首款100核64位ARM A-53芯片
  11. iPhone上传文件到ftp服务器,将文件上传到iPhone上的FTP服务器
  12. JavaWeb应用项目部署到云ubuntu
  13. Creating and Destroying Objects
  14. 用了这么久的 Chrome,你不会还没掌握这个功能吧?
  15. 远程移动设备平台STF搭建指南
  16. CISSP考试回忆录 | 考试契机、曲折备考、考试现场回顾
  17. AI后门检测论文翻译:Universal Litmus Patterns: Revealing Backdoor Attacks in CNNs
  18. Linux下的桥接模式和Nat模式的区别
  19. ARM NEON - RGB转灰度的实现 (DSP Factory学习总结)
  20. (java)leetcode121 买卖股票的最佳时机1(Best Time to Buy and Sell Stock)针对数组的峰值和谷底的操作

热门文章

  1. week6 day1 网络编程之扫盲知识与套接字介绍
  2. 入门it要学计算机组成原理,计算机语言入门先学什么?
  3. 【H3C V7路由器实战视频课程系列-8】IS-IS路由配置与管理-王达-专题视频课程
  4. Django:模板系统_基础
  5. 小米 M365有致命漏洞!骇客能轻易远端控制
  6. 上采样和下采样_首次采样带回 嫦娥五号为什么是中国航天史上最复杂任务?...
  7. 推荐8款不错的HTML5文本编辑器
  8. 【笔记】win11系统非txt文档但用txt打开编辑后保存总提示另存。
  9. Matplotlib 使用总结(画图线图、散点图、条形图、柱形图、3D图形等)
  10. 物联网第三步: Tornado-接口与模版