• U890 API 二次开发 测试销售发货单保存 遇到的一些问题


    由于之前没有做过U8 API的开发,现在遇到了很多问题,有些经过查找摸索已经解决,和大家分享一下,不过目前这个销售发货单的保存还有问题!

    1、就是登录时出错,尽管登录信息都正确,但还是登录失败提示“类型不匹配”,那么这个就u8Login.dll文件的问题,在上一个篇章已经说明.

    2、如果可以正常登录,单据的装载一般都没有什么问题,都可以查询到单据信息(有一点要注意,API它要的单据ID是主表的ID,就拿查询销售发货单来,

    /// <summary>
            /// 销售订单:装载单据
            /// </summary>
            public SO_SOMain Load(string vouchID)
            {
                try
                {
                    //第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
                    U8EnvContext envContext = new U8EnvContext();
                    envContext.U8Login = Login.U8Login;
    
                    //销售所有接口均支持内部独立事务和外部事务,默认内部事务
                    //如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction属性设置为false
                    //envContext.BizDbConnection = new ADO.Connection();
                    //envContext.IsIndependenceTransaction = false;
    
                    //设置上下文参数
                    envContext.SetApiContext("VoucherType", 12); //上下文数据类型:int,含义:单据类型:12
    
                    //第三步:设置API地址标识(Url)
                    //当前API:装载单据的地址标识为:U8API/SaleOrder/Load
                    U8ApiAddress myApiAddress = new U8ApiAddress("U8API/SaleOrder/Load");
    
                    //第四步:构造APIBroker
                    U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
    
                    //第五步:API参数赋值
    
                    //给普通参数VouchID赋值。此参数的数据类型为string,此参数按值传递,表示单据号
                    broker.AssignNormalValue("VouchID", vouchID);
    
                    //给普通参数blnAuth赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否控制权限:true
                    broker.AssignNormalValue("blnAuth", true);
    
                    //第六步:调用API
                    if (!broker.Invoke())
                    {
                        //错误处理
                        Exception apiEx = broker.GetException();
                        if (apiEx != null)
                        {
                            if (apiEx is MomSysException)
                            {
                                MomSysException sysEx = apiEx as MomSysException;
                                Console.WriteLine("系统异常:" + sysEx.Message);
                                //todo:异常处理
                            }
                            else if (apiEx is MomBizException)
                            {
                                MomBizException bizEx = apiEx as MomBizException;
                                Console.WriteLine("API异常:" + bizEx.Message);
                                //todo:异常处理
                            }
                            //异常原因
                            String exReason = broker.GetExceptionString();
                            if (exReason.Length != 0)
                            {
                                Console.WriteLine("异常原因:" + exReason);
                            }
                        }
                        //结束本次调用,释放API资源
                        broker.Release();
                        return null;
                    }
    
                    //第七步:获取返回结果
    
                    //获取返回值
                    //获取普通返回值。此返回值数据类型为System.String,此参数按值传递,表示成功为空串
                    System.String result = broker.GetReturnValue() as System.String;
                    //throw new Exception(result);
                    if (!string.IsNullOrEmpty(result))
                        throw new Exception(result);
                    //获取out/inout参数值
    
                    //out参数domHead为BO对象(表头),此BO对象的业务类型为销售订单。BO参数均按引用传递,具体请参考服务接口定义
                    //如果要取原始的XMLDOM对象结果,请使用GetResult("domHead") as MSXML2.DOMDocument
                    BusinessObject domHeadRet = broker.GetBoParam("domHead");
                    Console.WriteLine("BO对象(表头)行数为:" + domHeadRet.RowCount); //获取BO对象(表头)的行数
                    //获取BO对象(表头)各字段的值。字段定义详见API服务接口定义
    
                    //MSXML2.DOMDocument domHead = broker.GetResult("domHead") as MSXML2.DOMDocument;
    
                    //out参数domBody为BO对象(表体),此BO对象的业务类型为销售订单。BO参数均按引用传递,具体请参考服务接口定义
                    //如果要取原始的XMLDOM对象结果,请使用GetResult("domBody") as MSXML2.DOMDocument
                    BusinessObject domBodyRet = broker.GetBoParam("domBody");
                    Console.WriteLine("BO对象(表体)行数为:" + domBodyRet.RowCount); //获取BO对象(表体)的行数
                    //获取BO对象(表体)各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义
    
                    //MSXML2.DOMDocument domBody = broker.GetResult("domBody") as MSXML2.DOMDocument;
    
    
                    //结束本次调用,释放API资源
                    broker.Release();
    
                    SO_SOMain so_somain = EntityConvert.ToSO_SOMain(domHeadRet[0]);
                    SO_SODetails so_sodetail;
                    for (int i = 0; i < domBodyRet.RowCount; i++)
                    {
                        so_sodetail = EntityConvert.ToSO_SODetails(domBodyRet[i]);
                        so_sodetail.cSOCode = so_somain.cSOCode;
                        so_somain.List.Add(so_sodetail);
                    }
                    return so_somain;
    
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
    
                }
            }

    参数vouchID指的是销售订单主表SO_SOMain的ID字段,而不是cSOCode订单号字段,你需要根据订单号查询ID)。

    问题都集中在销售发货单的保存,在终端根据查询的销售订单信息来扫描存货,封装销售发货单实体类对象,扫描完成提交数据,在后台为API的BusinessObject对象赋值后,在“if (!broker.Invoke())”这句话直接报错,提示“未将对象设置到对象的实例”,有可能就是你赋值有问题,你要仔细检查赋值是否为null,或都赋值类型错误,如果你不知道那个变量出现问题,你可以利用ILSpy来调试,看看那个变量为null,

    后来又提示一个“业务类型(0)不正确”,

    是啊,业务类型为int型我把枚举类型强转为整型,这是API的“domHead[0]["cbustype"] = ""; //业务类型,int类型”原句,后来网上说是不应该传整型,而是字符串,

    可是我为cbustype赋值字符串后,总是为null,赋值之后再快速监视得的还是null,哎,这就不对了,刚赋值怎么没了,上网查询之后有人说“UFIDA.U8.U8APIFramework.dll”,找一个最新的就行了,试了下,得,还真行了。可以赋值字符串了,就在我认为没问题的时候,它又出现了一个问题,但不是异常

    这是broker.Invoker()方法之后得到的结果。

    目前这个问题还没有解决,希望那位高手能给指点一下,可能还是某个参数赋值错误或未赋值......

    写的有点乱,但希望可能帮助那些调试U8API遇到这些问题的同鞋......

  • 相关阅读:
    MGR集群中节点间数据一致性如何检查?
    MySQL错误日志出现 [Note] InnoDB: Discarding tablespace of table db.table: Data structure corruption产生可能的原因及解决办法?
    Redis中如何发现并优化生产环境的big key?
    HashHelper
    设计模式-结构型-组合模式
    设计模式-结构型-享元模式
    设计模式-结构型-外观模式
    泛型Generic
    Redis之缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级
    设计模式-结构型-装饰者模式
  • 原文地址:https://www.cnblogs.com/tianzhenyun/p/3086166.html
Copyright © 2020-2023  润新知