U8API开发手册(VB版)

时间:2019-05-14 00:35:56下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《U8API开发手册(VB版)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《U8API开发手册(VB版)》。

第一篇:U8API开发手册(VB版)

U8API开发手册

作者:商平锋

版权所有:用友软件股份有限公司 1.简介

U8API是为U8客户化应用开发提供的一套标准化的U8ERP业务编程接口。是U8UAP二次开发体系的重要组成部分。它包括一整套涵盖U8ERP采购、销售、库存、制造(规划中)、财务(规划中)、基本档案(规划中)等业务模块的API接口资源。U8API的推出为U8标准产品更好的适应用户的个性化需求,更好的实现客户化交付提供了有力支持。

U8API按照U8ERP业务产品模块进行分类,并以U8主要业务实体(单据、档案、凭证)作为操作对象,提供了常用的基本操作。比如:对于库存的收发单据,提供“新增”、“审核”、“弃审”、“删除”、“装载”、“修改”六个API接口。目前,U8API提供了供应链采购、销售、库存三个产品的所有单据的增删改、审核/弃审等API接口,后续版本会逐步将制造、财务、基本档案等模块的API纳入进来。

U8API通过“U8API资源管理器”对U8范围内所有API进行集中统一分类管理,形成了一套完整的U8API资源库。U8API的使用者可以使用“U8API资源管理器”浏览、查看API及其接口定义,并可辅助进行代码生成(目前支持C#和VB语言);API的开发者可以通过此工具发布、注册API,所有业务API都必须在“U8API资源管理器”中进行注册。

U8API还提供了一套运行时调用框架——U8APIBroker。它是所有U8API的调用代理,用户要使用某个API只需调用U8APIBroker即可,无需直接访问真正的API。U8APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。

U8API与U8EAI接口从功能上看比较相识,但它们的特性有差别。U8API采用传统的编程模型,更靠近底层,业务逻辑粒度更细,而且还需要或依赖一些特定的上下文环境,比如:login、事务等;而U8EAI接口则是完全松耦合的,采用XML和请求/响应的消息传递模式,且业务粒度比较粗放。这些特性的差别决定了它们的应用领域不同,U8API更适合于U8内部的功能扩展和客户个性化开发,而U8EAI则适合外部系统与U8之间以业务数据交换为特征的应用集成开发。

2.API应用

2.1.API总体应用过程

2.1.1 API浏览查找

在“开始”->“程序”->“用友ERP-U8”->“UAP”目录下找到“U8API资源管理器”,单击,登录,进入“U8API资源管理器”。在左侧 “U8API” 树形节点下,找到某某模块,如“库存管理”模块(可以看到下面列有很多个单据,如盘点单、采购入库单等),展开要操作的单据,分两个子节点:“事件”和“服务接口”,在“服务接口”下可以看到该单据提供的API接口,如“添加新单据”、“审核单据”等。双击这些节点出现该API的详细描述,如下图2.1所示。在节点上右键单击弹出“上下文菜单”,在“代码示例”菜单项上弹出下一级子菜单,单击它们,如单击“VB代码示例”则可以看到调用该API的VB示例代码,如下图2.2所示。直接拷贝这些代码,然后在集成开发环境(IDE)中编辑和编译这些代码,即能实现调用U8标准API。利用这些代码示例时,请按照其中每一步骤的提示说明正确操作,如添加必要的引用、按照自动生成的代码填入正确的参数等。正确使用则可以调用成功,否则会返回详细的错误信息。

以下代码中均以VB为例,C#语言请具体查看对应的C#代码示例部分。

图2.1 接口描述

图 2.2 代码示例 2.1.2 API调用过程  组件引用

针对两种语言,需要引用不同的组件。(1)VB:

%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.tlb、添加Microsoft XML v3.0引用 如下图2.3、2.4所示。

(2)C#:

%U8SOFT%IntegereropIntegererop.U8Login.dll、%U8SOFT%IntegereropIntegererop.MSXML2.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.dll 如下图2.5、2.6、2.7所示。

其中,%U8SOFT%表示U8-872的安装目录。

图2.3 添加对U8API框架类库引用(.tlb)

图2.4 添加Microsoft XML v3.0引用

图 2.5 添加对U8Login.dll引用

图 2.6 添加对Integererop.MSXML2.dll引用

图 2.7 添加对U8API框架类库引用(.dll)

 API调用

添加必要的引用后,可以直接利用自动生成的代码示例(支持VB和C#两种语言),结合API接口详细描述,填入必要的参数值,就可以调用U8 API。

总体上,对U8 API的调用分成六个步骤: 1)构造u8login对象并登陆;

2)构造环境上下文对象,传入login,并按需设置其它上下文参数;

3)构造APIBroker,调用Connect,传入API地址标识(Url)和环境上下文; 4)API参数赋值; 5)调用API;

6)获取返回结果。

详细的API调用过程请看下文“API内容”中各个模块中介绍的“开发步骤”。

下面重点介绍几个关键要点和步骤:环境上下文、API地址、APIBroker、普通参数赋值、BO参数赋值。

 环境上下文

环境上下文指在调用U8API时需要初始化的调用环境,包括Login、事务、特殊的业务参数等。环境上下文被初始化后,相关的环境参数会被业务API使用。

Dim u8EnvCtx As New U8EnvContext

 Login 需要将U8Login对象传递给环境上下文,U8Login对象必须已经登录过。Set u8EnvCtx.U8Login = ologin  事务

如果需要由外部发起事务,则可以发起事务的ADO Connection对象传递给环境上下文:

Set u8EnvCtx.BizDbConnection = new ADO.Connection()同时需要设置一个外部事务标记:

u8EnvCtx.IsIndependenceTransaction = true

 特殊业务参数

特殊业务参数指调用某些API需要设置的特定上下文参数,比如:销售的API必须要设置如VoucherType上下文参数,设置方法为:

u8EnvCtx.SetApiContext “VoucherType”, 23  API地址

API地址是指API在U8API系统中的唯一标识,也叫API的URI,通过该标识唯一确定一个U8API。如,API地址“U8API/SaleOrder/Save”代表销售订单中的“新增或修改”这样一个API接口。

 APIBroker APIBroker是所有U8API的调用代理接口。使用U8所有API都必须通过APIBroker间接调用。APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。调用API的时候,需要首先创建一个APIBroker, 然后调用其Connect,传入API地址和环境上下文:

Dim u8apiBroker As New U8ApiComBroker u8apiBroker.Connect “U8API/SaleOrder/Save”, u8EnvCtx

 普通参数赋值

API参数分两种类型:BO参数和普通参数。普通参数是指非单据表头/表体类型的参数,包括基本类型参数(String、Integer等)、知名对象参数(Connection、DOMDocument等)。普通参数的赋值采用如下方式:

u8apiBroker.AssignNormalValue “VoucherState”, 2

 BO参数赋值

BO参数即单据表头或表体类型的参数。对BO参数,支持两种方式传入,一种传BO对象,另一种传DOM对象。以下分别介绍:  传BO对象

给BO表头参数或表体参数赋值,推荐使用BO对象(BussinessObject)。例如:

Dim domHead As BusinessObject

Set domHead = u8apiBroker.GetBoParam(“domHead”)

domHead.RowCount = 1;'设置行数,不设置也可

'给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 '以下代码示例只设置第一行值。各字段定义详见API服务接口定义

'****************************** 以下是必输字段****************************' domHead(0).SetValue “poid”,“";'主关键字段,Integer类型 domHead(0).SetValue ”dpodate“,”“;'日期,Date类型 domHead(0).SetValue ”cpoid“,”“;'订单编号,String类型

'***************************** 以下是非必输字段****************************' domHead(0).SetValue ”ipresent“,”“;'现存量,String类型 domHead(0).SetValue ”cmaketime“,”“;'制单时间,Date类型 domHead(0).SetValue ”cmodifytime“,”“;'修改时间,Date类型 „„

„„

在此种情况下U8 API框架会对BO对象各字段进行参数校验。对字段进行赋值时,值可以是真实类型,也可以是无类型的字符串。 传DOM对象

给BO表头参数或表体参数赋值,也支持直接传入DOM对象(DOMDocument)。例如:

Dim domHead As New MSXML2.DOMDocument domHead.load ”domHead.xml“

u8apiBroker.AssignNormalValue ”domHead “, domHead

但是,在此种情况下U8 API框架不会对DOM对象进行参数验证。请在使用该方法之前,确保DOM对象的正确性。2.1.3 API典型应用场景  执行单一操作

单一操作指一项任务只需要一个API完成,比如:单据新增、审核/弃审、删除等单一操作。这是API调用最常见的场景,只需按照API的接口规范构造参数直接调用即可。

 执行复合操作

复合操作,即一项任务由多个API的协作来完成。比如,自定义的单据维护界面的主要逻辑,一般由以下四个步骤构成:

1)加载单据;

2)在编辑界面上显示; 3)用户修改单据字段; 4)提交保存。

以上步骤需要进行两次API调用: 1)加载单据时候调用“加载API”,以获取单据BO对象(或原始DOM对象)并在界面上展现;

2)用户在修改单据时其实就是在修改BO对象,用户保存单据时调用“保存API”,此时要将此BO对象传给“保存API”(而不用构造新的BO对象)。 代码示例

(1)首先,登陆;

'构造u8login对象并登陆 Dim ologin As Object

Set ologin = CreateObject(”U8Login.clsLogin“)If Not ologin.login(”AS“, ”(default)@001“, ”2008“, ”demo“, ”“, ”2008-7-7“, ”localhost“)Then

MsgBox ologin.ShareString

(2)然后,通过LOAD接口获取BO对象;

'构造环境上下文对象,传入login,并按需设置其它上下文参数 Dim u8EnvCtx As New U8EnvContext Set u8EnvCtx.U8Login = ologin '设置上下文参数

u8EnvCtx.SetApiContext ”VoucherType“, ”上下文值“

„„

'构造APIBroker,调用Connect,传入Api的地址标识(Url),传入上下文 Dim u8apiBroker As New U8ApiComBroker u8apiBroker.Connect “装载单据的地址标识”, u8EnvCtx 'API参数赋值

u8apiBroker.AssignNormalValue ”参数名“, ”参数值“ „„ '调用LOAD接口API If u8apiBroker.InvokeApi()= False Then

'错误处理

MsgBox u8apiBroker.GetLastError()If u8apiBroker.ErrorType = ExceptionType_Business Then '处理API业务错误 '处理系统错误 ElseIf u8apiBroker.ErrorType = ExceptionType_System Then End If '获取返回结果

'获取表头或表体的BO对象,如果要取原始的XMLDOM对象结果,请使用GetResult(参数名)Dim domHeadOrBodyRet As BusinessObject

Set domHeadOrBodyRet = u8apiBroker.GetBoParam(”表头或表体参数名“)MsgBox domHeadOrBodyRet.RowCount '获取返回BO对象的行数 „„ End If Else

(3)接着,BO对象经用户修改重新赋值,并传递给UPDATE接口提交保存;

'修改获取的BO对象,对需要更改的字段重新赋值 domHeadOrBodyRet(0).SetValue ”字段名“,”新的字段值“

„„

'重传入新“新增或修改”API的地址标识和环境上下文

u8apiBroker.Connect ”新增或修改”API的地址标识“, u8EnvCtx '表头或表体参数赋值

u8apiBroker.SetBoParam ”表头或表体参数名“, domHeadOrBodyRet 'API参数赋值

u8apiBroker.AssignNormalValue ”参数名“, ”参数值“ „„

'调用UPDATE接口API If u8apiBroker.InvokeApi()= False Then „„ End If

(4)最后,获取返回结果。

'获取普通返回值

Dim result As String

result = CStr(u8apiBroker.GetReturnValue())'获取out/inout参数值 „„

