
ERPMRP管理秋葵软件OAERP高级设计.doc
87页ERPMRP管理)秋葵软件OAERP高级设计秋葵软件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产生提成表的程序…………………………………………………………………………23447910111315161718182022232327313233343536383940424350545758引言为了满足大量未知的、以及特殊的需求,系统内置了虚拟机。
由于是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(j>0&&j
这个例子也是说明如何从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) 窗口编辑框(3) 清单记录指内存或数据库中的一条记录,或多条记录;窗口编辑框是用户交互的输入位置;清单指窗口中的清单.当系统处于"记录"处理状态是,系统状态为1;"窗口编辑框"状态为2;清单状态为3.我们可以用CurrentMode()获得当前状态的值.示例一,审核事件"裁床明细"窗口中的一段代码是:*******************556.3Amount*******************intM=CurrentMode();if(M==2){Sum2AndSet(NULL,"Items","Amount");}这段代码是加载到主单据"Amoun"字段的,仅仅在模式II中工作,合计Itesm清单Amount字段。
示例二,保存事件用户定义了一个全新的窗口,用于调整结算价而结算价则是用户自己定义的,贯穿全部清单的一个字段uPrice–标识几个特别的价格在这个窗口中,用户自己设计了录入信息的方式,从库存中选择剩余库存,录入新的结算价uPrice,然后希望单据审核时,修改库存中的结算价uPrice代码应该加载到审核函数,设置方式是:代码清单是1inti=0,i1,ic1,j1;2doubleprice1;3strings1;4gDataSetds1(this,1,"Items");5for(i=0;;++i)6{i1=ds1.MoveTo(i);7if(i1<0)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,那么这个语句将使UpdatetblInstockItemssetuPrice=10WhereCode=2005Line30,使用SQL函数去执行这个语句Line12,检查了获取库存清单序号的合法性,如果获取了非法结果,。
