N7程序基础开发学习手册.doc

上传人:laozhun 文档编号:2401684 上传时间:2023-02-17 格式:DOC 页数:56 大小:337.50KB
返回 下载 相关 举报
N7程序基础开发学习手册.doc_第1页
第1页 / 共56页
N7程序基础开发学习手册.doc_第2页
第2页 / 共56页
N7程序基础开发学习手册.doc_第3页
第3页 / 共56页
N7程序基础开发学习手册.doc_第4页
第4页 / 共56页
N7程序基础开发学习手册.doc_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《N7程序基础开发学习手册.doc》由会员分享,可在线阅读,更多相关《N7程序基础开发学习手册.doc(56页珍藏版)》请在三一办公上搜索。

1、基础开发学习手册MVC结构31.MVC说明32.环境变量33.系统配置文件Config.properties4数据定义TableInfo、TablesInfo51.数据定义说明52.将TablesInfo 在snsoft.awt.DialogPane 中生成53.将TablesInfo 在TablePane中生成8数据集DataSet81.主要方法snsoft.dx.DataSet82.ReadDataSet113.StorageDataSet114.ArrayDataSet115.FilterDataSet126.TableDataSet12表界面Table121.主要方法snsoft.ta

2、ble.Table122.GridTable143.RecordTable144.public final class TableColumn extends TableCell14表事件DefaultListener161.表事件说明162.表事件的执行顺序213.一次行移动的触发214.一次post的触发225.一次save的触发226.如何锁定监听22数据库操作Database221.数据库操作方式222.数据集相关工具snsoft.dx. DxUtil233.数据库对象抽象类snsoft.dx .Database234.单记录更新/插入操作的对象snsoft.dx.UpdateReso

3、lver235.批量更新/插入操作的对象snsoft.dx.UpdateData24事务的处理241.事务的含义:一批处理一次完成,无法完成则回滚242.Database事务的实现24B/S结构程序处理251.程序放置位置客户端还是服务端252.远程调用时参数的传递253.交互方式254.远程调用两种方法的比较26存盘事件DataSetSave271.存盘监听说明:272.DataSetSave的主要方法273.存盘事件的监听DataSetSaveListener284.存盘事件监听的定义方式28对话框DialogPane281.对话框snsoft.awt.DialogPane的主要方法282

4、.对话框常用的控件293.对话框常用的布局方法354.对话框事件snsoft.awt.DialogPaneListener的主要方法365.生成对话框的主要方法376.举例1:组织过滤条件、对话框事件使用、计算列的使用、字段底色设置377.举例2:布局DialogPane428.举例3:通过数据定义打开DialogPane439.举例4:通过名称对Container中某Component的定位43码名映射的处理441.snsoft.dx.CodeData(ValueMap)码名表442.snsoft.dx.util.ArrayCodeData453.snsoft.awt. AidInputer

5、 (所有辅助输入器需要实现的interface)454.辅助输入器:snsoft.awt.util.SelectCodeDialog455.辅助输入器:snsoft.busibas.cli. BusiBasDialogPane45业务层基础类451.snsoft.pub.*452.snsoft.busibas.BusiBasPubl453.snsoft.busibas.cli.DefaultBusiListener /所有业务基类454.snsoft.busibas.cli.BusiBasListener465.snsoft.wf.WfListeners12.txt466.snsoft.ft.

6、cli.FtListenerFactory467.snsoft.ft.cli.FtBusiEntry.busiEntry -打开入口界面;478.snsoft.wf.BusiObject(单据类)479.snsoft.busibas.cli.BusiBasOpenListener4710.snsoft.busibas.cli.BusiBasCopyListener4711.snsoft.busibas.serv.BusiBasServCopy4812.snsoft.busibas.cli.BusiBasDialogPane -*4913.snsoft.busibas.BusiBasSysCod

7、ePubl4914.snsoft.ft.clirfq.FtExpQuotationBusi49工具集491.snsoft.awt492.snsoft.util493.snsoft.sql.SqlParser524.snsoft.sql.SqlUtil525.snsoft.nbs. BusiPubl52其他531.精确计算java.math.BigDecimal532.字符串特别操作533.开关定义的取值544.使用业务底层时必须存在的字段545.分摊数据举例546.例外557.打开单据558.同列计算合计值559.对象生成、转换与判断5510.计算列的一种计算方法实现接口DxRowEvalua