'结束本次调用,释放API资源 u8apiBroker.Disconnect Set u8apiBroker = Nothing 2.2.API内容 2.2.1 采购管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现采购业务单据各种操作功能的编程接口。使用采购管理的API开发接口,可以对库存管理中的采购到货单、采购普通发票、采购专用发票、采购订单、请购单、采购运费发票等单据进行审核、弃审、获取(或装载)、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的采购管理产品; 必须安装API适配器组件PUAPIConcrete.dll  接口说明

采购管理二次开发接口说明:

 审核单据-ConfirmPO方法

参数:

domHead

—— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 弃审单据-CancelconfirmPO方法

参数:

domHead

—— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 装载单据-Load方法 参数:

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象 strWhere —— 过滤条件串 varVoucherID —— 单据主表ID strLocateWhere —— 定位条件串 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 删除单据-Delete方法

参数:

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象

CurDom —— 返回DOM格式错误信息 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 新增或修改新单据-VoucherSave方法

参数:

DomHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输

VoucherState —— 保存状态,必输。2增加;1修改 ;0非编辑 curID

—— 返回单据头ID CurDom —— 返回DOM格式错误信息 UserMode —— 使用模式,0:CS;1:BS API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 开发步骤

调用采购单据某一API,主要有以下六个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Integererop.U8Login.dll,代码示例如下:

Dim ologin As Object

Set ologin = CreateObject(”U8Login.clsLogin“)'声明u8login对象 '登陆

If Not ologin.login(”AS“, ”(default)@001“, ”2008“, ”demo“, ”“, ”2008-7-7“, ”localhost“)Then MsgBox ologin.ShareString

注意:如果当前环境中有login对象则可以省去第一步。

2. 构造环境上下文对象,传入login,并按需设置其它上下文参数

Dim u8EnvCtx As New U8EnvContext Set u8EnvCtx.U8Login = ologin

'设置上下文参数

u8EnvCtx.SetApiContext ”VoucherType“, ”上下文值“ '上下文数据类型:int,含义:单据类型,采购订单 u8EnvCtx.SetApiContext ”bPositive“, ”上下文值“ '上下文数据类型:bool,含义:红蓝标识:True,蓝字 u8EnvCtx.SetApiContext ”sBillType“, ”上下文值“ '上下文数据类型:string,含义:为空串

u8EnvCtx.SetApiContext ”sBusType“, ”上下文值“ '上下文数据类型:string,含义:业务类型:普通采购,直运采购,受托代销

'构造环境上下文对象 '传入login

注意:如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:

Set u8EnvCtx.BizDbConnection = new ADO.Connection()u8EnvCtx.IsIndependenceTransaction = true 3. 构造ApiBroker对象,调用Connect,传入API的地址标识(Url)和环境上下文

Dim u8apiBroker As New U8ApiComBroker u8apiBroker.Connect ”U8API/PurchaseOrder/VoucherSave“, u8EnvCtx

4. API对象参数赋值

1)给BO表头参数DomHead或表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下:

Dim domHead As New MSXML2.DOMDocument domHead.load ”domHead.xml“

u8apiBroker.AssignNormalValue ”DomHead“, domHead

方法二是构造BusinessObject对象,具体方法如下:

'首先通过GetBoParam方法获取表头或表体参数 Dim DomHead As BusinessObject Set DomHead = u8apiBroker.GetBoParam(”DomHead“)DomHead.RowCount = 1 '设置行数

'给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 '以下代码示例只设置第一行值。各字段定义详见API服务接口定义

注意:表体的行数只能为一行,可以对表体设置多行。当设置行数为某个值时,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

'****************************** 以下是必输字段 *****************************'

„„

'***************************** 以下是非必输字段 ****************************'

DomHead(0).SetValue ”ipresent“,”字段值“ '现存量,String类型 DomHead(0).SetValue ”cmaketime“,”字段值“ '制单时间,Date类型 DomHead(0).SetValue ”cmodifytime“,”字段值“ '修改时间,Date类型 DomHead(0).SetValue ”poid“,”字段值“ '主关键字段,Integer类型 DomHead(0).SetValue ”cbustype“,”字段值“ '业务类型,String类型 DomHead(0).SetValue ”dpodate“,”字段值“ '日期,Date类型 DomHead(0).SetValue ”cpoid“,”字段值“ '订单编号,String类型

„„

2)给普通参数赋值 例如,'给普通参数VoucherState(参数名)赋值。此参数的数据类型为Integer,此参数按值传递,具体请参考服务接口定义

u8apiBroker.AssignNormalValue ”VoucherState“, ”参数值“ '参数类型:Integer 注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Double、Boolean、Date等,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

'该参数curID为OUT型参数,由于其数据类型为String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取

'该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数

Dim CurDom As New MSXML2.IXMLDOMDocument2 u8apiBroker.AssignNormalValue ”CurDom“, CurDom '参数类型:MSXML2.IXMLDOMDocument2

„„ 当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

5. 调用API If u8apiBroker.InvokeApi()= False Then

'错误处理

MsgBox u8apiBroker.GetLastError()If u8apiBroker.ErrorType = ExceptionType_Business Then '处理API业务错误 '处理系统错误 ElseIf u8apiBroker.ErrorType = ExceptionType_System Then End If

注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

6. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数 Dim DomHeadRet As BusinessObject Set DomHeadRet = u8apiBroker.GetBoParam(”DomHead“)MsgBox DomHeadRet.RowCount '获取返回BO对象的行数 注意:

如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)Dim DomHeadRet As New MSXML2.DOMDocument Set DomHeadRet = u8apiBroker.GetResult(”DomHead“)以上获取的行数是BO对象的实际行数。

'获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

'****************************** 以下是必输字段 *****************************' Dim poidRet As Integer poidRet = CInt(DomHeadRet(0).GetValue(”poid“))'主关键字段,Integer类型 Dim cbustypeRet As String cbustypeRet = CStr(DomHeadRet(0).GetValue(”cbustype“))'业务类型,String类型 Dim dpodateRet As Date dpodateRet = CDate(DomHeadRet(0).GetValue(”dpodate“))'日期,Date类型 „„

'***************************** 以下是非必输字段 ****************************' Dim ipresentRet As String ipresentRet = CStr(DomHeadRet(0).GetValue(”ipresent“))'现存量,String类型 Dim cmaketimeRet As Date cmaketimeRet = CDate(DomHeadRet(0).GetValue(”cmaketime“))'制单时间,Date类型 Dim cmodifytimeRet As Date cmodifytimeRet = CDate(DomHeadRet(0).GetValue(”cmodifytime“))'修改时间,Date类型 „„

2)获取普通返回值

代码如下:

'获取普通返回值。此返回值数据类型为String,此参数按值传递,具体请参考服务接口定义 Dim result As String

3)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,'获取普通OUT参数curID。此返回值数据类型为String,在使用该参数之前,请判断是否为空

'获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„

Dim curIDRet As String

curIDRet = CStr(u8apiBroker.GetResult(”curID“))result = CStr(u8apiBroker.GetReturnValue())2.2.2 销售管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现销售业务单据各种操作功能的编程接口。使用销售管理API开发接口,可以完成销售管理的销售报价单、销售订单、销售发货单、销售退货单、销售普通发票、销售专用发票、委托代销发货单、委托代销结算单、销售调拨单等单据的审核、弃审、获取、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的销售管理产品; 必须安装API适配器组件SAAPIConcrete.dll;

 接口说明

销售管理二次开发接口及参数说明:  审核或弃审单据-Audit方法

参数:

domHead

—— 单据表头,DOM对象,必输 bVerify

—— 审核/弃审标志,必输。true表审核;false表弃审

API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 删除单据-Delete方法

参数:

domHead —— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 装载单据-Load方法

参数:

domHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输 VouchID

—— 需要装载的单据号,可选 blnAuth

—— 是否控制权限:true

API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 新增或修改单据-Save方法

参数:

domHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输 VoucherState —— 保存状态,必输。0增加;1修改 VNewID

—— 单据的id,可选 DomConfig

—— ATO,PTO选配配置,必输,可设置为nothing API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 开发步骤

调用销售单据某一API,主要有以下六个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Integererop.U8Login.dll,代码示例如下:

Dim ologin As Object

Set ologin = CreateObject(”U8Login.clsLogin“)'声明u8login对象 '登陆

If Not ologin.login(”AS“, ”(default)@001“, ”2008“, ”demo“, ”“, ”2008-7-7“, ”localhost“)Then MsgBox ologin.ShareString

注意:如果当前环境中有login对象则可以省去第一步。

2. 构造环境上下文对象,传入login,并按需设置其它上下文参数

Dim u8EnvCtx As New U8EnvContext Set u8EnvCtx.U8Login = ologin

'构造环境上下文对象 '传入login

'设置上下文参数

u8EnvCtx.SetApiContext ”VoucherType“, ”上下文值“ '上下文数据类型:int,含义:单据类型:12

注意:如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:

Set u8EnvCtx.BizDbConnection = new ADO.Connection()u8EnvCtx.IsIndependenceTransaction = true 3. 构造ApiBroker对象,调用Connect,传入API的地址标识(Url)和环境上下文

Dim u8apiBroker As New U8ApiComBroker u8apiBroker.Connect ”U8API/SaleOrder/Save“, u8EnvCtx 4. API对象参数赋值

1)给BO表头参数DomHead或表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下:

Dim domHead As New MSXML2.DOMDocument domHead.load ”domHead.xml“

u8apiBroker.AssignNormalValue ”DomHead“, domHead

方法二是构造BusinessObject对象,具体方法如下:

'首先通过GetBoParam方法获取表头或表体参数

Dim DomHead As BusinessObject

Set DomHead = u8apiBroker.GetBoParam(”DomHead“)DomHead.RowCount = 1 '设置行数

'给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 '以下代码示例只设置第一行值。各字段定义详见API服务接口定义

注意:表体的行数只能为一行,可以对表体设置多行。当设置行数为某个值时,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

'****************************** 以下是必输字段 *****************************' domHead(0).SetValue ”id“,”字段值“ '主关键字段,Integer类型 domHead(0).SetValue ”csocode“,”字段值“ '订 单 号,String类型

domHead(0).SetValue ”ddate“,”字段值“ '订单日期,Date类型

„„

'***************************** 以下是非必输字段 ****************************' domHead(0).SetValue ”fstockquanO“,”字段值“ '现存件数,Double类型 domHead(0).SetValue ”fcanusequanO“,”字段值“ '可用件数,Double类型 domHead(0).SetValue ”iverifystate“,”字段值“ 'iverifystate,String类型

„„

2)给普通参数赋值 例如,'给普通参数VoucherState(参数名)赋值。此参数的数据类型为Integer,此参数按值传递,具体请参考服务接口定义

u8apiBroker.AssignNormalValue ”VoucherState“, ”参数值“ '参数类型:Integer 注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Double、Boolean、Date等,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

'该参数curID为OUT型参数,由于其数据类型为String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取

'该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数

Dim CurDom As New MSXML2.IXMLDOMDocument2 u8apiBroker.AssignNormalValue ”CurDom“, CurDom '参数类型:MSXML2.IXMLDOMDocument2

„„

当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

5. 调用API If u8apiBroker.InvokeApi()= False Then

'错误处理

MsgBox u8apiBroker.GetLastError()If u8apiBroker.ErrorType = ExceptionType_Business Then '处理API业务错误 '处理系统错误 ElseIf u8apiBroker.ErrorType = ExceptionType_System Then End If

注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

6. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数 Dim DomHeadRet As BusinessObject Set DomHeadRet = u8apiBroker.GetBoParam(”DomHead“)MsgBox DomHeadRet.RowCount '获取返回BO对象的行数 注意:

如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)Dim DomHeadRet As New MSXML2.DOMDocument Set DomHeadRet = u8apiBroker.GetResult(”DomHead“)以上获取的行数是BO对象的实际行数。

'获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

'***************************** 以下是非必输字段 ****************************’ Dim idRet As Integer Dim csocodeRet As String csocodeRet = CStr(domHeadRet(0).GetValue(”csocode“))'订 单 号,String类型 Dim ddateRet As Date ddateRet = CDate(domHeadRet(0).GetValue(”ddate“))'订单日期,Date类型 „„

