beckham_xuyong 发表于 2017-8-3 08:15:06

u8API调用问题

各位高手,我写了个调用U8 API生成销售订单的程序。程序运行时没有报错,但就是没有生成销售订单。请高手看一下,我的代码是哪点出了错(代码用的是C#,U8版本是U8 V12.0):
         string addresult;

            try
            {
                //第一步:构造u8login对象并登陆(引用U8API类库中的Interop.U8Login.dll)
                //如果当前环境中有login对象则可以省去第一步
                U8Login.clsLogin u8Login = new U8Login.clsLogin();
                String sSubId = "AS";
                String sAccID = "(default)@999";
                String sYear = DateTime.Now.Year.ToString();
                String sUserID = "demo";
                String sPassword = "1";
                //String sDate = DateTime.Now.ToShortDateString();
                string sDate = "2017-6-26";
                String sServer = "10.0.1.15";
                String sSerial = "";
                if (!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial))
                {
                  //Console.WriteLine("登陆失败,原因:" + u8Login.ShareString);
                  string errmsg = u8Login.ShareString;
                  Marshal.FinalReleaseComObject(u8Login);
                  throw new Exception(errmsg);
                }

                //第二步:构造环境上下文对象,传入login,并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                envContext.U8Login = u8Login;

                //销售所有接口均支持内部独立事务和外部事务,默认内部事务
                //如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction属性设置为false
                //envContext.BizDbConnection = new ADO.Connection();
                //envContext.IsIndependenceTransaction = false;

                //设置上下文参数
                envContext.SetApiContext("VoucherType",12); //上下文数据类型:int,含义:单据类型:12

                //第三步:设置API地址标识(Url)
                //当前API:新增或修改的地址标识为:U8API/SaleOrder/Save
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/SaleOrder/Save");

                //第四步:构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

                //第五步:API参数赋值

                //给BO表头参数domHead赋值,此BO参数的业务类型为销售订单,属表头参数。BO参数均按引用传递
                //提示:给BO表头参数domHead赋值有两种方法
                //MSXML2.DOMDocument domHead = new MSXML2.DOMDocumentClass();
                //方法一是直接传入MSXML2.DOMDocumentClass对象
                //broker.AssignNormalValue("domHead", new MSXML2.DOMDocumentClass());

                //方法二是构造BusinessObject对象,具体方法如下:
                BusinessObject domHead = broker.GetBoParam("domHead");
                domHead.RowCount = 1; //设置BO对象(表头)行数,只能为一行


                domHead["id"] = "1"; //主关键字段,int类型
                domHead["csocode"] = "20170201"; //订 单 号,string类型
                domHead["ddate"] = Convert.ToDateTime("2017-6-26"); //订单日期,DateTime类型
                domHead["cbustype"] = "12"; //业务类型,int类型
                domHead["cstname"] = "零售"; //销售类型,string类型
                domHead["ccusabbname"] = "合川李晓霞"; //客户简称,string类型
                domHead["cdepname"] = "渝中片区"; //销售部门,string类型
                domHead["itaxrate"] = "0"; //税率,double类型
                domHead["cexch_name"] = "人民币"; //币种,string类型
                domHead["cmaker"] = "demo"; //制单人,string类型
                domHead["breturnflag"] = "0"; //退货标志,string类型
                domHead["ufts"] = "20170626"; //时间戳,string类型
                domHead["cstcode"] = "22"; //销售类型编号,string类型
                domHead["cdepcode"] = "0100109"; //部门编码,string类型
                domHead["ccuscode"] = "JM0002"; //客户编码,string类型
                domHead["ccushand"] = ""; //客户联系人手机,string类型
                domHead["cpsnophone"] = ""; //业务员办公电话,string类型
                domHead["cpsnmobilephone"] = ""; //业务员手机,string类型
                domHead["cattachment"] = ""; //附件,string类型
                domHead["csscode"] = ""; //结算方式编码,string类型
                domHead["cssname"] = ""; //结算方式,string类型
                domHead["cinvoicecompany"] = ""; //开票单位编码,string类型
                domHead["cinvoicecompanyabbname"] = ""; //开票单位简称,string类型
                domHead["ccuspersoncode"] = ""; //联系人编码,string类型
                domHead["dclosedate"] = ""; //关闭日期,string类型
                domHead["dclosesystime"] = ""; //关闭时间,string类型
                domHead["bmustbook"] = ""; //必有定金,string类型
                domHead["fbookratio"] = ""; //定金比例,string类型
                domHead["cgathingcode"] = ""; //收款单号,string类型
                domHead["fbooksum"] = ""; //定金原币金额,string类型
                domHead["fbooknatsum"] = ""; //定金本币金额,string类型
                domHead["fgbooknatsum"] = ""; //定金累计实收本币金额,string类型
                domHead["fgbooksum"] = ""; //定金累计实收原币金额,string类型
                domHead["ccrmpersonname"] = ""; //相关员工,string类型
                domHead["csysbarcode"] = ""; //单据条码,string类型
                domHead["ioppid"] = ""; //销售机会ID,string类型
                domHead["contract_status"] = ""; //contract_status,string类型
                domHead["csvouchtype"] = ""; //来源电商,string类型
                domHead["bcashsale"] = ""; //现款结算,string类型
                domHead["iflowid"] = ""; //流程id,string类型
                domHead["cflowname"] = ""; //流程分支描述,string类型
                domHead["cchangeverifier"] = ""; //变更审批人,string类型
                domHead["dchangeverifydate"] = ""; //变更审批日期,string类型
                domHead["dchangeverifytime"] = ""; //变更审批时间,string类型
                domHead["cmemo"] = "test";
                domHead["cdefine13"] = "13112345678";
                domHead["cdefine14"] ="dde";

                BusinessObject domBody = broker.GetBoParam("domBody");
                domBody.RowCount = 1; //设置BO对象行数
                domBody["isosid"] = "1"; //主关键字段,int类型
                domBody["cinvname"] = "纯岸"; //存货名称,string类型
                domBody["cinvcode"] = "110501001"; //存货编码,string类型
                domBody["bfree2"] = "Z-008";
                domBody["bfree3"] = "电子商务";
                domBody["bfree4"] = "180*200*9";
                domBody["autoid"] = ""; //销售订单 2,int类型
                domBody["iquantity"] = 1.00; //数量,double类型
                domBody["dpredate"] = Convert.ToDateTime("2017-6-26"); //预发货日期,DateTime类型
                domBody["dpremodate"] = Convert.ToDateTime("2017-6-26"); //预完工日期,DateTime类型
                domBody["borderbom"] = ""; //是否订单BOM,int类型
                domBody["borderbomover"] = ""; //订单BOM是否完成,int类型
                domBody["id"] = "1"; //主表id,int类型
                domBody["iinvexchrate"] = ""; //换算率,double类型
                domBody["cunitid"] = ""; //销售单位编码,string类型
                domBody["cinva_unit"] = ""; //销售单位,string类型
                domBody["cinvm_unit"] = "06"; //主计量单位,string类型
                domBody["igrouptype"] = ""; //单位类型,uint类型
                domBody["cgroupcode"] = "11"; //计量单位组,string类型
                domBody["dreleasedate"] = ""; //预留失效日期,DateTime类型
                domBody["editprop"] = ""; //编辑属性:A表新增,M表修改,D表删除,string类型
                domBody["fstockquano"] = ""; //现存件数,string类型
                domBody["fcanusequano"] = ""; //可用件数,string类型
                domBody["iimid"] = ""; //进口订单明细行,string类型
                domBody["btracksalebill"] = ""; //PE跟单,string类型
                domBody["ccorvouchtype"] = ""; //来源单据类型,string类型
                domBody["ccorvouchtypename"] = ""; //来源单据名称,string类型
                domBody["icorrowno"] = ""; //来源单据行号,string类型
                domBody["fcanusequan"] = ""; //可用量,string类型
                domBody["fstockquan"] = ""; //现存量,string类型
                domBody["bsaleprice"] = "1100"; //报价含税,string类型
                domBody["bgift"] = ""; //赠品,string类型
                domBody["forecastdid"] = ""; //预测单子表ID,string类型
                domBody["cdetailsdemandcode"] = ""; //子件需求分类代号,string类型
                domBody["cdetailsdemandmemo"] = ""; //子件需求分类说明,string类型
                domBody["cbsysbarcode"] = ""; //单据行条码,string类型
                domBody["busecusbom"] = ""; //使用客户BOM,string类型
                domBody["bptomodel"] = ""; //bptomodel,string类型
                domBody["cparentcode"] = ""; //父节点编码,string类型
                domBody["cchildcode"] = ""; //子节点编码,string类型
                domBody["icalctype"] = ""; //发货模式,string类型
                domBody["fchildqty"] = ""; //使用数量,string类型
                domBody["fchildrate"] = ""; //权重比例,string类型
                //broker.AssignNormalValue("domBody", new MSXML2.DOMDocumentClass());

                broker.AssignNormalValue("VoucherState", 0);

                broker.AssignNormalValue("vNewID", "");

                //给普通参数DomConfig赋值。此参数的数据类型为MSXML2.IXMLDOMDocument2,此参数按引用传递,表示ATO,PTO选配
                //broker.AssignNormalValue("DomConfig", new MSXML2.IXMLDOMDocument2());



                //给普通参数domPosition赋值。此参数的数据类型为System.Object,此参数按引用传递,表示货位:传空
                //broker.AssignNormalValue("domPosition", "");

                //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection,此参数按引用传递,表示连接对象,如果由调用方控制事务,则需要设置此连接对象,否则传空
                //broker.AssignNormalValue("cnnFrom", null);

                //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String,此参数按值传递。在API调用返回时,可以通过GetResult("VouchId")获取其值
                //broker.AssignNormalValue("VouchId", "");

                //该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
                //MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
                //broker.AssignNormalValue("domMsg", domMsg);

                //给普通参数bCheck赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否控制可用量。
                //broker.AssignNormalValue("bCheck", false);

                //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示检查可用量
                //broker.AssignNormalValue("bBeforCheckStock", false);

                //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否红字单据
                //broker.AssignNormalValue("bIsRedVouch", false);

                //给普通参数sAddedState赋值。此参数的数据类型为System.String,此参数按值传递,表示传空字符串
                //broker.AssignNormalValue("sAddedState", "");

                //给普通参数bReMote赋值。此参数的数据类型为System.Boolean,此参数按值传递,表示是否远程:转入false
                //broker.AssignNormalValue("bReMote", false);

                //第六步:调用API
                if (!broker.Invoke())
                {
                  //错误处理
                  Exception apiEx = broker.GetException();
                  if (apiEx != null)
                  {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            Console.WriteLine("系统异常:" + sysEx.Message);
                            MessageBox.Show(sysEx.Message);
                            //todo:异常处理
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            //Console.WriteLine("API异常:" + bizEx.Message);
                            MessageBox.Show(bizEx.Message);
                            //todo:异常处理
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            Console.WriteLine("异常原因:" + exReason);
                            MessageBox.Show(exReason);
                        }
                  }
                  //结束本次调用,释放API资源

                  broker.Release();
                  //MessageBox.Show("ok");
                }
                //第七步:获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.String,此参数按值传递,表示成功为空串
                System.String result = broker.GetReturnValue() as System.String;

                //获取out/inout参数值

                //获取普通INOUT参数vNewID。此返回值数据类型为string,在使用该参数之前,请判断是否为空
                string vNewIDRet = broker.GetResult("vNewID") as string;

                //结束本次调用,释放API资源
                broker.Release();
                return;

            }
            catch (Exception ex)
            {
                //return new ReturnJsonValue("error", ex.Message, 0, null);
                //return "error";
                MessageBox.Show ( ex.Message);
            }

光光光光 发表于 2017-8-3 08:47:34

有点牛逼啊。。。。。。

beckham_xuyong 发表于 2017-8-3 10:39:38

光光光光 发表于 2017-8-3 08:47
有点牛逼啊。。。。。。

牛逼的人还没出现:funk:

beckham_xuyong 发表于 2017-8-3 11:09:50

有高手没,解决了我就打赏了哟

zjx918 发表于 2017-8-13 17:15:07

可能是现存量检查没有通过,获取现存量检查XML展现看一下!

beruning 发表于 2017-9-30 15:37:38

cbustype是传文本串,api那边写错了,时间戳ufts可以不要穿,u8login要破解下,我有总部培训视频,有偿提供,有需要可以加我Q 516509445

余生请多指教 发表于 2018-5-26 13:38:37

好好学习 学习大佬

lpf 发表于 2019-3-15 18:12:25

看看 看看 最近一直在看api

小牛升大牛 发表于 2021-6-24 13:23:06

看看资源管理器中有些必填项填了么,像editprop 编辑属性这是必填项

wlz5419553 发表于 2021-7-2 15:43:16


好好学习 学习大佬
页: [1]
查看完整版本: u8API调用问题