8、te55MVC结构1. MVC说明M DataSet ; V Table ; C EventListener2. 环境变量1 默认的环境变量可由底层程序自动传入,由自身的构造函数或Init对应的构造函数init()接收。在表事件、DATASET事件、对话框事件、生成事件的构造函数中,都传递了环境变量。用户可以在环境变量中存放自己的信息,传递到下一个界面。2 自定义环境变量的传入方式1 public class extends DefaultListener implements Initl 方式1:在数据定义的“表事件定义”后面加入参数。如:snsoft.song. ?TBLNAME=ccod

9、e TBLNAME 为自定义的变量,多个变量使用 & 符号分隔只能由自身的构造函数接收。l 方式2:在菜单定义的调用中加入参数。可由自身的构造函数或Init对应的构造函数init()接收。l 执行顺序先运行自身的构造函数再运行Init对应的构造函数init()l ValueMap envParams 通过 this.envParams = envParams; 带入当前类。3 环境变量可使用的参数l 自身构造函数或Init对应的构造函数init()中的取数方法: (String) envParam.getValue()SYSID当前登陆系统号IDWORKSPC当前登陆帐套号NMWORKSPC

10、当前登陆帐套名USERCODE当前登陆用户码USERBCODE当前登陆用户部门码USERNAME当前登陆用户名ISADMIN当前登陆用户是否超级管理员USERGWCODE当前登陆用户岗位码DATASOURCE当前登陆数据库的URLTARGETDATASOURCE当前登陆数据库的URL下面环境变量只在客户端使用ServerURL服务器URLAPPLICATION当前应用程序对象ParentComponent当前窗口的父窗口DTID当前打开的数据定义号DWID当前打开的数据窗口号APP_FRAME当前程序主界面对象TableInfoList当前数据定义信息,在Init接口的init方法中使用。AW

11、Component当前窗口对象4 环境变量中TableInfo操作,得到table。 this.envParams = envParams; TableInfo tableInfoList = (TableInfo) envParams.getValue(TableInfoList);table = BusiPubl.getTableFromTableInfo(tableInfoList, tblname);5 parameter.putValue(InitValue.参数名, 值); /传入默认值3. 系统配置文件Config.propertiesConfig.properties在南北服务

12、程序安装目录/tomcat/snconfig目录下,存放系统的配置参数:Admin=adm,snsoft /超级用户的代码和口令Diag.TraceLevel=2 /设置服务器端调试级别Session.MaxInactiveInterval=7200 /最大客户端不活动时间QQ-Mode=-1 /消息通知选项,-1:禁止,0:客户端主动查询,1:服务器端主动通知DisableQQ=true /是否禁用QQEnableLogs=true /是否记录日志Diag.TraceSqlTime=0 /只用于调试,1:记录所有执行的SQL到日志文件;0:不记录ClusterTableUpdated /只用

13、于调试,1:数据存盘时发出消息通知;2:数据存盘时发出HTTP通知。ClusterHost / ClusterTableUpdated =2MinZipDataSize /服务器向客户机传递压缩数据包的最小尺寸JdbcServerPort=9093 /JDBC服务器端口号RJDBC.Cacheable /JDBC服务器是否使用缓存RJDBC.Closedb /JDBC服务器是否主动关闭物理连接LoginUsersFromHostList /所有存放登陆用户信息的WEB服务器列表ProgessThreadPriority /Progress进程优先级MakeCodeServerURL /分配内码

14、服务器URLMapMakeCodeDataSource.+dataSource /分配内码数据源映射RJdbcSession.MaxInactiveInterval /JDBC服务器最大客户端不活动时间Snsoft5Root /南北5.0版、6.0版服务程序的URLDbPool.MinCount /数据库连接池最小共享连接数DbPool.MaxCount /数据库连接池最大共享连接数DbPool.MaxInactiveInterval /数据库连接池中物理连接的最大不活动时间。DbPool.WarnCount /数据库连接池中物理连接出现警告的最大限额WSInitialSize /WebSta

15、rt方式运行时JVM的初始化内存大小WSMaxSize /WebStart方式运行时JVM的最大内存大小app.Main /WebStart方式运行时main函数所在的包名和类名,包名和类名间用分号分割,默认为“csnsoft_app:snsoft.app.TApplication”LocalCacheMode=1 /是否将数据缓存到客户端(1:启用;0:不启用)。缓存数据存放在“系统盘符:Documents and Settings当前用户Application Datasnsoftdatacache”目录下。Diag._IgnorePWD /登陆时不必录入口令,只用于调试模式App02Pr