'***************************** 以下是非必输字段 ****************************’ Dim fstockquanORet As Double fstockquanORet = CDbl(domHeadRet(0).GetValue(”fstockquanO“))'现存件数,Double类型 Dim fcanusequanORet As Double fcanusequanORet = CDbl(domHeadRet(0).GetValue(”fcanusequanO“))'可用件数,Double类型 Dim iverifystateRet As String iverifystateRet = CStr(domHeadRet(0).GetValue(”iverifystate“))'iverifystate,String类型 „„

idRet = CInt(domHeadRet(0).GetValue(”id“))'主关键字段,Integer类型

2)获取普通返回值

代码如下:

'获取普通返回值。此返回值数据类型为String,此参数按值传递,具体请参考服务接口定义 Dim result As String

3)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,'获取普通OUT参数curID。此返回值数据类型为String,在使用该参数之前,请判断是否为空

'获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„

Dim curIDRet As String

curIDRet = CStr(u8apiBroker.GetResult(”curID“))result = CStr(u8apiBroker.GetReturnValue())2.2.3 库存管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现库存业务单据各种操作功能的编程接口。使用库存管理的API开发接口,可以对库存管理中的采购入库单、其他入库单、其他出库单、产成品入库单、材料出库单、调拨单、组装单、拆卸单、形态转换单、盘点单、货位调整单、销售出库单、期初结存、不合格品记录单、不合格品处理单、期初不合格品、调拨申请单等单据进行审核、弃审、获取(或装载)、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的库存管理产品; 必须安装API适配器组件STAPIConcrete.dll  接口说明

库存管理二次开发接口说明:

 审核单据-Audit方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息

cnnFrom —— 连接对象(调用方控制事务时需要传入连接对象)TimeStamp

—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg

—— 返回DOM格式的信息:主要是可用量信息 bCheck

—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量 bList —— 传入false MakeWheres —— 传空 sWebXml —— 传入空串

oGenVouchIds —— 获取单据ID列表(返回审核时自动生成的单据的id

列表,传空)

 弃审单据-CancelAudit方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时必须传入)TimeStamp

—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg

—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck

—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bList —— 传入false

 装载单据-Load方法

参数:

sVoucherType —— 单据类型:01 sWhere —— 条件串

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象 domPos

—— 货位DOM对象 errMsg

—— 错误信息

bGetBlank

—— 是否获取空白单据 sBodyWhere_Order —— 表体排序方式字段

注意:其中sWhere设计为: 如果按单据号加载,则语法为ccode=N'要加载的单据号',例如broker.AssignNormalValue(”sWhere“, ”ccode = N'0000000001'“);

如果按单据ID加载,则语法为id=XXX,例如broker.AssignNormalValue(”sWhere“, ”id = 1“)。

 删除单据-Delete方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时需要传入连接对象)TimeStamp

—— 单据时间戳

domMsg —— 返回DOM格式的信息:主要是检查可用量和控制可

用量信息

bCheck

—— 是否进行业务检查 BeforCheckStock —— 是否检查可用量 bList

—— 传入false

 添加新单据-Add方法

参数:

sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody

—— 表体DOM对象

domPosition —— 货位DOM对象:传空 errMsg

—— 返回错误信息

cnnFrom —— 连接对象,如果由调用方控制事务,则需要设置

此连接对象,否则传空

VoucherId

—— 返回单据ID domMsg —— 返回DOM格式的信息:主要返回可用量和现存量的错误信息

bCheck

—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量(检查可用量)bIsRedVouch —— 是否红字单据 sAddedState —— 传空字符串 bReMote

—— 是否远程

 修改单据-Update方法

参数:

sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody

—— 表体DOM对象 domPosition —— 货位DOM对象 errMsg

—— 错误信息 cnnFrom —— 连接对象

domMsg

—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck

—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bIsRedVouch —— 是否红字单据 sAddedState —— 修改状态 bUpdateNeedEas —— 传true  开发步骤

调用库存单据某一API,主要有以下六个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Integererop.U8Login.dll,代码示例如下:

Dim ologin As Object

Set ologin = CreateObject(”U8Login.clsLogin“)'声明u8login对象 '登陆

If Not ologin.login(”AS“, ”(default)@001“, ”2008“, ”demo“, ”“, ”2008-7-7“, ”localhost“)Then MsgBox ologin.ShareString

注意:如果当前环境中有login对象则可以省去第一步。

2. 构造环境上下文对象,传入login Dim u8EnvCtx As New U8EnvContext

'构造环境上下文对象 Set u8EnvCtx.U8Login = ologin '传入login 3. 构造ApiBroker对象,调用Connect,传入API的地址标识(Url)和环境上下文

Dim u8apiBroker As New U8ApiComBroker u8apiBroker.Connect ”U8API/PuStoreIn/Add “, u8EnvCtx

4. API对象参数赋值

1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下:

Dim domHead As New MSXML2.DOMDocument domHead.load ”domHead.xml“

u8apiBroker.AssignNormalValue ”DomHead“, domHead

方法二是构造BusinessObject对象,具体方法如下:

'首先通过GetBoParam方法获取表头或表体参数

Dim DomHead As BusinessObject

Set DomHead = u8apiBroker.GetBoParam(”DomHead“)DomHead.RowCount = 1 '设置行数

'给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 '以下代码示例只设置第一行值。各字段定义详见API服务接口定义

注意:表体的行数只能为一行,可以对表体设置多行。当设置行数为某个值时,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

'****************************** 以下是必输字段 *****************************’ DomHead(0).SetValue ”id“,”字段值“ '主关键字段,Integer类型 DomHead(0).SetValue ”bomfirst“,”字段值“ '委外期初标志,String类型

DomHead(0).SetValue ”ccode“,”字段值“ '入库单号,String类型 „„

/***************************** 以下是非必输字段 ****************************/ DomHead(0).SetValue ”cmodifyperson“,”字段值“ '修改人,String类型 DomHead(0).SetValue ”dmodifydate“,”字段值“ '修改日期,Date类型 DomHead(0).SetValue ”dnmaketime“,”字段值“ '制单时间,Date类型

„„

2)给普通参数赋值 例如,'给普通参数VoucherState(参数名)赋值。此参数的数据类型为Integer,此参数按值传递,具体请参考服务接口定义

u8apiBroker.AssignNormalValue ”VoucherState“, ”参数值“ '参数类型:Integer 注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Double、Boolean、Date等,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

'该参数curID为OUT型参数,由于其数据类型为String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取

'该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数

Dim CurDom As New MSXML2.IXMLDOMDocument2 u8apiBroker.AssignNormalValue ”CurDom“, CurDom '参数类型:MSXML2.IXMLDOMDocument2

„„

当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

5. 调用API If u8apiBroker.InvokeApi()= False Then

'错误处理

MsgBox u8apiBroker.GetLastError()If u8apiBroker.ErrorType = ExceptionType_Business Then '处理API业务错误 '处理系统错误 ElseIf u8apiBroker.ErrorType = ExceptionType_System Then End If

注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

6. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数 Dim DomHeadRet As BusinessObject Set DomHeadRet = u8apiBroker.GetBoParam(”DomHead“)MsgBox DomHeadRet.RowCount '获取返回BO对象的行数 注意:

如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)Dim DomHeadRet As New MSXML2.DOMDocument Set DomHeadRet = u8apiBroker.GetResult(”DomHead“)以上获取的行数是BO对象的实际行数。

'获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

'***************************** 以下是必输字段 ****************************’ Dim idRet As Integer idRet = CInt(DomHeadRet(0).GetValue(”id“))'主关键字段,Integer类型 Dim bomfirstRet As String bomfirstRet = CStr(DomHeadRet(0).GetValue(”bomfirst“))'委外期初标志,String类型 Dim ccodeRet As String ccodeRet = CStr(DomHeadRet(0).GetValue(”ccode“))'入库单号,String类型 „„

/***************************** 以下是非必输字段 ****************************/ Dim cmodifypersonRet As String cmodifypersonRet = CStr(DomHeadRet(0).GetValue(”cmodifyperson“))'修改人,String类型 Dim dmodifydateRet As Date dmodifydateRet = CDate(DomHeadRet(0).GetValue(”dmodifydate“))'修改日期,Date类型 Dim dnmaketimeRet As Date dnmaketimeRet = CDate(DomHeadRet(0).GetValue(”dnmaketime“))'制单时间,Date类型 „„

2)获取普通返回值

代码如下:

'获取普通返回值。此返回值数据类型为String,此参数按值传递,具体请参考服务接口定义 Dim result As String

4)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,'获取普通OUT参数curID。此返回值数据类型为String,在使用该参数之前,请判断是否为空

'获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„ Dim curIDRet As String

