您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 秋葵软件OA-ERP高级设计
C/C++语言开发指南1秋葵软件OA-ERP高级设计C/C++语言开发指南目录§1新版本C/C++语言变更说明…………………………………………………………………………§2OA-ERP与用户程序的交互……………………………………………………………………………示例一审核事件………………………………………………………………………………………示例二:保存事件……………………………………………………………………………………示例三:保存事件……………………………………………………………………………………示例四:下拉列表控制记录事件Event_DropDown…………………………………………………清单数据转移的设置选项:库存参考,自动清除数量………………………………………………示例五:记录选择后的事件Event_Selection……………………………………………………示例六:建立选择记录的事件Event_DropDownSetItems…………………………………………示例七:表单颜色事件Event_GridColor……………………………………………………………示例八:数据查询处理事件Event_Retrive…………………………………………………………示例九:综合示例,禁售产品的业务规划…………………………………………………………§3OA-ERP虚拟机数据集的工作模式……………………………………………………………………数据集工作模式………………………………………………………………………………………使用SQL语句返回数据集完整示例…………………………………………………………………取得树形节点的数据集………………………………………………………………………………§4C/C++语言代码解决特殊业务示例…………………………………………………………………示例一:外贸费用的计算……………………………………………………………………………示例二:部分清单行的计算…………………………………………………………………………示例二:采购付款金额的控制………………………………………………………………………结果……………………………………………………………………………………………………字段值的控制…………………………………………………………………………………………练习……………………………………………………………………………………………………一个复杂的报价计算…………………………………………………………………………………§5代码逻辑故障分析……………………………………………………………………………………§6表单自动转换事件……………………………………………………………………………………示例一:………………………………………………………………………………………………§7查询结果转换清单事件……………………………………………………………………………附录1.OA-ERP虚拟机C/C++数据工作模式附录2.OA-ERP支持的数据类型附录3.OA-ERP事件类型一览表附录4.C/C++基础附录5.更多示例§8函数指针、与动态链接库……………………………………………………………………§9产生提成表的程序…………………………………………………………………………23447910111315161718182022232327313233343536383940424350545758C/C++语言开发指南2引言为了满足大量未知的、以及特殊的需求,系统内置了虚拟机。由于是C++虚拟机,因此理论上应该是能满足任何功能扩充。本文件仅仅是对如何使用这个技术做一个概览性介绍。OA-ERP允许用户全面开发自定义需求功能.(1)自定义表单,并且给它增加字段..(2)给系统原来自带的表单增加新的字段.(3)完全自定义报表.(4)全面控制业务处理过程.所谓全面控制业务处理过程,就是在新增单据、审核单据、处理完毕单据,用户录入数据过程中的控制。给每个字段增加C/C++代码,就是处理“录入数据过程中的控制”。本文主要讲述用C/C++程序编写功能强大的业务处理功能。初学者理解这些内容的顺序如下(1)C/C++的基本工作方式.(2)数据集的概念.(3)事件的概念.(4)附录.§1.新版本C/C++语言变更说明(2007.12.04)(自学请勿跳过,这里是观念的转变,如何从C语言进入到C++。)下面函数不再使用(1)BeginRepeatEndRepeat这对函数主要目的是在窗口录入状态下(模式II),切换到清单,计算清单行的数据:新的版本中,使用数据集的概念,不再需要切换。例子原来C语言程序(老版本)为intr=GetRow();intj=BeginRepeat(Items);floatSum=0;while(j0&&jr){doublex1=Calculate2(Amount*CoPrice);doublex2=newGetTax(x1,0);Sum=Sum+x2;j=NextRow();}EndRepeat();newSet2(NULL,Sum);(旧版本注释如下)GetRow()获得当前行BeginRepeat(Items)准备对Items清单进行统计,并返回首行行次NextRow();跳跃到下一行EndRepeat();结束对清单的统计新版本则使用清单数据集ds1,代码变换为下面C/C++语言开发指南3doubleSum=0.0;gDataSetds1(this,3,Items);intr1=ds1.GetRow();while(r10){doublex1=ds1.Calculate2(Amount*CoPrice);doublex2=ds1.newGetTax(x1,0);Sum=Sum+x2;r1=ds1.NextRow();}newSet2(NULL,Sum);新版本中,不再需要切换,操作代表清单的数据集合ds1就可以了。这个例子也是说明如何从C语言程序过度到C++程序。请查看系统自带的其它示例程序。(2)newGetX3这个函数主要目的是是返回字段的字符串值:新的版本中,使用newGetX4直接获得这个目的。例如原来的代码是charbuff[128];newGetX3(xExtraFields_C01,128,buff)if(buff[0]=='R'&&buff[0]=='M'&&buff[0]=='B'){doubleX2=newGet2(Product.LTimetblPurchcontr);newSet2(Price,X2);}新版本代码如下strings1=newGetX4(xExtraFields_C01)if(s1==RMB){doubleX2=newGet2(Product.LTimetblPurchcontr);newSet2(Price,X2);}可以看到处理复杂问题时使用C++代码,较C语言更容易接近人的思维的直观性。§2.C/C++事件OA-ERP目前开放的允许用户自己控制的地方是(1)新增单据(2)审核单据(3)处理完毕单据(4)用户录入数据过程。(5)下拉框事件由于用户处理数据的对象有所不同,因此OA-ERP系统将他们分为三大类:(1)记录(2)窗口编辑框C/C++语言开发指南4(3)清单记录指内存或数据库中的一条记录,或多条记录;窗口编辑框是用户交互的输入位置;清单指窗口中的清单.当系统处于"记录"处理状态是,系统状态为1;"窗口编辑框"状态为2;清单状态为3.我们可以用CurrentMode()获得当前状态的值.示例一,审核事件"裁床明细"窗口中的一段代码是:*******************556.3Amount*******************intM=CurrentMode();if(M==2){Sum2AndSet(NULL,Items,Amount);}这段代码是加载到主单据"Amoun"字段的,仅仅在模式II中工作,合计Itesm清单Amount字段。示例二,保存事件用户定义了一个全新的窗口,用于调整结算价。而结算价则是用户自己定义的,贯穿全部清单的一个字段uPrice–标识几个特别的价格。在这个窗口中,用户自己设计了录入信息的方式,从库存中选择剩余库存,录入新的结算价uPrice,然后希望单据审核时,修改库存中的结算价uPrice。代码应该加载到审核函数,设置方式是:代码清单是C/C++语言开发指南51inti=0,i1,ic1,j1;2doubleprice1;3strings1;4gDataSetds1(this,1,Items);5for(i=0;;++i)6{i1=ds1.MoveTo(i);7if(i10)8{return0;9}10price1=ds1.newGet2(uPrice);11ic1=(int)ds1.newGet2(JInstockItemsCode);12if(ic1==0)13{gStringArraySA1(this);14s1=我要显示一些信息:LinesContainNoleagalInformation,line=;15s1+=(i+1);16SA1.Append(s1);17SA1.Append(按钮1);18SA1.Append(按钮2);19SA1.Append();20j1=SA1.ShowMessage();21if(j1==1)22{return-1;23}34}25else26{s1=UpdatetblInstockItemssetuPrice=;27s1+=price1;28s1+=WhereCode=;29s1+=ic1;30SQL(s1);31}32}33return0;说明:我们希望获得清单行,然后将每行的JInstockItemsCode字段值取出来,这个数据是库存清单的序号,然后获得uPrice字段的值,将这个值更新到数据库中去。审核单据时,系统传给我们的操作对象是单据本身,那么如何获得清单行?如何操作清单行呢?Line4完成了这个工作,整个清单我们封装在gDataSet这个数据结构中的,为了构造这个数据集合,我们传给了它3个参数,第一个参数是当前工作对象(记录、窗口、或清单),第二个参数是1,即我们希望的模式I集合;第三个参数是清单字段名称“Items”.从Line10-11我们看到,我们使用了ds1这个前缀,表示操作是对于清单的。Line5-32是循环处理,Line6是定位到第i条记录,如果到了末尾,或者根本没有清单,那么函数会返回-1,-2,等负数。从Line26-29将构造SQL语句,假如Code是20005,uPrice=10,那么这个语句将使C/C++语言开发指南6UpdatetblInstockItemssetuPrice=10WhereCode=2005Line30,使用SQL函数去执行这个语句。Line12,检查了获取库存清单序号的合法性,如果获取了非法结果,Line12-20又构造了一个提示窗口这个窗口是Line20的执行结果。为了显示这个窗口,系统需要一个字符串数组的对象gStringArray,这个在Line13中构造。这个对象是字符串数组,即其每个元素都是一个字符串。因为这个窗口需要3个字符串,(1)编辑框中的提示信息,(2)按钮“Continue”,(3)按钮“Cancel”。另外最后还要附加几个空白字符串,以便系统知道谁是最后一个按钮牛。当用户按第一个按钮时,这个函数返回0,第二个返回1,依次类推。如果超时,返回-1。这段代码,在一般正常情况下,反复操作所有清单,处理完毕后返回0,审核成功。注意返回-1,表示审核失败。示例二其它问题这里依赖一个字段JInstockItemsCode,即库存明细的序号,如果没有这个字段,或者由于其它原因,这个字段的值无法取道,怎么办呢?下面代码说明如何使用批号来替代,当然你可以增加更多的检查,防止错误inti=0,i1,ic1,j1;doubleprice1;strings1;gDataSe
本文标题:秋葵软件OA-ERP高级设计
链接地址:https://www.777doc.com/doc-19152 .html