N7程序基础开发学习手册.doc_第1页
N7程序基础开发学习手册.doc_第2页
N7程序基础开发学习手册.doc_第3页
N7程序基础开发学习手册.doc_第4页
N7程序基础开发学习手册.doc_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基础开发学习手册MVC结构31.MVC说明32.环境变量33.系统配置文件Cperties4数据定义TableInfo、TablesInfo51.数据定义说明52.将TablesInfo 在snsoft.awt.DialogPane 中生成53.将TablesInfo 在TablePane中生成8数据集DataSet81.主要方法snsoft.dx.DataSet82.ReadDataSet113.StorageDataSet114.ArrayDataSet115.FilterDataSet126.TableDataSet12表界面Table121.主要方法snsoft.table.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.UpdateResolver235.批量更新/插入操作的对象snsoft.dx.UpdateData24事务的处理241.事务的含义:一批处理一次完成,无法完成则回滚242.Database事务的实现24B/S结构程序处理251.程序放置位置客户端还是服务端252.远程调用时参数的传递253.交互方式254.远程调用两种方法的比较26存盘事件DataSetSave271.存盘监听说明:272.DataSetSave的主要方法273.存盘事件的监听DataSetSaveListener284.存盘事件监听的定义方式28对话框DialogPane281.对话框snsoft.awt.DialogPane的主要方法282.对话框常用的控件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 (所有辅助输入器需要实现的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.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.BusiBasSysCodePubl4914.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.计算列的一种计算方法实现接口DxRowEvaluate55MVC结构1. MVC说明M DataSet ; V Table ; C EventListener2. 环境变量1 默认的环境变量可由底层程序自动传入,由自身的构造函数或Init对应的构造函数init()接收。在表事件、DATASET事件、对话框事件、生成事件的构造函数中,都传递了环境变量。用户可以在环境变量中存放自己的信息,传递到下一个界面。2 自定义环境变量的传入方式1 public class extends DefaultListener implements Initl 方式1:在数据定义的“表事件定义”后面加入参数。如:snsoft.song. ?TBLNAME=ccode TBLNAME 为自定义的变量,多个变量使用 & 符号分隔只能由自身的构造函数接收。l 方式2:在菜单定义的调用中加入参数。可由自身的构造函数或Init对应的构造函数init()接收。l 执行顺序先运行自身的构造函数再运行Init对应的构造函数init()l ValueMap envParams 通过 this.envParams = envParams; 带入当前类。3 环境变量可使用的参数l 自身构造函数或Init对应的构造函数init()中的取数方法: (String) envParam.getValue()SYSID当前登陆系统号IDWORKSPC当前登陆帐套号NMWORKSPC 当前登陆帐套名USERCODE当前登陆用户码USERBCODE当前登陆用户部门码USERNAME当前登陆用户名ISADMIN当前登陆用户是否超级管理员USERGWCODE当前登陆用户岗位码DATASOURCE当前登陆数据库的URLTARGETDATASOURCE当前登陆数据库的URL下面环境变量只在客户端使用ServerURL服务器URLAPPLICATION当前应用程序对象ParentComponent当前窗口的父窗口DTID当前打开的数据定义号DWID当前打开的数据窗口号APP_FRAME当前程序主界面对象TableInfoList当前数据定义信息,在Init接口的init方法中使用。AWComponent当前窗口对象4 环境变量中TableInfo操作,得到table。 this.envParams = envParams; TableInfo tableInfoList = (TableInfo) envParams.getValue(TableInfoList);table = BusiPubl.getTableFromTableInfo(tableInfoList, tblname);5 parameter.putValue(InitValue.参数名, 值); /传入默认值3. 系统配置文件CpertiesCperties在南北服务程序安装目录/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 /只用于调试,1:数据存盘时发出消息通知;2:数据存盘时发出HTTP通知。ClusterHost / ClusterTableUpdated =2MinZipDataSize /服务器向客户机传递压缩数据包的最小尺寸JdbcServerPort=9093 /JDBC服务器端口号RJDBC.Cacheable /JDBC服务器是否使用缓存RJDBC.Closedb /JDBC服务器是否主动关闭物理连接LoginUsersFromHostList /所有存放登陆用户信息的WEB服务器列表ProgessThreadPriority /Progress进程优先级MakeCodeServerURL /分配内码服务器URLMapMakeCodeDataSource.+dataSource /分配内码数据源映射RJdbcSession.MaxInactiveInterval /JDBC服务器最大客户端不活动时间Snsoft5Root /南北5.0版、6.0版服务程序的URLDbPool.MinCount /数据库连接池最小共享连接数DbPool.MaxCount /数据库连接池最大共享连接数DbPool.MaxInactiveInterval /数据库连接池中物理连接的最大不活动时间。DbPool.WarnCount /数据库连接池中物理连接出现警告的最大限额WSInitialSize /WebStart方式运行时JVM的初始化内存大小WSMaxSize /WebStart方式运行时JVM的最大内存大小app.Main /WebStart方式运行时main函数所在的包名和类名,包名和类名间用分号分割,默认为“csnsoft_app:snsoft.app.TApplication”LocalCacheMode=1 /是否将数据缓存到客户端(1:启用;0:不启用)。缓存数据存放在“系统盘符:Documents and Settings当前用户Application Datasnsoftdatacache”目录下。Diag._IgnorePWD /登陆时不必录入口令,只用于调试模式App02Props.GenExclusive /生成报表时是否禁止其他人同时生成(1:禁止;0:不禁止)。jdbc.drivers /数据库驱动URLLanguages /指定系统使用的语言LocalHost /指定本地IP地址匹配符,不匹配的认为是互联网地址。ConnectableHost /指定可访问Web服务器的客户机的IP地址,多个IP地址用逗号分割,支持“*”,“_”等匹配符。ID /多台应用服务器做群集时,每一台应用服务器的唯一标识WebReqCharSet /客户机HTML页面使用的字符集数据定义TableInfo、TablesInfo1. 数据定义说明1 snsoft.table.util. 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 snsoft.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_001);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,SongTest,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 (songDiaglog.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.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.createDataTable(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);/加入标题/加入appWindowDescriptor对应的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 Button(确认并关闭), 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 public 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 dataTablename)程序说明: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 = ( (java.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 按钮触发的方法 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) 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():返回数据集行数,包含新加行且未提交行。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):返回序号为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(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 ) :插入第row行。23、 editRow():一行进入编辑状态, setValue 的调用会使一行自动进入编辑状态。24、 setModifyDateColumn(String columnModifyDate):设定修改日期。25、 getEditingRow():返回正在编辑行的行号。26、 postRow():提交当前正在编辑的行。27、 postRow(boolean forSaveChanges)28、 updateLastModifyDate():更新修改日期。29、 isNewRow():判断当前正在编辑的行是否为新加行。30、 deleteRow();删除一行。31、 deleteAllRows():删除所有行。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 columnIndex,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():当前主数据是否被修改。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(boolean changed):设置当前行被修改标志。49、 close():关闭DataSet。50、 setSourceFireEvent(Object sourceFireEvent):设置触发事件源。51、 getSourceFireEvent():得到触发事件源。52、 addDataSetListener( DataSetListener listener ):加入监听。53、 addDataSetListener( DataSetListener listener,int before):得到监听。54、 removeDataSetListener( DataSetListener 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 startRow):得到某几行某几列的值。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,Object 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):增加子表dataSet75、 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、 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、 addSaveListenerClassName(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()方法关闭。3、 ReadDataSet是DataSet的父类,DataSet是StorageDataSet、ArrayDataSet、FilterDataSet基类,所以下面介绍的方法在StorageDataSet、ArrayDataSet、FilterDataSet中也可以使用。4、 ClientProperties提供了在DataSet中存取自定义信息的方法,每个DataSet都有一个ClientProperties,在一个方法中将信息存放在DataSet中,以后在任何地方都可以从这个DataSet中取出这个信息。dataSet.putClientProperty(AAA,BBB)3. StorageDataSet1、 说明:StorageDataSet是可存储的DataSet。StorageDataSet内部有存放数据的二维数组,打开后将所有数据全部装载到二维数组中。4. ArrayDataSet1、 说明:主要用于在服务器端和客户端传递数据,是唯一实现java.io.Serializable流化接口的DataSet。java.io.Serializable是JAVA提供的接口,实现后可以通过字节方式ArrayDataSet提供了数据压缩的方法。5. FilterDataSet6. TableDataSet表界面Table1. 主要方法snsoft.table.Table1 addColumn(String cellId,String caption):增加一列。2 addColumn(TableColumn c)3 addIconButton(String text,String command):增加按钮。放在init(ValueMap envParams)里面:打开后出现。放在tableInitial(TableEvent e)里面:刷新后出现。4 addPopupMenuItem(String label,String command):增加菜单。5 addTableListener( TableListener listener ):加入监听。6 addToolButton(String command,String url,String tipText):加入工具栏按钮。7 closing():关闭8 deleteRow():删除当前行。9 doSaveChanges():保存变化。10 getButton(String command):得到按钮。11 getButtonPane():得到按钮pane12 getCellValue(int row,int col):得到单元值。13 getColSelected():得到选中列的编号。14 getColumn(int index):得到index列号对应的Column。15 getColumn(String cellId):得到cellId列名对应的Column。16 getColumnCount():得到列个数。17 getColumnForCaption(String caption):得到caption标题对应的Column。18 getColumnForDataColumnName(String columnName):根据columnName数据列名查找列19 getDataSet():得到dataSet。20 getDetailTables():得到子表table。21 getDocumentTitle():得到标题。22 getDWID():得到窗口界面号。23 getEnvParams():得到环境变量。24 getFocusedTable():得到焦点table。25 getQueryParam():得到查询对话框。DialogPane dialogPane = (DialogPane) table.getQueryParam(); if (dialogPane!= null) dialogPane.addDialogPaneListener(new dialogPaneListener(); 26 getQueryParamValue(String name):得到name的查询参数。27 getRowCount():得到行数。28 getRwFlags():得到表的限制标志。29 getSelectedColumn():得到选中列。30 getSelectedColumnAidInputer():得到选中列的辅助输入框。31 getTableColumns():得到所有列。32 getTableListener(Class listenerClass):得到监听。33 getTitle():得到标题。34 getWidth():得到宽度。35 getRowsMarkSelected():得到所有选中列的行号,int selectedRows。36 indexOfColumn(TableColumn c):通过TableColumn查找列号。37 indexOfColumnForCaption(String caption) 通过Caption查找列号。38 isDeleteable():是否可删除。39 isEditLocked():是否编辑禁止。40 removeAllColumn():删除所有列。41 removeAllIconButtons():删除所有按钮。42 removeColumn(int j):删除某列。43 removeTableListener( TableListener listener ):去掉监听。44 saveChanges():存盘。45 scrollToVisible():滚动条46 setColSelected(int col):设置选中列。47 setDataSet(DataSet dataSet):关联DataSet。48 setDWID(int dwid):设置窗口号。49 setEnvParams(ValueMap envParams):设置环境变量。50 setHelpURL(String helpURL):设置URL51 setRwFlags(int rwFlags,boolean set):设置状态。RW_READO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论