curIDRet = CStr(u8apiBroker.GetResult(”curID"))result = CStr(u8apiBroker.GetReturnValue())

第二篇:明珠漆小区开发手册

“明珠漆”小区开发手册

前言

一、制定该手册目的

统一管理、销售模式,统一运作,统一形象,树品牌,乘快车,进入江西品牌前三位。

二、使用指导:1、2、3、保密。部门负责人保存原件,不得擅自复印,复印件要编号。使用。本手册是一本实用市场运作手册;

培训。对部门机关人员进行培训,确保完全了解我们经营思路和实际运作方法;

4、5、修改。在使用过程中欢迎提出宝贵意见,为明珠漆事业发展献计献策;保管。本文件管理应由部门主管负责并在公司备档。

第一章 经营理念

一、品牌定位:世纪明珠装修漆,提升(家庭)装修高品位。

家庭装修包括土建、水电安装、木工细作、油漆涂装几个阶段。前三个阶段要消耗大量的人工、时间和材料,但不管设计如何前卫新颖,材料如何高档实在,制作如何精心细致,也只是为装修完成了一个粗坯、毛坯,只有经过油漆涂装这个精加工、再加工的过程,才能形成并得到理想中的装修效果,将刻板、冷漠、僵硬的建筑这一纯粹的物,变成雅致温馨、充满人性亲情、自我享受的生活空间和精神空间,满足我们对家的渴望与追求。因此可以说,木工土建只是为装修提供了一个基础,油漆涂装才是整个装修的灵魂和关键,是真正上的装扮修饰。

明珠漆就是将各种普通、平板、单调的装修装潢材料赋予生机,赋予灵性、赋予光彩、赋予质感,赋予和谐统一的形式和意义,为装修丰富层次,创造格调,创造个性。由于对装修这个面子工程进行了精细的装饰和美化,形成了柔润的手感,雅致的光泽,亮丽的色彩,细腻温暖的质地,高贵华美的格调。作为整个装修最后也是最重要的一环,明珠漆可以一定程度上弥补装修的缺陷,决定整个装修的品位和档次。可以说,不管什么材料,什么结构,什么造型,整个装修产的效果最终都要通过明珠漆表现出来,并由明珠漆得到明显的提高品位的升华。

二、经营思路

实现以品牌为先导,统一经营,连锁专卖的市场策略。

1、以“品牌为先导”集中体现:最专业服务,最高质量价格比,最合理成本(最少用量);

2、“统一经营”是指: A:统一的管理、服务机构

B:统一的销售、服务规范 C:统一广告宣传形象

3、“连锁专卖”是指:A:全国统一连锁专卖店。

第二章 专业化部门分工

一、小区业务员基本素质要求:

1、具有中等以上学历,仪表端庄,可选择懂装修最好有一定社会经验或销售经历的下岗、本地、中青年男、女尤佳;

2、沟通能力较强,思维敏捷

3、应具备心态;A:热爱明珠漆事业,有主人翁责任感。

B:有团队精神,懂得我们明珠带来是集体智慧结晶,不单打独斗,逞强好胜。

C:信心:只有自己对明珠事业、产品有信心,才能在潜意识里去感染消费者,取得消费者的信任。

D:耐心:要耐心的倾听和回答顾客提出每一个问题(满足客户受尊重心理),无条件包涵客户。

E:恒心:做事要有持之以恒的精神,精诚所至,金石为开。

F:热情:热情是打开客户心灵的钥匙,用我们满腔热情去感染消费者。

4、企业品牌形象:小区业务员是我们明珠漆的先锋者,代表公司品牌形象, 言谈、举止以处处维护明珠漆品牌形象为原则;

5、专业素质:小区业务员要具备以下专业知识:涂装基础知识,明珠漆产 品特点,明珠漆标准工艺流程及施工注意事项,成本核算,行业状况,公司 实力等;

二、人员基本设置:

1、实行部长负责制;

2、小区业务员人数按城市规模算;

人口50万左右——小区人员(5-10名)人口100万左右——小区人员(10-20名)

3、人力保证;

A:在管理能够跟踪上的前提下,人员越多越好,多一个就多一份力量,投入人工费用不亏本。B:但人员一定要先培训,考核合格后上岗(不合格人等于自找麻烦)

4、部长人选标准:

A:具备一定管理能力和沟通能力,最好懂业务(销售)。B:能贯彻、落实公司销售策略的。C:有工作热情,全心全意投入的。D:最好有一定社会关系,熟悉当地情况的。

6、部长职责;

A:直接对明珠经理负责,定期汇报工作。

B:制定部门工作制度和考核标准,保证部门行业有效的工作。C:制定每月工作目标,工作计划,划分工作区域。指导区域组长工作。D:检查业务日记、报表、工作总结,定期对组长、业务员考核。E:每月定期召开工作总结会,讲评工作,奖优罚懒。

F:充分调动员工的工作积极性,适当分配权力,进行长期多样化沟通,形成良好的工作氛围。

G:传授经营理念,解放思想,指导工作。H:了解员工思想状态。

L:与相关部门联系,做好一切相关后勤保障及部门间协调工作。

6、业务员职责;

A:身为明珠漆先行官身份,处处维护明珠品牌形象,一荣俱荣,一损俱损。

B:服从工作安排、分配。

C:调查装修市场,收集信息(归类、存档市场上其它品牌销售情况)。D:认真做好咨询宣传,通过免费咨询装修常识,大力推广明珠漆,同时掌握木工、油工情况,并保持经常性联系。E:有计划对小区进行地毯式开发。F:保管好宣传器材及内部资料。

三、薪酬评定模式;

1、部长:基本工资(维持生活当地最低标准)+岗位津贴+业绩奖金(部门销售提成)注:不含在业务员提成内

2、业务员:A:提成制:新业务员销售额在2000元以上才有底薪,老业务员销售额在5000元以上才有底薪,老业务员在淡季度享受底薪。

1、基本工资+提成(1-5%)

2、提成8-10% B、承包制

1、基本工资+提成(在承包区域内所有销售额算该区承包业务员)注:基本工资→维持当地生活最低标准(如刚刚起步的办事处,基本工资及提成可适当提高)

2、奖金可依据业务员考核表

四、小区开发部工作制度。1、2、3、4、5、6、严格遵守各项规章制度,尊重上级,服从管理; 团结协作,互帮互学,形成良好工作氛围; 严格考勤制度,有事要请假,听从安排; 工作中坚持“按时、守时、准时、”的原则; 礼貌待人,仪表端庄,处处维护明珠漆形象;

每月定期召开总结会,讨论交流,交业务日记,业务代表发言,主管讲评工作评选优秀业务员,布置下月工作;7、8、9、小区业务工作必须深入、细致、持久,忌蜻蜓点水; 休息可安排在每周周一至周五; 妥善保管内部资料;

10、建立完善信息管理制度;

A:调查:填写《小区调杳表》《业务资料表》 B:咨询:填写《业务日记》《小样登记表》 C:填写:《竞争品牌登记表》

五、小区开发部考核标准。1、2、3、4、5、6、7、8、9、遵守各项规章制度,服从管理,听从安排。对公司忠诚,保守公司机密。团结同事,积极进取,不搞恶性竞争。仪表端庄、整洁,精神饱满、不损坏品牌形象。努力学习,提高业务能力。完成工作以及公司交给其它任务。

开会发言积极,业务日记完整真实,报表按时、工整、准确。收集、归类业务信息。提出建设性意见,合理化建议。

10、顾客满意度。

第三章 培训资料

详见《世纪明珠答疑手册》(2003年版)。以下是补充内容。

卖点就是与其它同类产品的不同点,即特点,不公包括产品的优势还包括产品的独特点。卖点运用的好,产品的劣势也可转化为卖点、导购的任务就是针对顾客不同的需求,屡活地运用卖点,从而打动消费者的心,让顾客高兴地购买我们的明珠,明珠漆有以下卖点:

1、品质:明珠漆是国内同行业首家通过ISO9001质量体系认证,或是“执行ISO900质量体系认证的标准”;此外,明珠漆还获得以下荣誉:“中国质量万里行五年回顾展荣誉企业”“全国乡镇化工先进企业”等,其原料由全球著名的德国拜耳·巴斯夫、美国杜邦·因特异等公司提供,配方设计采用无毒、耐黄变、挥发少的原料,主导产品市场占有率连续四年后全国第一。

2、样板展示效果:根据不同的底材,不同的纹路展现出不同的效果。您是否会问:自己家里能做出这样的效果,施工工艺简单一般的油漆工就能胜任。只要您采取我们建议的工艺,我们的油漆能使您家的装修达到样板的效果。

3、专卖:为了让您更方便地买到品质如一的明珠漆,更为了满足您对油漆的各种需求,令您看到油漆最终效果,世纪明珠漆在全国建立了近千家明珠专卖店,实行正规化、统一化、专业化的售前、售中、售后服务,在专卖店里,通过样板展示使您清楚地知道最终的油漆效果。在专卖店里各类油漆明码实价,让客户明明白白消费,体现了明珠品牌良好形象,买油漆就是要买一个放心,请您在明珠漆专卖店购买。

4、耐黄变:油漆中的一些化学成份与空气中氧发生氧化会使漆膜变黄,使新做的家俱显得陈旧难看,市场上的油漆一般都不具耐黄变功能,而明珠漆采用进口原料,耐氧化、而黄变性能好,使装饰效果更持久。耐黄变的丝润系列油漆涂料适合老百姓最常用的红榉板材板材涂饰;超级耐黄变经典系列适应浅颜色的高档装修如枫木白樟等。

5、明码标价:在我们任何一个专卖店里,产品都是明码实价,包装罐上标是产净重,足斤足两,并经物价局核实,价格统一,让消费明明白白消费,您可以放心购买,不会上当受骗,市场上很多品牌的油漆都可计价还价,由于装修用户一般都不了解油漆的行情,往往被高价,经过一番砍价以某一价位成交,表面上让利很多,你获和了心理上的满足,但您并不清楚您是否把他虚报的部分砍底了,另外这样的油漆无售后服务,不负责油漆涂刷效果,不退货。所以还是货真价实,有服务承诺的明珠漆更能让您放心。

6、环保、安全:油漆涂料是否安全,关键取决于是否会会有苯,甲醛等对人体有害的挥发性物质。目前,市上一些油漆生产厂家,为了降低成本,不按国家要求使用低毒的二甲苯,而大量使用有毒低价的苯和甲苯,这些物质有致癌、致畸、致敏等副作用,严重危害了消费者的身体健康。明珠漆站在用户的角度,采用低毒挥发性少的二甲苯为原料,挥发量远远低于同类的其它品牌的产品,只有国家标准的十分之一。并且明珠漆的油工师傅都说,明珠漆气味比其他油漆要小得多,没有恶心,呕吐的感觉。

7、针对家庭修用的装修明珠足专用于家庭修用的装修漆,品种齐全,种类繁多,手刷性好,配套齐全。有适合各种家具木质吊顶门窗涂饰的木质漆;有专用涂刷实木地板的地板漆,坚硬耐磨;还有色彩缤纷的内墙乳胶漆。

8、成本合理:也许您会觉得明珠漆确实不错,只是价格高了一点。其实价格并不高,因为油漆的价格不是通过每罐或每组来体现的,它的最终成本体现在每平方米的涂装成本和最终的装饰效果上。明珠漆由于因含量高,极少挥发,因此每组的涂刷面积大,涂刷次数少,在明珠专卖店里,我们可以为您计算油漆成本,您可以与其他油漆比一比,就会觉得明珠漆的成本很合理。

9、知名品牌:明珠漆在全国已有近千家专卖店,以“一切工作以消费为中心”为目标,已有了很高的知名度,深受广大消费者的青眯。

10、固含量高:明珠漆以公斤计量、量足,其它品牌的油漆是以升计量,您应该清楚油漆的比重比水小,因此1公斤漆要比1公升漆要多。有些品牌的油漆包装罐大,里面却只有半罐漆。另外,油漆刷涂后要挥发一部分,明珠漆挥发少,成膜率高(即固含量高)涂刷面积大,因此油漆的成本相对降低。

11、施工性能好:油漆施工性能好坏是关系到油工利益的问题,一些油漆施工速度慢,固化时间长,不仅耽误了油工时间,也推迟了入住时间。明珠漆流平性好,手刷性强,容易达到效果。采取底漆表干连涂工艺,缩短了工期,为油工用户节省了宝贵时间。

12、专业培训:明珠漆为了使您选择到的油漆,装饰出好的效果,对公司每位员工都进行专业培训。专卖店的导购员,售后服务的技术人员以及小区宣传人员都经过专业培训,随时为您进行专业产品介绍,提供适合您家装修特点的油漆工艺设计,产品品种最优化配置,成本核算的最低组合,在您购买油漆之后,有技术人员负责进行指导,与油工师傅一起相互交流,相互沟通达到油漆的理起效果。

13、礼仪;

A:十字礼貌用语:您好、请、谢谢、对不起、再见。恰当的经常的运用十字礼貌用语会使你成功的推销自己,受到别人的尊重,免却不必要的麻烦,取得意想不到的效果。

B:微笑:她如徐徐的春风吹开了无数人紧闭的心窗,真诚的微笑如同原子弹威力无穷,所向披靡,只要运用得当,坚持恒久,你将无所不能。C:递名片:递名片时应双手持卡,字方向对正对方,同时应轻声打招呼,道出自己的名字,认真记下,放入口袋。

D:记名字:千万要记住客户的名字,忘记别人的名字是尴尬的事,也是不礼貌的。在打交道时你能说出对方的名字,表明对方在你心目中的重要性,对方会油然有一种愉悦感,你们会说也就有了一个良好的开端。不过真的忘记了对方的名字也要真诚道歉,对方也不会计较。E:握手表示友好、尊重;一般来讲对于握手的双方按性别讲应女士先伸手,一旦男士已先伸出手来,女士出应大方的与对方握手。握手告诉我们的远远超过了它本身,握手可以是双方力量的较量,双方的人品、性格、自信、意力尽在一握之中了。

握手一般有三种:

1、一触即松的握手;

2、坚强有力的握手;

3、强压式的握手;第一种握手一般多出现在女士与男士的握手中,记住:这是不礼貌的。第二种握手则是充满自信且坚强有力的,它告诉你对方的自信程度。第三种握手则是粗暴的,无礼的。

F:敏捷:对周围、身边的一切都能洞察并采取相应措施,这是最高层次的礼节。

三、业务分析

(一)小区开发是明珠漆主战场

1、在明珠漆发展初期,知名度低,如果靠单一专卖店销售就显得势单力薄,购买客户有限,不能在短期内打开市场,贻误战机。

2、实际目标消费群在住宅小区,那里到处都有买油漆的用户,小区开发目标性强。

3、木工、油工这些对装修用漆有影响人物都在小区活动,我们可以深入小区与之联络寻求合作。

4、小区开发的几项主要工作:

A:调查:对本地各小区的基本情况进行调查,如位置、多少住户、住房消费能力、隶属关系(商品房、单位分房、动迁等)何时交钥匙或处于装修阶段、哪些品牌进入等。

B:综合宣传:现场施工横幅楼层标示广告现场技术咨询样板资料展示,咨询台广告伞折叠椅、承诺牌,最有效的宣传是利用周末组织全体员工统一着装,装备齐全,浩浩荡荡开进某一小区,进行售后服务宣传活动,形成规模效应,扩大影响。

C:最大的工作目的:成交。最主要的工作,就是挨家挨户地开发客户,以主家为主,木工、油工为辅。

D:突破点:把小区的第一家购买明珠漆的用户,设立成样板房。如果这家同意把他家作为样板房,让我们适当带人来参观,我们可向他承诺:

一、既名是样板房,一定要做到最好;可送他家一些油漆(如一两罐乳胶漆)注意:可送但不可打折

E:取样制作:在现场找一小块板材或抽屉面板让主家在北面签字,拿回去制作,贴上标准工艺流程表,最好现场做给主家看效果。如果主家答应,就成功了一半。另外通过做小样也找到了与主家交流的有效途径。F:经常拜访已用过明珠漆的用户和油工,问他们有什么需要帮助的?与主家及油工建立良好的关系,并树立良好的服务形象。同时达到网络油工、木工目的。施工结束后或主家入住后要进行回访。G:注意:要和小区管理人员搞好关系

5、方式方法(心态)

咨询、宣传以专家身份提供建议,指导性意见,辅导油漆装修常识。把好的产品、服务介绍给主家,把油工后半辈子生活解决了,建立长A、B、期合作,主家、油工会成为你的朋友。

(二)注意重点1、2、3、4、小区开发要集中地区,以点带面,忌蜻蜓点水。

小区业务可分区包片,对个别小区内部指标,定量承包,一包到底。对小区人员执行有效地激励机制,多劳多得。奖金分配参照《业务员考核表》、《业务日记》

四、标准流程

(一)调查工作

A:对本地区,当地的小区情况进行调查(消费水平,消费心理、发展状况、本地主要品牌及市场占率、市场优势,与我方比较我方优势劣势等)

B:由部门经理或专职调研人员进行实质性踩点,从中筛选出适合明珠漆的代表性小区(如较富裕的大单位的集资房或高档的花园小区)填写小区调查表,进行重点切入,重点是以“单位集资房”为主,可以迅速产生口碑效应,规模效应。

(二)准备工作

A:与小区管理部门洽谈好入驻小区宣传的有关工作,尤其确定个常备房间放置宣传器材。

(三)大规模宣传工作

在宣传前期,首先由公司出动全体人员着统一装进驻小区,进行大规模大声势的宣传咨询活动,以专家身份进行指导,使用户了解油漆常识,进而了解明珠漆。扩大明珠漆在该小区的影响力,为后期地毯式开发打下基础,时间一般在周末。

(四)挨家挨户地毯式开发程序:

1、听音 先听哪里有木工操作的声音就先奔哪里去,做到有的放矢。

2、进门

一般开工的时候门会关上,这时候大胆敲门,然后理直气壮的说看一下,一般木工、油工都会打开门,如对方盘问也暂不要暴露身份,可说来看看房子,看看装修,意思是你也是这里住户。

3、辨别

在敲门和踏进房门时要迅速辨别主家木工、油工,有的主家有时作油工打扮,要仔细观察,忌以貌取人。要看清楚室内装修情况,为下步的谈话打下基础。

4、谈话

A:木工在家:如业务员对装修比较在行,可与木工头(木工官油漆)说一些行话,适度夸赞一下木工的手艺或提一些好的建议,为以后谈话打好基础,由装修自然的过渡到油漆时可适度亮出技术员身份,把我们油漆质量、环保、施工性能好等几个卖点讲给他,并注意停顿看其反应,注意聆听对方的讲话,记录对方联系电话,邀约对方到专卖店,留下自己和专卖店的电话。

B:木工主家在场:先以看装修的身份夸赞一下木工手艺和居室的布局“如房子好大啊!你们布局设计的真好,有点古典或怎么样!”“木工师傅手艺活真好”等(建立初步信任)先讲装修常识,再说油漆涂装,什么板材用什么漆,而后自然过渡到油漆时可自然亮出明珠漆技术员身份,以环保、质量、服务为主向主家介绍,不要指望主家马上会用明珠漆,暂留下联系地址和专卖店电话,也可邀约其到专卖店坐一下,后进行第二次拜访。

C:价格:当客户问及价格问题时,可先从板材品种,档次入手,就油漆在整个装修中的地位,油漆质量决定最终效果,把我们明珠漆环保,用量少加上跟踪服务等,然后说出来后不提出明珠,为用户提供一种判断评价好油漆价的标准,树立专家形象。

D:其它:当客户问及其它情况,可简单扼要介绍不可罗嗦也不要夸张。E:样板房:附近有样板可带他去一下,效果更直观。

F:小样:可就地取材让主家签名做一个小样,一方面可以展示我们明珠漆样板效果,另一方面可由此为我们与主家之间搭了一座桥。

5、告辞

主家无意购买也没关系,也不要勉强,但一定留下为下一次拜访的理由,如做小样或者说过两天我再来看一下等。

6、最终成交:一次不成两次,两次不成三次,精诚所至,金石为开,每次来时尽可能帮师傅或主家做一些力所能及的事,以博得对方好感。

7、注意事项:以人员销售为主,以推销自我为主。

A:以一户为主:小区是明珠漆的主战场,我们当然要进行密集性地毯式开发,但不是每个单元、每幢楼、甚至每个小区的每一家每一户都蜻蜓点水地跑一下。每个业务员的开发工作始终以一户为主展示开,做成一家后再去一家。如果每家都浅尝辄止,蜻蜓点水一样,最后连一家都不能成交。

B:深入交流:只有与客户进行多次地、深入地交流,才能建立信任,树立油漆专家形象;才有机会影响客户认可明珠漆,最终达到成交的目的,也只有深入进去,才能迅速总结出一套与客户沟通和成功推销的经验。

C:小区业务远不止递张名片、介绍一下这么简单。这样并不能达到宣传的目的,也不能树立好的形象,更不能沟通,达到成交的目的。搞不好反应而惹人烦,引起反感,反而损害了明珠漆的形象。

D:规模效应:一个小区做到十户或二十户以上,就形成了规模效应,后面的客户便接踵而至。因此要集中人力一个小区一个小区做,不可把人力分散,象撒胡椒面一样。

E:小窍门:如上单位小区,有一个小窍门:找单位司机或办公室主任这些单位里的公关性人物,活跃分子。先给他家装修,多送一些漆,并搞好关系,让他帮我们宣传。必要时答应他,每介绍一户给他奖励多少(不能太多)或送个什么礼物,或少收他的一点油漆钱,把他当我们的业务员。这一招很灵。

F:内部招标,承包开发:小区业务员要分成小组,对于好的小区要在内部公开向各小组招标,要定量承包开发。如承包者无力开发,则换一个小组去开发,在内部建立起竞争机制。

六、协调事项:

1、与专卖店保持经常性联系,了解客户购买情况,确认个人业绩,进一步跟踪潜在客户。

2、与片区技术员保持良好沟通,以更好地开拓新客户做九小样,跟踪样板房,搞好服务。

3、4、大型咨询、宣传时,应找专卖店和技术部配合。

与部门协调交通工具、通讯工具、交通费、福利等其它活动。

七、小区开发部资料

《小区报表》《小区调查表》《业务资料表》《业务日记》《小样登记表》《竞争品牌登记表》《业务考核表》《产品说明书》 小区开发的一般工作程序

一、工作范围及环境1、2、楼盘小区环境 社会应酬环境

二、工作对象1、2、3、房东----怕上当、贪小便宜、希望有好效果。油工----利名、工艺简单、环保、尊重。

木工----了解房东、油工的窗口相应社会在地位较低,希望得到尊重与关心,并要求利益上的受益。

4、竞争对手----扰乱军心(待遇、培训、产品品牌、文化活动)

三、小区开发的程序

1、调整心态:明珠漆的效果、服务是一流的,我把好的产品介绍给您,以免在您不懂的情况产生错误的购买使用;是来诚心帮助你的;而不是乞求,要有长期的作战心理,要正确髯对每一次失败。

2、市场调查:小区的基本状况,商品房或集资房、楼房、户数、现有开发价值及后期开发价值、市场潜力等。(见附表)

3、市场调查表的整理、分析

A.确定目标 本有销售额,依据本月木工完工户数,以市场占有率为据;

重点客户;

工作方式——地毯式,分段式;

B.制定计划——依据木工开工情况,制定拜访计划; 分层次 1周内完工 1天/次 15天内完工2天/次 15天发后完工4——5天/次

注:与房东在场的时间吻合,先主后次,轻重缓急。

4、上门拜访

(1)上门(在对方发问前礼貌的问好,第一印象很重要);(2)分析形势及自己所处的环境(千万不要打断正在做事的客户,必要时可以帮上一把);

(3)必要时学会耐心的等待(如果你的到来,并未引起主家的反感);(4)适当的时候表明身份(机会是靠自己发现的);

(5)展示样板资料(千万不要一次性展示,主家感兴趣后,在解说的过程中逐一展示给主家一个察看的时间);

(6)解说(样板资料的解说,油漆的评价,对价格、成本的认识,漆的施工工艺,服务的内容及对主家的承诺),在解说的过程中,要注意全家的爱好,抓住主家感兴趣的话题进行交流;(7)成本核算,领取小样;

(8)互留联系电话(礼貌的递上宣传单页和名片,并趁机留下主家的联系电话);

(9)总结分析,确定下次拜访方式;(10)成交5、6、7、送货、并要求房东验货、收货 回访

归纳总结经验(填写《业务报表》及《业务周(月)报表》目的是用来展示工作过程,并认真积累工作经验和了解市场占有率及各品牌之间的竞争形势)。

四、开发的技巧

1、敲门技巧----忌急、重、乱而无序,忌轻而不闻;

2、初进门的介绍技巧;

3、身份表明的机会掌握技巧;

4、资料夹的展示技巧

(1)质量承诺书----法律的自我约束,对消费者利益的保证;(2)施工计划书----科学的工艺,厂家技术人员及科研人员及反复认识论证过的;

(3)施工监理授权书----规范化,要求您的配合,比如:油工的工资在与我们的协商下发放;

(4)统一价格表,统一预算方法(透明化,您自己也可以核算);(5)各类检测报告;

5、解说中的技巧

如何处理房东的疑难点——见导购必答; 寻找出主粗的关注点的技巧——聆听、询问; 如何寻找与主家的切入点; 如何为下次拜访奠定基础

A、B、C、D、看您家整体的装修效果 下次来帮您做预算 经常来帮您看着木工做事 快完工我给您家做个小样板

6、做预算的技巧

(2)忌初次上门估算总成本,简单报个数字给房东;

(3)当场做计算,并仔细的检查其装修情况(如用的深木眼,还是浅工眼,工工钉眼情况等);

(4)逐一向房东解说预算(展示统一预算表),重申耐黄变、无苯、差异化的

解说;

(5)

7、取样的技巧

(6)为什么取样——设置排他性,房东对效果并不了解;(7)如何把握取样的时机——房东对效果置疑时;(8)取样过程中应注意的问题 A、尽量取小橱门或抽屉或门套; 预算字迹清晰、明了;

B、注意样板的表面检查(破损应告知房东或换样)C、注意爱护样板(细心的动作都会让房东产生好感)

(9)样板制作完后,向房东解说样板如何,评价效果;

8、9、建立用户档案表,适时利用(见附表)如何解释价格

(1)专卖店,全国统一售价,如恶意抬高价、还价只是很少的一部分,对质您而言得不偿失,我们的价格通过物价部门核定的;明码标价,一分都不能少,不信您可发问问以前的客户;

(2)厂价直销,免去了中间商及油工回扣,(3)同等效果比价格;(耐黄变性能、环保性能、工艺及售后服务)

10、(1)、演双簧,前者态度强硬,后者适度的退让;(2)、解释押款的利与弊;(其它品牌押款是为了促销,让您尽快购买,而作为消费者的您钱早付,晚会都是得付,最多只是少付个

一、两佰元而已,而对于我们而言,我们做的是品牌,靠的是信誉度和口碑,岂是您这儿块钱可以买到的,我们厂销售十几个亿,不管您押不押款我们都会全力以赴的做好);

(3)、公司有规定,财务网上管理,每天要到银行汇货款到总公司;

(4)、不然我们全部要扣除奖金;

(5)、激将法(我们不押款,要押款您就买别的好了,他们可发全押并押半年);

11、利用专卖店及全省互动效应;

12、如何进行回访

(1)电话回访,上门回访询问油漆涂装情况,以牢固与房东的关系,强化明珠的效果,服务等,促使其口碑宣传;(2)缓和技术员与油工有时的磨擦、冲突;

13、意向性较强的房东如何把握

(1)

房东是那种易沟通的人——死缠烂打;(2)房东是那种嫌烦的人——若即若离

14、如何推包工包料

如何避免应收款(1)、建立油工档案表(见附表)

(2)、说服房东给油工一个合理的工价,承认其劳动本身的价值,拒绝回扣(师傅拿多少钱到多少事);

15、如何处理价格问题(价格是永恒的话题,是优势还是劣势)

(1)、敏感心理,倾向心理

A. 走中庸之道的人,务实派——建立厂家直设专卖,厂价直销的概念(免去中间商、油工回扣)最合理的成本,最好的效果; B. 虚荣追求品牌的人,务名派——建立高档家装漆的概念,全国最大、最好的涂料厂生产;

(2)、习惯心理——消除差价,高差异化的优势;

A. 工艺优势——底得宝、佳必士、砂纸 B. 产品优势——耐黄变、无苯、环保 C. 预算优势

D. 价格优势——统一明码标价,厂价直销(3)、感受性——购买的体验(售后服务)

(4)、降价后有要求,促进市场快捷圆满的成交,不要因为客户要求降价而降价,这样并不会增加客户对你的好感,降价的同时可以提出立刻签约或预付货款等有利成交的要求职,这种情况还可被客户认同接受;(5)、赠送,对品牌的伤害最小

16、如何处理油工,木工关系

(1)打死一部分(死盯眼前利益),团结一部分;(2)建立死党关系

五、市场开发的注意事项

1、小区工作要以成交为主,宣传为辅;

2、小区工作要集中开发,一个小区、一个小区,一楼、一单元、一层、一 家、的开发,要造势,形成规模效应,杜绝蜻蜓点水;

3、从主家认识并了解至认可明珠漆需要一定的过程的,要坚持不懈,失败往往离成功,只有一步之遥,请再坚持一下;

4、你的形象很重要,你就代表着明珠漆的形象,业务具有一定的偶然性,但也是汗水必然性积累的结果,任何时候不能有损明珠漆形象的言行;

5、做业务一定程度上处理人际关系,主要是首先相信人,再相信产品;

6、主家不懂油漆是很正常的,任何时候不能存任何抱怨,要耐心的反复讲解主家所提出的任何问题;

7、8、售前小样板的制作很重要具有排他性;

要以顾客的眼光为出发点,尊重他的审美观、价值观,要真心倾听顾客的意见,从顾客处获得信息;

9、注意询问,了解竞争对手的情况,明确真正的竞争对手,掌握竞争对手的策略,针对性的进行交换;

第三篇:U8API开发手册(C#版)

U8API开发手册

作者:商平锋

版权所有:用友软件股份有限公司 1.简介

U8API是为U8客户化应用开发提供的一套标准化的U8ERP业务编程接口。是U8UAP二次开发体系的重要组成部分。它包括一整套涵盖U8ERP采购、销售、库存、制造(规划中)、财务(规划中)、基本档案(规划中)等业务模块的API接口资源。U8API的推出为U8标准产品更好的适应用户的个性化需求,更好的实现客户化交付提供了有力支持。

U8API按照U8ERP业务产品模块进行分类,并以U8主要业务实体(单据、档案、凭证)作为操作对象,提供了常用的基本操作。比如:对于库存的收发单据,提供“新增”、“审核”、“弃审”、“删除”、“装载”、“修改”六个API接口。目前,U8API提供了供应链采购、销售、库存三个产品的所有单据的增删改、审核/弃审等API接口,后续版本会逐步将制造、财务、基本档案等模块的API纳入进来。

U8API通过“U8API资源管理器”对U8范围内所有API进行集中统一分类管理,形成了一套完整的U8API资源库。U8API的使用者可以使用“U8API资源管理器”浏览、查看API及其接口定义,并可辅助进行代码生成(目前支持C#和VB语言);API的开发者可以通过此工具发布、注册API,所有业务API都必须在“U8API资源管理器”中进行注册。

U8API还提供了一套运行时调用框架——U8APIBroker。它是所有U8API的调用代理,用户要使用某个API只需调用U8APIBroker即可,无需直接访问真正的API。U8APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。

U8API与U8EAI接口从功能上看比较相识,但它们的特性有差别。U8API采用传统的编程模型,更靠近底层,业务逻辑粒度更细,而且还需要或依赖一些特定的上下文环境,比如:login、事务等;而U8EAI接口则是完全松耦合的,采用XML和请求/响应的消息传递模式,且业务粒度比较粗放。这些特性的差别决定了它们的应用领域不同,U8API更适合于U8内部的功能扩展和客户个性化开发,而U8EAI则适合外部系统与U8之间以业务数据交换为特征的应用集成开发。

2.API应用

2.1.API总体应用过程

2.1.1 API浏览查找

在“开始”->“程序”->“用友ERP-U8”->“UAP”目录下找到“U8API资源管理器”,单击,登录,进入“U8API资源管理器”。在左侧 “U8API” 树形节点下,找到某某模块,如“库存管理”模块(可以看到下面列有很多个单据,如盘点单、采购入库单等),展开要操作的单据,分两个子节点:“事件”和“服务接口”,在“服务接口”下可以看到该单据提供的API接口,如“添加新单据”、“审核单据”等。双击这些节点出现该API的详细描述,如下图2.1所示。在节点上右键单击弹出“上下文菜单”,在“代码示例”菜单项上弹出下一级子菜单,单击它们,如单击“C#代码示例”则可以看到调用该API的C#示例代码,如下图2.2所示。直接拷贝这些代码,然后在集成开发环境(IDE)中编辑和编译这些代码,即能实现调用U8标准API。利用这些代码示例时,请按照其中每一步骤的提示说明正确操作,如添加必要的引用、按照自动生成的代码填入正确的参数等。正确使用则可以调用成功,否则会返回详细的错误信息。

以下代码中均以C#为例,VB语言请具体查看对应的VB代码示例部分。

图2.1 接口描述

图 2.2 代码示例 2.1.2 API调用过程  组件引用

针对两种语言,需要引用不同的组件。(1)C#:

%U8SOFT%InteropInterop.U8Login.dll、%U8SOFT%InteropInterop.MSXML2.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.dll 如下图2.3、2.4、2.5所示。

(2)VB:

%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.tlb、添加Microsoft XML v3.0引用 如下图2.6、2.7所示。

其中,%U8SOFT%表示U8-872的安装目录。

图 2.3 添加对U8Login.dll引用

图 2.4 添加对Interop.MSXML2.dll引用

图 2.5 添加对U8API框架类库引用(.dll)

图2.6 添加对U8API框架类库引用(.tlb)

图2.7 添加Microsoft XML v3.0引用  API调用

添加必要的引用后,可以直接利用自动生成的代码示例(支持C#和VB两种语言),结合API接口详细描述,填入必要的参数值,就可以调用U8 API。

总体上,对U8 API的调用分成七个步骤: 1)构造u8login对象并登陆;

2)构造环境上下文对象,传入login,并按需设置其它上下文参数; 3)设置API地址标识(Url)参数; 4)构造APIBroker; 5)API参数赋值; 6)调用API;