16、ops.GenExclusive /生成报表时是否禁止其他人同时生成(1:禁止;0:不禁止)。jdbc.drivers /数据库驱动URLLanguages /指定系统使用的语言LocalHost /指定本地IP地址匹配符,不匹配的认为是互联网地址。ConnectableHost /指定可访问Web服务器的客户机的IP地址,多个IP地址用逗号分割,支持“*”,“_”等匹配符。ID /多台应用服务器做群集时,每一台应用服务器的唯一标识WebReqCharSet /客户机HTML页面使用的字符集数据定义TableInfo、TablesInfo1. 数据定义说明1 snsoft.table.util

17、. TableInfo 封装一个Table相关数据定义的类。2 snsoft.table.util. TablesInfo是TableInfo的集合数据定义的窗口组织类。2. 将TablesInfo 在snsoft.awt.DialogPane 中生成1 创建DialogPane的方法l static public snsoft.awt.DialogPane createDataTableDialog/创建DialogPane的方法。(final ValueMap envParams, /传入环境变量Button exitOptions) /存在的按钮l static public snsof

18、t.awt.DialogPane createDataTableDialog /创建DialogPane的方法。(final ValueMap envParams)2 举例1:通过按钮方式创建snsoft.awt.DialogPanel 按钮触发的方法/取出基本的环境变量,生成一个新的环境变量snsoft.util.HashValueMap params =new snsoft.util.HashValueMap(AppUtil.getBasEnvParameter(envParams);/向环境变量中加入窗口号或窗口描述或数据定义号 params.putValue(DWID,12song_0

19、01);params.putValue(DWDESC,V(128880010|220,T(128880020,128880030);params.putValue(DTID,128880010);/创建DialogPaneDialogPane dialog = TablesInfo.createDataTableDialog(params,null);/创建父窗口java.awt.Frame frame = (java.awt.Frame) envParams.getValue(APP_FRAME) ;/show dialog窗口 if (dialog.showDialog(frame,Son

20、gTest,new Dimension(600,400)!=0) System.out.println(成功打开Dialog!);3 举例2:通过按钮方式创建自定义的DialogPanel snsoft.app.AppWindowDescriptor 窗口描述l 按钮触发的方法java.awt.Frame frame = (java.awt.Frame) envParams.getValue(APP_FRAME);if (songDiaglog = null)/保证多次点击按钮只new一个对象 songDiaglog = new (envParams);/返回值确认为0 if (songDia

21、glog.showDialog(frame, , new Dimension(600, 400) != 0) System.out.println(成功打开Dialog!);l 自定义的DialogPane类public class extends DialogPane Table dialogTable; public (ValueMap envParams) /取出基本的环境变量,生成一个新的环境变量AppUtil.getBasEnvParametersnsoft.util.HashValueMap params =new snsoft.util.HashValueMap(AppUtil.

22、getBasEnvParameter(envParams);/向环境变量中加入窗口号或窗口描述或数据定义号 params.putValue(DWID,12song_001);params.putValue(DWDESC,V(128880010|220,T(128880020,128880030);params.putValue(DTID,128880010);/得到一个AppWindowDescriptorsnsoft.app.AppWindowDescriptor appWindowDescriptor =snsoft.table.util.TablesInfo.createDataTabl

23、e(params);/从Component中取出TabledialogTable = BusiPubl.getTableFromComponentByID(appWindowDescriptor.clientComponent, ccode_top); if (dialogTable = null) return; /向Dialog中加入布局管理器java.awt.BorderLayout() this.setLayout(new java.awt.BorderLayout(); setTitle(appWindowDescriptor.title);/加入标题/加入appWindowDesc

24、riptor对应的Component this.add(appWindowDescriptor.clientComponent , BorderLayout.CENTER);/设置焦点 this.setFirstFocus(appWindowDescriptor.firstFocus);/加入ToolbarPane this.add(new snsoft.awt.ToolbarPane(this), BorderLayout.NORTH); this.insetX = this.insetY = 0;this.exitOptions = new Button okButton, new But

25、ton(确认并关闭), new Button(确认), new Button(取消选择), cancelButton; /加入自定义按钮cancelButton.setLabel(关闭);/设置按钮标题/重载后可定义哪些按钮点击后退出 protected boolean onExit(int exitValue) if (exitValue=1) return false; if (exitValue=4) return false; return true; l 通过tablename从Component中取出Tablesnsoft.busibas.BusiBasPublstatic pub

26、lic Table getTableFromComponentByID(Component c, String tablename)l getTableFromComponentByID实现分析l 通过dataTablename 从TableInfo中取出Tablesnsoft.nbs.BusiPubl extends snsoft.busibas.BusiBasPublstatic public Table getTableFromTableInfoByDataTableName(TableInfo tableInfoList, /从TableInfo中取出TableString dataT

27、ablename)程序说明:if (c instanceof Table) /判断c是否为Table的实例Table tbl = (Table) c; / 强制类型转换 String s0 = tbl.getName(); if ( ( (s0 = null | s0.length() 1) & tablename.equals(tbl.getName() | tablename.equals(s0) return tbl;if (c instanceof Container) /判断c是否为Container的实例 /取出这个个容器存放的控件;Component child = ( (jav

28、a.awt.Container) c).getComponents(); for (int i = 0; i child.length; i+) Table t = getTableFromComponentByID(childi, tablename); /对每一个控件,再次进行递归调用; if (t != null) return t; return null;3. 将TablesInfo 在TablePane中生成1 创建并打开TablePane的方法l snsoft.util.AppUtil.openDataTable(, );2 举例1:在当前界面中加入新的Tablel 按钮触发的方

29、法 snsoft.util.HashValueMap parameter = new snsoft.util.HashValueMap(AppUtil.getBasEnvParameter(envParams); /parameter.putValue(DTID, 128880010) ; parameter.putValue(DWID,12song_001);/parameter.putValue(DWDESC, ) ;/进入后自动刷新 parameter.putValue(AutoRefresh, true) ; java.awt.Frame frame = (java.awt.Frame

30、) envParams.getValue(APP_FRAME) ;/打开DataTableint options=16;snsoft.util.AppUtil.openDataTable(frame, parameter, options);l options 解释bit 1:新窗口,bit 2: 对浏览器:含menubar等bit 4: 对浏览器:post 形式提交bit 8 : 对浏览器: resizeable=nobit 16 : 组织到当前根Tab页中数据集DataSet1. 主要方法snsoft.dx.DataSet1、 publgetRowCount():返回数据集行数,包含新加行

31、且未提交行。2、 _getRowCount():返回数据集行数,不包含新加行且未提交行。3、 getRow():返回当前行号。4、 gotoTopRow():跳到顶行。5、 gotoRow(int row):跳到row行。6、 moveRow(int rows):将当前行移动到某行(向前或向后)。7、 nextRow():将当前行向后移一行。8、 ensureOpened():确保调入数据到DataSet。9、 getColumnCount():返回列数。10、 getColumns():返回所有列对象到数组DataColumn。11、 getColumn(int columnIndex):返

32、回序号为columnIndex列的对象DataColumn。12、 getColumn(String columnName):返回列名为columnName列的对象DataColumn。13、 columnAt(String columnName):返回列名为columnName的列号。14、 getBufferedRowData(int dataIndex):得到缓存行数据。15、 clearBufferedRowData():清除缓存行数据。16、 getValue(int row,int columnIndex):返回第row行第columnIndex列字段的值。17、 getValue

33、(int row,String columnName):返回第row行列名为columnName字段的值。18、 getValue(int columnIndex):取当前行第columnIndex列字段的值。19、 getValue(String columnName):取当前行列名为columnName字段的值。20、 deleteDate(int atRow):?21、 insertRow( int mode ):插入一行,插入类型 mode = 0 : 当前行之前, 1: 当前行之后, 2: 第一行之前, 3: 最后一行之后。22、 insertRowBefore( int row )

34、 :插入第row行。23、 editRow():一行进入编辑状态, setValue 的调用会使一行自动进入编辑状态。24、 setModifyDateColumn(String columnModifyDate):设定修改日期。25、 getEditingRow():返回正在编辑行的行号。26、 postRow():提交当前正在编辑的行。27、 postRow(boolean forSaveChanges)28、 updateLastModifyDate():更新修改日期。29、 isNewRow():判断当前正在编辑的行是否为新加行。30、 deleteRow();删除一行。31、 del

35、eteAllRows():删除所有行。32、 deleteAllRows(int flags):删除所有行。 flags bit 1 : 不更新DataSetSave。33、 emptyAllRows(int flags):清空所有行。flags bit 1 :不更新DataSetSave bit 2 :不更新子表34、 emptyAllRows(boolean emptyDataSetSave):清空所有行。emptyDataSetSave 是否更新DataSetSave 35、 getCountSetValue():返回共设置了多少值。36、 setValue(int columnInde

36、x,Object value): 根据columnIndex修改当前行某列的值37、 setValue(String columnName,Object value): 根据columnName修改当前行某列的值38、 setValues(int rows,int cols,Object values,boolean reevaluate):reevaluate 修改完后对其他计算列需要重计算。39、 saveChanges():数据存盘。40、 saveChanges(final Database _db):对于Database发出存盘。41、 isChanged():当前主数据是否被修改。

37、42、 isAllChanged(boolean ignoreReadonly):当前所有数据是否被修改。return bit 1 : this DataSet changed, 2,4,. : detail changed43、 isDetailsChanged():子数据是否被修改。44、 isRowChanged():当前行是否被修改。45、 isReadOnly():数据集是否只读。46、 setDataSetChanged(boolean changed):设置数据集被修改标志。47、 isDataSetChanged():数据集是否修改完成。48、 setRowChanged(bo

38、olean changed):设置当前行被修改标志。49、 close():关闭DataSet。50、 setSourceFireEvent(Object sourceFireEvent):设置触发事件源。51、 getSourceFireEvent():得到触发事件源。52、 addDataSetListener( DataSetListener listener ):加入监听。53、 addDataSetListener( DataSetListener listener,int before):得到监听。54、 removeDataSetListener( DataSetListener

39、 listener ):去掉监听。55、 addDxRowEvaluate(DxRowEvaluate l):加入计算字段的值。56、 removeDxRowEvaluate(DxRowEvaluate l):去掉计算。57、 getRowValues():得到当前行所有值。58、 toRowValues(ValueMap from):得到所有字段名。59、 getRowValues(int row):得到某行的所有值。60、 getRowValues(int row,int colIndex):得到某行某几列的值。61、 loadRowValues(int rowCount,int star

40、tRow):得到某几行某几列的值。62、 getDatabase():得到Database。63、 inLoading():判断是否在打开或装载状态。64、 loadReadDataSet(DataSetEvent e):装载原始数据 sql paramGetter options bit 1 : 不需要表名, bit 2 : 不需要表列 , bit 4 : 不需要排序的列 return 装载的数据65、 setColumnFlags(String column,int f,boolean set):设置列的状态。66、 setDefaultValue(int columnIndex,Obje

41、ct value):设置默认值。67、 getDefaultValues():得到默认值。68、 getTableName():等到表名。69、 isRefreshable():是否可以刷新。70、 refresh():刷新。71、 refresh( snsoft.util.ValueMap paramGetter ):根据刷新条件刷新。72、 getDetails():得到子表的dataSet。73、 getDetailForTableName(String tableName):根据子表表名得到对于dataSet。74、 addDetail(DataSet detail):增加子表data

42、Set75、 addDetail(DataSet detail):移除子表dataSet76、 removeAllDetails():移除所有子表dataSet77、 refreshDetails():刷新子表。78、 getMaster():得到主表dataSet。79、 getSortColumns():得到排序列。80、 getKeyColumns():得到主键列。81、 buildSortColumns(int src):设置排序列。82、 setSort(int sortColumns):设置排序列。83、 searchRow(Object keyValue):跟据排序关键字查找84

43、、 getDataSetSave():得到dataSetSave。85、 setName(String name):设置名称。86、 addColumns(DataColumn columns):增加列。87、 evalueAllRows():每行调用重计算。88、 setEnvParams(ValueMap envParams):设置环境变量。89、 getEnvParams():得到环境变量。90、 setSaveListenerClassName(String l):加入存盘监听。91、 getSaveListenerClassName():得到存盘监听的名字。92、 addSaveLi

44、stenerClassName(String nm)增加存盘监听。2. ReadDataSet1、 说明:ReadDataSet是只供查询用的DataSet,它的数据不能修改和保存。与JAVA的ResultSet类似,ReadDataSet没有用于存放数据的二维数组,通过它提供的nextRow()方法,可以循环取所有行的数据。它的数据不是一次性取到内存中,而是每调用一次nextRow()方法后将这一行数据读到内存中,所以比较节省内存,适用于能逐行处理数据和数据量大的情况。2、 申请ReadDataSet:db = newDefaultDatabase()rds = db.getReadDataSet(select * from acode)rds.close()需要注意ReadDataSet使用完后必须调用close(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号