找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 8685|回复: 9

[其他] u8API调用问题

[复制链接]
发表于 2017-8-3 08:15:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

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

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

点评

牛逼的人还没出现  详情 回复 发表于 2017-8-3 10:39
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2017-8-3 10:39:38 | 显示全部楼层
光光光光 发表于 2017-8-3 08:47
有点牛逼啊。。。。。。

牛逼的人还没出现
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2017-8-3 11:09:50 | 显示全部楼层
有高手没,解决了我就打赏了哟
回复 点赞 拍砖

使用道具 举报

发表于 2017-8-13 17:15:07 | 显示全部楼层
可能是现存量检查没有通过,获取现存量检查XML展现看一下!
回复 点赞 拍砖

使用道具 举报

发表于 2017-9-30 15:37:38 | 显示全部楼层
cbustype是传文本串,api那边写错了,时间戳ufts可以不要穿,u8login要破解下,我有总部培训视频,有偿提供,有需要可以加我Q 516509445
回复 点赞 拍砖

使用道具 举报

发表于 2018-5-26 13:38:37 | 显示全部楼层
好好学习 学习大佬
回复 点赞 拍砖

使用道具 举报

发表于 2019-3-15 18:12:25 | 显示全部楼层
看看 看看 最近一直在看api
回复 点赞 拍砖

使用道具 举报

发表于 2021-6-24 13:23:06 | 显示全部楼层
看看资源管理器中有些必填项填了么,像editprop 编辑属性这是必填项
回复 点赞 拍砖

使用道具 举报

发表于 2021-7-2 15:43:16 | 显示全部楼层

好好学习 学习大佬
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-3-29 20:13 , Processed in 0.054190 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表