7)获取返回结果。

详细的API调用过程请看下文“API内容”中各个模块中介绍的“开发步骤”。

下面重点介绍几个关键要点和步骤:环境上下文、API地址、APIBroker、普通参数赋值、BO参数赋值。

 环境上下文

环境上下文指在调用U8API时需要初始化的调用环境,包括Login、事务、特殊的业务参数等。环境上下文被初始化后,相关的环境参数会被业务API使用。

U8EnvContext envContext = new U8EnvContext(); Login 需要将U8Login对象传递给环境上下文,U8Login对象必须已经登录过。envContext.U8Login = u8Login; 事务

如果需要由外部发起事务,则可以发起事务的ADOConnection对象传递给环境上下文: ADODB.ConnectionClass conn = new ConnectionClass();envContext.BizDbConnection = conn;同时需要设置一个外部事务标记:

envContext.IsIndependenceTransaction = true;

 特殊业务参数

特殊业务参数指调用某些API需要设置的特定上下文参数,比如:销售的API必须要设置如VoucherType上下文参数,设置方法为: envContext.SetApiContext(“VoucherType”, 23);

 API地址

API地址是指API在U8API系统中的唯一标识,也叫API的URI,调用API时,需要通过API地址构建一个代表此API的Broker对象:

U8ApiAddress myApiAddress = new U8ApiAddress(“U8API/PurchaseOrder/VoucherSave”);

 APIBroker APIBroker是所有U8API的调用代理接口。使用U8所有API都必须通过APIBroker间接调用。APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。创建APIBroker必须传入API地址和环境上下文:

U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

 普通参数赋值

API参数分两种类型:BO参数和普通参数。普通参数是指非单据表头表体类型的参数,包括基本类型参数(String、Integer等)、知名对象参数(Connection、DOMDocument等)。普通参数的赋值采用如下方式:

broker.AssignNormalValue(“voucherState”, 2);

 BO参数赋值

BO参数即单据表头或表体类型的参数。对BO参数,支持两种方式传入,一种传BO对象,另一种传DOM对象。以下分别介绍:  传BO对象

给BO表头参数或表体参数赋值,推荐使用BO对象(BussinessObject)。例如:

BusinessObject DomHead = broker.GetBoParam(“DomHead”);

/***************************** 以下是非必输字段****************************/ DomHead[0][“ipresent”] = “";//现存量,string类型 DomHead[0][”cmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”cmodifytime“] = ”“;//修改时间,DateTime类型 /****************************** 以下是必输字段****************************/ DomHead[0][”poid“] = ”“;//主关键字段,int类型 DomHead[0][”dpodate“] = ”“;//日期,DateTime类型 DomHead[0][”cpoid“] = ”“;//订单编号,string类型 DomHead.RowCount = 10;//设置行数,不设置也可

//给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义

„„

„„

在此种情况下U8 API框架会对BO对象各字段进行参数校验。对字段进行赋值时,值可以是真实类型,也可以是无类型字符串。 传DOM对象

给BO表头参数或表体参数赋值,也支持直接传入DOM对象(DOMDocument)。例如:

MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);但是,在此种情况下U8 API框架不会对DOM对象进行参数验证。请在使用该方法之前,确保DOM对象的正确性。2.1.3 API典型应用场景  执行单一操作

单一操作指一项任务只需要一个API完成,比如:单据新增、审核/弃审、删除等单一操作。这是API调用最常见的场景,只需按照API的接口规范构造参数直接调用即可。

 执行复合操作

复合操作,即一项任务由多个API的协作来完成。比如,自定义的单据维护界面的主要逻辑,一般由以下四个步骤构成:

1)加载单据;

2)在编辑界面上显示; 3)用户修改单据字段; 4)提交保存。

以上步骤需要进行两次API调用: 1)加载单据时候调用“加载API”,以获取单据BO对象(或原始DOM对象)并在界面上展现;

2)用户在修改单据时其实就是在修改BO对象,用户保存单据时调用“保存API”,此时要将此BO对象传给“保存API”(而不用构造新的BO对象)。

代码示例:

首先,登陆;

//构造u8login对象并登陆

U8Login.clsLogin u8Login = new U8Login.clsLogin();String sSubId = ”AS“;String sAccID = ”(default)@001“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;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);Marshal.FinalReleaseComObject(u8Login);return;然后,通过LOAD接口获取BO对象;

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

„„

//设置API地址标识(Url)

U8ApiAddress myApiAddress = new U8ApiAddress(“装载单据的地址标识”);//构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);//API参数赋值

broker.AssignNormalValue(”参数名“, ”参数值“);„„

//调用LOAD接口API if(!broker.Invoke()){

} //获取表头或表体的BO对象,如果要取原始的XMLDOM对象结果,请使用GetResult(参数名)BusinessObject DomRet = broker.GetBoParam(”表头或表体参数名“);//错误处理

Exception apiEx = broker.GetException();if(apiEx!= null){

} //结束本次调用,释放API资源 broker.Release();return;if(apiEx is MomSysException){

} else if(apiEx is MomBizException){

} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理

接着,BO对象经用户修改重新赋值,并传递给UPDATE接口提交保存;

//修改获取的BO对象,对需要更改的字段重新赋值 DomRet[0][”字段名“] = 新的字段值;„„

//重新构造“新增或修改”API的地址标识

myApiAddress = new U8ApiAddress(”新增或修改”API的地址标识“);//重新构造APIBroker broker = new U8ApiBroker(myApiAddress, envContext);//表头或表体参数赋值

broker.SetBoParam(”表头或表体参数名“, DomRet);//API参数赋值

broker.AssignNormalValue(”参数名“, ”参数值“);„„

//调用UPDATE接口API if(!broker.Invoke()){ } „„

最后,获取返回结果。

//获取普通返回值

System.String result = broker.GetReturnValue()as System.String;//获取out/inout参数值 „„

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

2.2.API内容 2.2.1 采购管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现采购业务单据各种操作功能的编程接口。使用采购管理的API开发接口,可以对库存管理中的采购到货单、采购普通发票、采购专用发票、采购订单、请购单、采购运费发票等单据进行审核、弃审、获取(或装载)、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的采购管理产品; 必须安装API适配器组件PUAPIConcrete.dll  接口说明

采购管理二次开发接口说明:

 审核单据-ConfirmPO方法

参数:

domHead

—— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 弃审单据-CancelconfirmPO方法

参数:

domHead

—— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 装载单据-Load方法 参数:

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象 strWhere —— 过滤条件串 varVoucherID —— 单据主表ID strLocateWhere —— 定位条件串 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 删除单据-Delete方法

参数:

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象

CurDom —— 返回DOM格式错误信息 API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 新增或修改新单据-VoucherSave方法

参数:

DomHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输

VoucherState —— 保存状态,必输。2增加;1修改 ;0非编辑 curID

—— 返回单据头ID CurDom —— 返回DOM格式错误信息 UserMode —— 使用模式,0:CS;1:BS API上下文:

VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串

sBusType —— 业务类型:普通采购,直运采购,受托代销

 开发步骤

实现采购单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:

U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;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);Marshal.FinalReleaseComObject(u8Login);return;

//登陆

String sAccID = ”(default)@001“;如果当前环境中有login对象则可以省去第一步。

2. 构造环境上下文对象,传入login,并按需设置其它上下文参数

U8EnvContext envContext = new U8EnvContext();

envContext.U8Login = u8Login;//设置上下文参数

envContext.SetApiContext(”VoucherType“, new int());//上下文数据类型:int,含义:单据类型 envContext.SetApiContext(”bPositive“, new bool());//上下文数据类型:bool,含义:红蓝标

识:True,蓝字

envContext.SetApiContext(”sBillType“, new string());//上下文数据类型:string,含义:为空

envContext.SetApiContext(”sBusType“, new string());//上下文数据类型:string,含义:业务

类型:普通采购,直运采购,受托代销

//构造环境上下文对象 //传入login 如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:

envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 设置API地址标识(Url)参数

//如当前API“新增或修改”的地址标识为:U8API/PurchaseOrder/VoucherSave

U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/PurchaseOrder/VoucherSave“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

5. API对象参数赋值

1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下

MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);

方法二是构造BusinessObject对象,具体方法如下:

//首先通过GetBoParam方法获取表头表体参数

注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

/****************************** 以下是必输字段 ****************************/ DomHead[0][”poid“] = ”“;//主关键字段,int类型 DomHead[0][”dpodate“] = ”“;//日期,DateTime类型 DomHead[0][”cpoid“] = ”“;//订单编号,string类型 DomHead[0][”cvenabbname“] = ”“;//供货单位,string类型 DomHead[0][”cexch_name“] = ”“;//币种,string类型 DomHead[0][”nflat“] = ”“;//汇率,double类型 „„

/***************************** 以下是非必输字段 ****************************/ DomHead[0][”ipresent“] = ”“;//现存量,string类型 DomHead[0][”cmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”cmodifytime“] = ”“;//修改时间,DateTime类型 DomHead[0][”caudittime“] = ”“;//审核时间,DateTime类型 DomHead[0][”cauditdate“] = ”“;//审核日期,DateTime类型 DomHead[0][”cmodifydate“] = ”“;//修改日期,DateTime类型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数

//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义

„„

2)给普通参数赋值 例如,//给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参考服务接口定义

broker.AssignNormalValue(”VoucherState“, new int());注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

//该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取其值

//该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数

MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);„„

当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

6. 调用API //示例调用如下:

if(!broker.Invoke())

{

//错误处理

Exception apiEx = broker.GetException();if(apiEx!= null){

if(apiEx is MomSysException){

} else if(apiEx is MomBizException){

} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理

} } //结束本次调用,释放API资源 broker.Release();return;注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

7. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数

BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。

//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

/****************************** 以下是必输字段 ****************************/ int poid = Convert.ToInt32(DomHeadRet[0][”poid“]);//主关键字段,int类型

DateTime dpodate = Convert.ToDateTime(DomHeadRet[0][”dpodate“]);//日期,DateTime类型 string cpoid = Convert.ToString(DomHeadRet[0][”cpoid“]);//订单编号,string类型 „„

/***************************** 以下是非必输字段 ****************************/ string ipresent = Convert.ToString(DomHeadRet[0][”ipresent“]);//现存量,string类型 DateTime cmaketime = Convert.ToDateTime(DomHeadRet[0][”cmaketime“]);//制单时间,DateTime类型 „„ 注意:

2)获取普通返回值

代码如下:

//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,//获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult(”curID“)as string;

//获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„

2.2.2 销售管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现销售业务单据各种操作功能的编程接口。使用销售管理API开发接口,可以完成销售管理的销售报价单、销售订单、销售发货单、销售退货单、销售普通发票、销售专用发票、委托代销发货单、委托代销结算单、销售调拨单等单据的审核、弃审、获取、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的销售管理产品; 必须安装API适配器组件SAAPIConcrete.dll;

 接口说明

销售管理二次开发接口及参数说明:  审核或弃审单据-Audit方法

参数:

domHead

—— 单据表头,DOM对象,必输 bVerify

—— 审核/弃审标志,必输。true表审核;false表弃审

API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 删除单据-Delete方法

参数:

domHead —— 单据表头,DOM对象,必输 API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 装载单据-Load方法

参数:

domHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输 VouchID

—— 需要装载的单据号,可选 blnAuth

—— 是否控制权限:true

API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 新增或修改单据-Save方法

参数:

domHead

—— 单据表头,DOM对象,必输 domBody

—— 单据表体,DOM对象,必输 VoucherState —— 保存状态,必输。0增加;1修改 VNewID

—— 单据的id,可选 DomConfig

—— ATO,PTO选配配置,必输,可设置为nothing API上下文:

VoucherType —— 单据类型,必输。具体类型参看API上下文描述

 开发步骤

实现销售单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:

U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;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);Marshal.FinalReleaseComObject(u8Login);return;

//登陆

String sAccID = ”(default)@001“;如果当前环境中有login对象则可以省去第一步。

2. 构造环境上下文对象,传入login,并按需设置其它上下文参数

U8EnvContext envContext = new U8EnvContext();

envContext.U8Login = u8Login;//设置上下文参数

envContext.SetApiContext(”VoucherType“, new int());//上下文数据类型:int,含义:单据类型

//构造环境上下文对象 //传入login

如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:

envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 设置API地址标识(Url)参数

//如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save

U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

5. API对象参数赋值

1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下

MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);

方法二是构造BusinessObject对象,具体方法如下:

//首先通过GetBoParam方法获取表头表体参数

注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

/****************************** 以下是必输字段 ****************************/ domHead[0][”id“] = ”“;//主关键字段,int类型 domHead[0][”csocode“] = ”“;//订 单 号,string类型 domHead[0][”ddate“] = ”“;//订单日期,DateTime类型 domHead[0][”cbustype“] = ”“;//业务类型,string类型

„„

/***************************** 以下是非必输字段 ****************************/ domHead[0][”fstockquanO“] = ”“;//现存件数,double类型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数

//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义

domHead[0][”fcanusequanO“] = ”“;//可用件数,double类型 domHead[0][”dpredatebt“] = ”“;//预发货日期,DateTime类型 domHead[0][”dpremodatebt“] = ”“;//预完工日期,DateTime类型 domHead[0][”dpredatebt“] = ”“;//预发货日期,DateTime类型

„„

2)给普通参数赋值 例如,//给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参考服务接口定义

broker.AssignNormalValue(”VoucherState“, new int());注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

//该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取其值

//该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数

MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);„„

当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

6. 调用API //示例调用如下:

if(!broker.Invoke())

{

//错误处理

Exception apiEx = broker.GetException();if(apiEx!= null){ if(apiEx is MomSysException)

}

} {

} else if(apiEx is MomBizException){

} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理

//结束本次调用,释放API资源 broker.Release();return;注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

7. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数

BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。

//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

/****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(domHeadRet[0][”id“]);//主关键字段,int类型

string ccode = Convert.ToString(domHeadRet[0][”ccode“]);//单据号,string类型 DateTime ddate = Convert.ToDateTime(domHeadRet[0][”ddate“]);//日期,DateTime类型 string cbustype = Convert.ToString(domHeadRet[0][”cbustype“]);//业务类型,string类型 „„

/***************************** 以下是非必输字段 ****************************/ string cpayname = Convert.ToString(domHeadRet[0][”cpayname“]);//付款条件,string类型 string cpersonname = Convert.ToString(domHeadRet[0][”cpersonname“]);//业 务 员,string类型 double itaxrate = Convert.ToDouble(domHeadRet[0][”itaxrate“]);//税率,double类型 string cexch_name = Convert.ToString(domHeadRet[0][”cexch_name“]);//币种,string类型 „„ 注意:

2)获取普通返回值

代码如下:

//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,//获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult(”curID“)as string;

//获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„

2.2.3 库存管理

 功能介绍

为了支持U8二次开发对业务单据的开发,本功能提供了实现库存业务单据各种操作功能的编程接口。使用库存管理的API开发接口,可以对库存管理中的采购入库单、其他入库单、其他出库单、产成品入库单、材料出库单、调拨单、组装单、拆卸单、形态转换单、盘点单、货位调整单、销售出库单、期初结存、不合格品记录单、不合格品处理单、期初不合格品、调拨申请单等单据进行审核、弃审、获取(或装载)、新增、修改、删除。

 使用环境

必须安装.NET FrameWork 2.0; 必须安装U8-872版本的库存管理产品; 必须安装API适配器组件STAPIConcrete.dll  接口说明

库存管理二次开发接口说明:

 审核单据-Audit方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息

cnnFrom —— 连接对象(调用方控制事务时需要传入连接对象)TimeStamp

—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg

—— 返回DOM格式的信息:主要是可用量信息 bCheck

—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量 bList —— 传入false MakeWheres —— 传空 sWebXml —— 传入空串

oGenVouchIds —— 获取单据ID列表(返回审核时自动生成的单据的id

列表,传空)

 弃审单据-CancelAudit方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时必须传入)TimeStamp

—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg

—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck

—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bList —— 传入false

 装载单据-Load方法

参数:

sVoucherType —— 单据类型:01 sWhere —— 条件串

DomHead

—— 表头DOM对象 domBody

—— 表体DOM对象 domPos

—— 货位DOM对象 errMsg

—— 错误信息

bGetBlank

—— 是否获取空白单据 sBodyWhere_Order —— 表体排序方式字段

注意:其中sWhere设计为:

如果按单据号加载,则语法为ccode=N'要加载的单据号',例如broker.AssignNormalValue(”sWhere“, ”ccode = N'0000000001'“);

如果按单据ID加载,则语法为id=XXX,例如broker.AssignNormalValue(”sWhere“, ”id = 1“)。

 删除单据-Delete方法

参数:

sVoucherType —— 单据类型:01 VoucherId

—— 单据ID errMsg

—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时需要传入连接对象)TimeStamp

—— 单据时间戳

domMsg —— 返回DOM格式的信息:主要是检查可用量和控制可

用量信息

bCheck

—— 是否进行业务检查 BeforCheckStock —— 是否检查可用量 bList

—— 传入false

 添加新单据-Add方法

参数:

sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody

—— 表体DOM对象

domPosition —— 货位DOM对象:传空 errMsg

—— 返回错误信息 cnnFrom —— 连接对象,如果由调用方控制事务,则需要设置

此连接对象,否则传空

VoucherId

—— 返回单据ID domMsg —— 返回DOM格式的信息:主要返回可用量和现存量的错误信息

bCheck

—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量(检查可用量)bIsRedVouch —— 是否红字单据 sAddedState —— 传空字符串 bReMote

—— 是否远程

 修改单据-Update方法

参数:

sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody

—— 表体DOM对象 domPosition —— 货位DOM对象 errMsg

—— 错误信息 cnnFrom —— 连接对象

domMsg

—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck

—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bIsRedVouch —— 是否红字单据 sAddedState —— 修改状态 bUpdateNeedEas —— 传true  开发步骤

实现库存单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆

声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:

U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;

//登陆

String sAccID = ”(default)@001“;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);Marshal.FinalReleaseComObject(u8Login);return;如果当前环境中有login对象则可以省去第一步。2. 构造环境上下文对象,传入login U8EnvContext envContext = new U8EnvContext();

envContext.U8Login = u8Login;

//构造环境上下文对象 //传入login 3. 设置API地址标识(Url)参数

//如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save

U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

5. API对象参数赋值

1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下

MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);

方法二是构造BusinessObject对象,具体方法如下:

//首先通过GetBoParam方法获取表头表体参数

注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。

/****************************** 以下是必输字段 ****************************/ BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数

//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义

DomHead[0][”id“] = ”“;//主关键字段,int类型 DomHead[0][”ccvcode“] = ”“;//盘点单号,string类型 DomHead[0][”dcvdate“] = ”“;//盘点日期,DateTime类型 DomHead[0][”dacdate“] = ”“;//账面日期,DateTime类型

DomHead[0][”cwhname“] = ”“;//盘点仓库,string类型

„„

/***************************** 以下是非必输字段 ****************************/ DomHead[0][”cmodifyperson“] = ”“;//修改人,string类型 DomHead[0][”dmodifydate“] = ”“;//修改日期,DateTime类型 DomHead[0][”dnmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”dnmodifytime“] = ”“;//修改时间,DateTime类型 DomHead[0][”dnverifytime“] = ”“;//审核时间,DateTime类型

„„

2)给普通参数赋值

例如,给普通参数sVouchType(参数名)赋值:

broker.AssignNormalValue(”sVouchType“, new System.String());

注意:所有参数名不限大小写。

3)给“OUT型”参数赋值

为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。

如: „„

// 该参数errMsg为OUT型参数,由于其数据类型为System.String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”errMsg“)获取其值

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

注意:当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。

4)给“INOUT型”参数赋值

对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。

6. 调用API //示例调用如下: if(!broker.Invoke())

{

} 注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。

//错误处理

Exception apiEx = broker.GetException();if(apiEx!= null){

} //结束本次调用,释放API资源 broker.Release();return;if(apiEx is MomSysException){

} else if(apiEx is MomBizException){

} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理

7. 获取返回结果

1)获取BO对象

在“装载单据”时,通过GetBoParam方法获取表头或表体参数

BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。

//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义

/****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(DomHeadRet[0][”id“]);//主关键字段,int类型

string ccvcode = Convert.ToString(DomHeadRet[0][”ccvcode“]);//盘点单号,string类型 DateTime dcvdate = Convert.ToDateTime(DomHeadRet[0][”dcvdate“]);//盘点日期,DateTime类型 DateTime dacdate = Convert.ToDateTime(DomHeadRet[0][”dacdate“]);//账面日期,DateTime类型 string cwhname = Convert.ToString(DomHeadRet[0][”cwhname“]);//盘点仓库,string类型 注意: „„

/***************************** 以下是非必输字段 ****************************/ string cmodifyperson = Convert.ToString(DomHeadRet[0][”cmodifyperson“]);//修改人,string类型 DateTime dmodifydate = Convert.ToDateTime(DomHeadRet[0][”dmodifydate“]);//修改日期,DateTime类型

DateTime dnmaketime = Convert.ToDateTime(DomHeadRet[0][”dnmaketime“]);//制单时间,DateTime类型

DateTime dnmodifytime = Convert.ToDateTime(DomHeadRet[0][”dnmodifytime“]);//修改时间,DateTime类型

DateTime dnverifytime = Convert.ToDateTime(DomHeadRet[0][”dnverifytime“]);//审核时间,DateTime类型 „„

2)获取普通返回值

代码如下:

//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值

如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。

如,//获取普通OUT参数domPos。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用

//获取普通OUT参数errMsg。此返回值数据类型为System.String,在使用该参数之前,请判断是否为空 System.String errMsgRet = broker.GetResult(”errMsg")as System.String;„„

第四篇:计算机图书管理系统毕业论文(VB开发,适用于院系)

致谢

在本次毕业设计中,我从指导老师身上学到了很多东西。她认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益匪浅。她无论在理论上还是在实践中,都给与我很大的帮助,使我得到很大的提高,这对于我以后的工作和学习都有一种巨大的帮助,在此感谢她耐心的辅导。在撰写论文阶段,指导老师几次审阅我的论文,提出了许多宝贵意见,没有她的指导,我们就不能较好的完成课题设计的任务。

另外,我还要感谢在这几年来对我有所教导的老师,他们孜孜不倦的教诲不但让我学到了很多知识,而且让我掌握了学习的方法,更教会了我做人处事的道理,在此表示感谢。同时,在系统开发过程中还有同组的同学也给了我不少帮助,这里一并表示感谢。

第五篇:vb错误处理

Vb错误处理 出错处理

(1)设置错误陷阱

On Error Resume Next

若出现错误,则将当前错误语句忽略,执行下条语句。

On Error GoTo 语句标号

On Error GoTo 0 不进行任何处理

(2)编写错误处理程序

Resume:接着错误的地方执行,重试。

Resume Next:类似On Error Resume Next,忽略当前错误语句,执行下一语句Resume <标号>:到标号那里去处理。

过程级、模块级

节选:

Onerrorgoto标签是放在错误发生之前,有效范围是到此事件的结束,包括错误处理时发生的错误。(此时的错误一般是没有想到的,故也没有处理)所以要保证不要在错误处理的代码中写复杂的代码。

OnErrorGotoErr_Normal

'一般代码

sql= “insertinto......”

OnErrorGotoErr_Roll

adocn.BeginTrans

adocn.Executesqladocn.CommitTrans

OnErrorGotoErr_Normal

....Exitsub

Err_Normal:

'正常错误处理

ExitSub

vb6.0 遇到错误能不退出吗

2012-1-25 20:04提问者: 咫·尺 | 浏览次数:278次

比如遇到数据溢出啊等,弹出错误以后,就直接把程序关闭了,数据都没保存,能弹出错误后,不关闭程序吗?

满意回答

插入以下代码:

On Error Resume Next

即可。意思是,程序遇到错误不理会,继续执行。

或者使用GoTo,比如下面的代码计算肯定是溢出的,但程序不会退出,不过会提示: On Error GoTo ToExit

Dim g, ErrNum As Boolean

g = 1

Do Until ErrNum

g = g * 1024

Loop

ToExit:

If Err.Number = 6 Then

Print “程序溢出,计算结果不准确”, g

Exit Sub

End If

或者使用以下代码,可以完全显示计算过程:

Dim WithEvents List As ListBox

Private Sub Form_Load()

On Error GoTo ToExit

Dim g, ErrNum As Boolean

g = 1

Set List = Me.Controls.Add(“VB.ListBox”, “List”)

With List

.Left = 0

.Top = 0

.Width = Form1.Width490

.Visible = True

End With

Do Until ErrNum

g = g * 1024

List.AddItem g

Loop

ToExit:

If Err.Number = 6 Then

List.AddItem “程序溢出,计算结果不准确” & g

Exit Sub

End If

End Sub

追问

是不是要在每一个容易出错的sub里面都要这样加一下?有没有整体设置一下或者写代码的?每个sub都写一下也挺麻烦的回答

首先,第一行是每个里边都需要有的,有了这一行,才会执行错误跳转。

比如上边的第二段代码也可以这样写:这样在每段容易出错的过程中,加上第一个的On Error GoTo ToExit和最后一行的ToExit: MsgBox “程序出现错误!” & Chr(10)& “错误类型:” & Error(Err.Number), 16即可。当然,你需要在Esub这个子过程中,把所有可能会涉及到的错误代码都添加上。如果只想知道哪里错了,也可以直接提醒,出错也是可以的Private Sub Form_Load()

On Error GoTo ToExit

Dim g, ErrNum As Boolean

g = 1

Do Until ErrNum

g = g * 1024

Loop

ToExit: MsgBox “程序出现错误!” & Chr(10)& “错误类型:” & Error(Err.Number), 16

End Sub

下载U8API开发手册(VB版)word格式文档
下载U8API开发手册(VB版).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    VB心得

    在这次VB课程设计过程中,我最大的收获就是有二,一是与其临渊羡鱼,不如退而结网,无论什么事情,一定要去做,困难在你的勇气和毅力下是抬不了头的。二是深刻地认识到,做事情一定要有耐......

    VB论文

    学生姓名 :曹超 班 级 :1226001 学 号 :201220600107 专 业 :采矿工程 日期: 2014 年 12 月 18 日 学习VB的心得体会 这学期选修了VB这门学科,想从学习中对计算机有更深刻......

    VB 课程设计

    学生成绩管理系统 一、 功能描述 首先简单地阐述本人所要实现系统的目的,然后应较详细的叙述本系统所要实现的功能。 ************ ******* 二、 概要设计 1、系统功能模块......

    VB课程设计

    课程设计 学 院 班 级 指导老师 姓 名 学 号 成 绩 2013年1 月 10 日 一.课程设计题目 学生管理系统 二.功能描述 按设定的用户名密码进行登录后,可按需求进行对数据库中......

    vb课程设计

    Visual Basic课程设计报告 题目1: 贪吃蛇 难度:**** 题目2: 难度: 指导教师: 姓 名: 学 号: 专 业: 班 级: 学 院:日 期: 目录 1、题目简介 ............................................

    VB说课稿

    《组合框的使用》说课稿 各位领导、老师大家好! 今天我说课的题目是《组合框的使用》,我将从教材分析、教学目标、教学重点难点、教学方法、教学过程、教学总结六个方面谈谈我......

    以VB为基础的学生成绩管理系统的开发

    这次以VB为基础的学生成绩管理系统的开发,为期一周,我们经过查阅图书管里的资料,在网上查找案例等等方法,从最初的没有头绪,到最终成功开发出这个系统,在这个过程中,大家付出了很多......

    开发经销商标准作业手册(范文大全)

    开发经销商标准作业手册 (转) 开发经销商标准作业手册明确目标认清自己产品的定位;分析产品的主要消费群在哪里、次要消费群在哪里、以及这些消费群的主要消费场所在哪里、次要......