2 Studio相关
2.1 显示格式
·去除数据显示列表上的按钮
document.all.item('对应按钮的id').style.display="none";
AddBtn为添加按钮,FlowStart启动按钮,ModifyBtn修改按钮,DeleteBtn删除按钮,BrowesBtn浏览按钮,SearchBtn查询按钮,ResetBtn重置按钮,MyCondition选择设置条件按钮,BtPrint导出明细按钮,WhereSqlShow当前显示内容,Table1全部隐藏,TablePaths应用名称隐藏。
·左边树右边表格的显示方式如何设置
左边树对应表的设置,递归设置,父子段为表中表示上级的字段,子字段为表中表示本级的字段,显示字段为要显示的字段;显示格式,维护表选择自己,维护字段为本级字段,关联字段为表中表示上级的字段。
右边内容表的设置,显示格式,维护表明为左边树状表,维护字段树状表的该级字段,关联字段为表中和树状表中关联的字段。
for(var i=0;i<DataGridObj.ClientRows.length;i++)
{
var str = DataGridObj.ClientRows[i].cells[6].innerText;
if(str=='急件')
{
DataGridObj.ClientRows[i].style.background = '#FFFF00' ;
}
if(str=='加急件')
{
DataGridObj.ClientRows[i].style.background = '#FF0000' ;
}
}
·关于自定义UNIFORM的导出明细按钮(JAVA)。
思路:
1.在UISCRIPT中接管导出明细按钮的ONCLICK事件,打开一个表单
2.在表单的PAGELOAD事件写导出的JAVA代码
1.UISCRIPT
var sql1 = "";
var tmpEvent = String(Uniform.ExportBtnObj.onclick);
if ( tmpEvent.indexOf("&sql1=")>-1 )
{
sql1 = tmpEvent.substr( tmpEvent.indexOf("&sql1=")+6,tmpEvent.length );
if ( sql1.indexOf("&")>-1 )
{
sql1 = sql1.substr(0,sql1.indexOf("&"))
}
//alert(sql1+'/n/n'+tmpEvent);
sql1 = "&sql1="+sql1;
}
Uniform.ExportBtnObj.onclick = function()
{
window.open('localizer.jsp?MasterTable=会计科目&UseType=Report&guid=ODBCNOGUID&FormName=导出'+sql1,'','directories=0,location=0,toolbar=0,status=0,scrollbars=0,menubar=0,resizable=0,channelmode=0,width=0,height=0,left=0,top=0');
}
2.表单的JAVA代码
String sql1 = This.Parameters.get("sql1");
if ( sql1!=null && !sql1.equals("") )
sql1 = " and " + sql1;
String tabname = This.Parameters.get("MasterTable");
This.response.setContentType("text/plain");
This.response.setHeader("Content-disposition","attachment; filename="+java.net.URLEncoder.encode(tabname,"UTF-8")+".txt");
com.egosystems.dbcore.Parm_Struct pstcode = new com.egosystems.dbcore.Parm_Struct( "tcode", tabname );
com.egosystems.dbcore.Parm_Struct psuid = new com.egosystems.dbcore.Parm_Struct( "uid", This.user.getUserName() );
com.egosystems.dbcore.Parm_Struct pswhereSql = new com.egosystems.dbcore.Parm_Struct( "whereSql", sql1 );
com.egosystems.dbcore.Parm_Struct psorderby = new com.egosystems.dbcore.Parm_Struct( "orderby", " 1 desc " );
com.egosystems.dbcore.Parm_Struct psCurrentpage = new com.egosystems.dbcore.Parm_Struct( "currentpage", 1);
com.egosystems.dbcore.Parm_Struct pspagesize = new com.egosystems.dbcore.Parm_Struct( "pagesize", 9999);
com.egosystems.dbcore.Parm_Struct pspagecount = new com.egosystems.dbcore.Parm_Struct( "pagecount", 0 );
pspagecount.setDirection(com.egosystems.dbcore.ParameterDirection.Output,java.sql.Types.VARCHAR);
com.egosystems.dbcore.Parm_Struct psrecordcount = new com.egosystems.dbcore.Parm_Struct( "recordcount", 0 );
psrecordcount.setDirection(com.egosystems.dbcore.ParameterDirection.Output,java.sql.Types.VARCHAR);
List<com.egosystems.dbcore.Parm_Struct> ParamSp = new ArrayList<com.egosystems.dbcore.Parm_Struct>();
ParamSp.add(pstcode);
ParamSp.add(psuid);
ParamSp.add(pswhereSql);
ParamSp.add(psCurrentpage);
ParamSp.add(pspagesize);
ParamSp.add(psorderby);
ParamSp.add(pspagecount);
ParamSp.add(psrecordcount);
This.dbgr.setResultNum(2);
List<java.sql.ResultSet> ResultDs = This.dbgr.GetResultSets( "sp_getdata",com.egosystems.dbcore.CommandType.PROC,ParamSp);
java.lang.StringBuilder sb = new java.lang.StringBuilder();
com.egosystems.dbcore.DataTable ResultDt2 = new com.egosystems.dbcore.DataTable(ResultDs.get(1));
for ( int i = 0; i < ResultDt2.Rows.length; i++ )
{
for ( int j = 0; j < ResultDt2.Rows[i].Items.length; j ++ )
{
sb.append(ResultDt2.Rows[i].Items[j].ToString()+",");
}
sb.append("/r/n");
}
//System.out.println(sb.toString());
This.Out.clear();
This.Out.write(sb.toString());
This.Out.close();
·关于自定义UNIFORM的右键菜单。
在UNIFORM中有三个右键菜单
1.空白处的刷新菜单
2.业务表记录行中的右键菜单(修改,浏览等)
3.流程启动按钮的点击菜单(如启动报销流程)
4.JAVA版本的维护表的记录行的右键菜单
以上的菜单由tmpArray数组维护和行级中TR中的funcmenuParms属性维护数据
tmpArray[0] 为业务表的右键菜单
tmpArray[1] 为流程启动按钮的菜单
tmpArray[2] 为刷新菜单
tmpArray[9] 为JAVA版本下的维护表的右键菜单
例:
tmpArray[0] = [["处理过程>>>","fnOpenModal('WorkFlow/prolist.jsp?{guid}', 800, 600, 'scroll:1;');return false;"],["修改","fnOpenModal('localizer.jsp?MasterTable=采购计划{guid}$UseType=Modify', 800, 600, 'scroll:1;');return false;"],["删除","DelMouseRecord('{guid}')"],["浏览","fnOpenModal('localizer.jsp?MasterTable=采购计划{guid}$UseType=View$NoShowMoreOP=yes', 800, 600, 'scroll:1;');return false;"],["复制","fnOpenModal('localizer.jsp?MasterTable=采购计划{CopyGUID}$UseType=Add', 800, 600, 'scroll:1;');return false;"]];
funcmenuParms 为业务表数据行的TR的扩展属性:
funcmenuParms="0{guid}:$guid=6cb56c7b-4dbb-4049-b542-65e726354c04;{guid}:$guid=6cb56c7b-4dbb-4049-b542-65e726354c04;{guid}:$guid=6cb56c7b-4dbb-4049-b542-65e726354c04;{guid}:$guid=6cb56c7b-4dbb-4049-b542-65e726354c04;{CopyGUID}:$CopyGUID=6cb56c7b-4dbb-4049-b542-65e726354c04;{isenabled}:1,1,0,1,0;"
0表示调用tmpArray[0]
{guid}:表示在tmpArray[0]菜单项的第二个值中的变量需替换的值
{isenabled}:表示这几个菜单项目哪个可视哪个不可视
根据以上标准,需要添加菜单的话,则需要变动tmpArray的值和funcmenuParms 的值
代码(以业务表添加自定义菜单为例):
//向tmpArray[0]追加几个数组值
tmpArray[0].push(new Array("自定义1","alert('自定义1{guid}');"));
tmpArray[0].push(new Array("自定义2","alert('自定义2{guid}');"));
for ( var i = 0; i < DataGridObj.ClientRows.length; i++ )
{
var tmpRow = DataGridObj.ClientRows[i];
var str = tmpRow.getAttribute('funcmenuParms');
var StrArr = str.split(';');
var resetStr = "";
for ( var j = 0; j < StrArr.length-1; j ++ )
{
var tmpstr = StrArr[j];
if ( j == StrArr.length - 2 )
{
//向isenabled添加两个标志菜单可用
resetStr += ''+tmpstr+',1,1;';
}
else if ( j == StrArr.length - 3 )
{
//为菜单参数编值
resetStr += tmpstr + ';{guid}:'+tmpRow.getAttribute('GUID')+';{guid}:'+tmpRow.getAttribute('GUID')+';';
}
else
{
resetStr += tmpstr + ';';
}
}
alert(resetStr);
tmpRow.setAttribute('funcmenuParms',resetStr);
}
·明细表的显示格式可以引用主业务表。
关联出来的业务表如果有明细的话,不显示出现明细,即不会出现手形的指针,但其它的功能都在,如果有需要可以到UISCRIPT里面编写手形
DataGridObj.Cursor = “hand”;
DataGridObj.hasDetail = true;
涉及的字段:SYS_DETIALTABLE.distype=’maingrid’
·显示格式中可以对浏览表单是否显示做配置。
设置或取消主表显示格式的显示主表详细信息,明细的PAGE有响应
只有一个明细的时候,页面应该没有PAGE
配置字段为sys_spec.DISVIEWFORM
·更改uniform中列标题(Uiscript)
//找到需要更新的列
var tda = DataGridObj.Header.cells[6].all(0).rows[0].cells[0];
var tmpStr = tda.innerHTML;
tmpStr = tmpStr.replace('附件','
正文附件');
tda.innerHTML = tmpStr;
·如何Uniform一条数据可以点击,打开新的页面(JAVASCRIPT)
点击页面上的记录打开新的页面
1.给表建视图。
eg:
create view a_SANXIAOMING
as
select '<a href=javascriptnOpenModal(''localizer.aspx?MasterTable=SANXIAOMING$guid='+guid+'$UseType=Modify'',800,600)>'+a+'</a>' as re,* from SANXIAOMING
2.表—>操作—>显示格式—>显示内容
在查询语句中写上视图名称
在显示字段中添加视图中起的别名
·如何Uniform一条数据下显示图片(JAVASCRIPT)
在表单显示格式中UISCRIPT中写:
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
var j=1;
for(var i =0;i< DataGridObj.ClientRows.length;i++)
{
var guid = DataGridObj.ClientRows.getAttribute('GUID');
DataGridObj.setBBForm("报刊亭机构图","U浏览","450",j,guid,"View")
j = j+2;
}
·如何显示格式中UIScript自定义处理脚本(JAVASCRIPT)
将业务表的显示格式->显示内容->附加操作设置成“自定义”后,可以通过扩展UIScript的方法扩展数据列表上字段的超链接
1.方法一:
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
DataGridObj.CustomExecute = function(guid,tablename){alert(guid);alert(tablename);};
2.方法二:
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
function CustomExecute(guid,tablename)//显示GUID出来
{
alert(guid);
alert(tablename);
}
DataGridObj.CustomExecute = CustomExecute;
另外,如果要取当前点击的超链接的文本,可以用js的event.srcElement.innerHTML方法取到被点击对象的文本。如果要取同行的其他列的值,利用js对Dom对象操作即可。如:event.srcElement.parentElement.parentElement.previousSibling.innerHTML,取到前一个td的内容,当然里面还会有一些Div包围着
·如何显示格式中UIScript隐藏按钮(JAVASCRIPT)
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
try
{
document.all.item('AddBtn').style.display="none"; //添加按钮隐藏
document.all.item('FlowStart').style.display="none"; //启动按钮隐藏
document.all.item('ModifyBtn').style.display="none"; //修改按钮隐藏
document.all.item('DeleteBtn').style.display="none"; //删除按钮隐藏
document.all.item('BrowesBtn').style.display="none"; //浏览按钮隐藏
document.all.item('SearchBtn').style.display="none"; //查询按钮隐藏
document.all.item('ResetBtn').style.display="none"; //重置按钮隐藏
document.all.item('MyCondition').style.display="none"; //选择设置条件按钮隐藏
document.all.item('BtPrint').style.display="none"; //导出明细按钮隐藏
document.all.item('WhereSqlShow').style.display="none"; //当前显示内容隐藏
document.all.item('Table1').style.display="none"; //全部隐藏,一片空白
document.all.item('TablePaths').style.display="none"; //应用名称隐藏
}
catch(e){}
·如何显示格式中UIScript添加按钮(JAVASCRIPT)
var InputSQL = '<input type="button" id="checkall" name="checkall" value="全选未审" οnclick="check(gridobj);">';
Uniform.AddBtnObj.insertAdjacentHTML('BeforeBegin',InputSQL);
Uniform.TablePathsObj.insertAdjacentHTML('BeforeBegin',InputSQL);
·如何显示格式中UIScript浏览并操作数据页面修改(JAVASCRIPT)
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
//找到需要更新的列
var tda = DataGridObj.Header.cells[6].all(0).rows[0].cells[0]; //剥皮进去查找
alert(tda.outerHTML); //输出HTML代码
var tmpStr = tda.innerHTML; //读出HTML代码
tmpStr = tmpStr.replace('附件','正文附件''); //替换显示文字(因为附件显示,显示格式中无法修改)
tda.innerHTML = tmpStr;
·如何显示格式中UIScript更改uniform中列标题(JAVASCRIPT)
//基础代码结构
var DataGridObj = new DataGrid(DataGrid1);
DataGridObj.Refresh();
//找到需要更新的列
var tda = DataGridObj.Header.cells[6].all(0).rows[0].cells[0]; //剥皮进去查找
alert(tda.outerHTML); //输出HTML代码
var tmpStr = tda.innerHTML; //读出HTML代码
tmpStr = tmpStr.replace('附件','正文附件''); //替换显示文字(因为附件显示,显示格式中无法修改)
tda.innerHTML = tmpStr;
·如何对数据列表(uniform)的选中数据进行处理
在业务表单的查询表单上可以用如下代码取得选中的数据行的guid串。(本段代码在实现批量打印时用得着,此处不给出uniform批量打印功能的完整实现)
//DeleteBtn是uniform上的删除按钮
//平台在做删除功能时将当前选中的数据行的guid串娬给DeleteBtn的guid属性
var delBtn = parent.innerMain.document.all.item('DeleteBtn');
var guidStr = Page.getProperty(delBtn,'GUID');
alert(guidStr);
只能到当前页上选中的数据、翻页之后由于页面刷新DeleteBtn的guid属性值也被清空。
·如何隐藏Uniform显示最前面的复选框
Uniform上有时候想要自定义一些界面显示,例如,隐藏某些列,自定义双击事件等等。
如果要隐藏的不是第一列,可直接在显示格式中讲此列的宽度设置为"-2"
如果要隐藏的是第一列,即包含复选框的列,需通过显示格式里的UIScript来实现
var DataGridObj = new DataGrid(DataGrid1);
//遍历第一列的单元格
for (var i = 0; i < DataGridObj.Obj.rows.length; i++ )
{
//隐藏最前面的每行第一个单元格
DataGridObj.Obj.rows[i].cells[0].style.display = "none";
//自定义行的双击事件,此处为屏蔽原来的双击打开效果
DataGridObj.Obj.rows[i].ondblclick = function(){}
}
DataGridObj.Refresh();
·直接在Uniform上显示对应的表单的明细表单
function CustomExecute(guid,tablename)//显示GUID出来
{
var j=1;
for(var i =0;i< DataGridObj.ClientRows.length;i++)
{
var guid = DataGridObj.ClientRows[i].getAttribute('GUID');
DataGridObj.setBBForm("T_SYS_MEMBERINFO","PVIEW","450",j,guid,"View")
j = j+2;
}
}
DataGridObj.CustomExecute = CustomExecute;
·Uniform不显示一列数据
var Rows=DataGridObj.ClientRows.length;
for(var i=0;i<Rows;i++)
{DataGridObj.ClientRows[i].cells[1].style.display='none'; }
·获取Uniform当前点击的指定列的数据
var i=event.srcElement.parentElement.parentElement.parentElement.rowIndex;
var rowObj= DataGridObj.Obj.rows[i];
var date=rowObj.cells[4].innerText;
·2.2 关联表设置
·关联显示的表不显示。
关联表是否勾选显示。关联表的表单权限是否设置。
·系统附件存放方式,如何设置
系统支持两种附件上传模式,数据库存放附件和Web文件系统存放附件。数据库存放附件可使用附件分离。
选择对应的数据表,右键选中<操作>,<关联表设置>,在附件存储可选择附件存放方式。
·数据列显示页面,报错“‘)’附近有语法错误”
检查关联表的设置,是否存在关联字段。显示内容视图是否有错误。
·数据接口设置关联表时,关联表能否设置显示格式
不能
·2.3 表单权限
·为什么导入应用后,权限要重新分配,才能看到页面呢
A系统的模块到B系统,2者人员组织架可能完全不同,权限当然要重设
·数据安全与表单权限 和 sys_data_pru 是怎样的表结构?
数据安全与表单权限要在sys_data_pru表中得到相关guid
·流程管理->流程追踪,点任务时,显示“没有操作权限”,这个是什么问题造成的?
权限设置问题,或者是表单没有上传。
·2.4 数据安全
·数据安全设置根据关联表中的某个字段来判断。
需要在写数据库的函数,然后在数据安全中调用函数来判断。
·表单数据安全设置中,如何设置部门只能看部门人员填报的数据,也就是登录人只能看到自己所在部门的数据
数据安全设置复合模式,在表单数据相关里面设置。
·在数据安全内,每个表都写了同样的一段语句,能不能把这段语句写在一个地方然后统一调用,也便于以后的修改。
在数据库里写一个公共函数,每个地方都调用这个函数。
·数据安全里面表单数据相关不同的项目之前是什么关系,是and还是or?
or。
·怎样让人可以浏览,但不能删除数据
数据安全设置,设成只读共享。
·流程数据进行修改
在对应表的数据安全里面设置
·2.5 应用主页
·添加数据的应用主页,如何操作。
对应模块的应用主页中添加菜单。
·用数据接口做明细表设计,并在应用主页挂接,但就是不能显示,权限里面只有一个表单权限,没有数据权根。是不是数据接口只能做表单明细,不能直接生成明细?
数据接口只能做报表,但可以直接显示。
·2.6 其他
·映射表跟业务表的区别(平台)
1.映射表没有自己的字段数据,用的是业务表的。
2.业务表可以做流程而映射表不行。
3.业务表做关联表可以级联添加、级联删除、级联更新;映射表不能级联删除和级联更新。
4.映射表做关联后,打开表单设计器,右边表单集合看不到关联表(必须它相对应的业务表也关联到那张表)
5.映射表不能做上传附件,业务表可以。
·关于平台生成更新包工具和自动更新的说明。
该功能用与生成系统升级资源包,并通过工具打包生成自动升级包,以进行开发出的系统的升级工作
1.UPD.exe
生成数据库的更新包(SQL语句)
2.ES2007UPGRADE.exe
真正的更新程序,该程序存在与更新文件夹内,他与update.ini、install.ini和
更新文件夹并存,
并由MakeUpgrade.exe压缩整个文件夹成EXE自解压文件
3.MakeUpgrade.exe
打包工具
作用:将更新资源文件夹打包成EXE自解压文件
更新文件夹需要有ES2007UPGRADE.exe、更新文件、update.ini、install.ini
4.install.ini
安装配置文件
分两个版本
只能写入与数据库相关的信息,此功能用与更新用户的数据库
ENABELD=false为无效,则读取更新机的注册表信息
ENABELD=true则优先考虑之
5.update.ini更新的配置文件,其由UPD.exe自动生成,可后期自已配置其它更新
使用方法:
1.UPD.exe、mainframe.pbd
更新至 Designer 文件夹,运行studio
2.在studio的工具菜单下运行生成更新包
3.选择需要更新的模块,生成更新包,更新包以GUID的文件夹形式存放在Designer/UPD 文件夹下
4.COPY 最新生成的更新包里的更新文件夹和update.ini 到一新建目录(如 更新ABC)
5.COPY ES2007UPGRADE.exe 到新建目录(如 更新ABC)
6.如需预设更新数据库信息 COPY install.ini文件到新建目录(如 更新ABC),并编辑它
7.运行MakeUpgrade.exe
打包文件名:任起,例如: ES2007.20090714 该名为生成的自解压更新包的文件名
目的地目录:为生成的更新包文件的存放地,任选
需压缩目录:为更新包的目录(如 更新ABC)
8.生成更新包
更新包生成后,为一自解压EXE文件(如 ES2007.20090714.exe )
点击运行测试
·ES2007平台的小技巧。
1.表单权限有复制权限,可以把某一条数据复制成新数据
2.UNIFORM数据展现有省略号的配置
3.UNIFORM无关联表时可双击打开浏览表单
4.UNIFORM具有固定列功能,UISCRIPT支持
5.UNIFORM可配置某一列作为浏览、修改的表单链接
6.表单控件如有runat="client"的功能,如是,则不进行控件化处理,只认为是前台HTML控件
7.平台附件有缓存机制,且具备分库功能
8.在数据安全有提交人相关时,sys_data_pru必须要有该表所有数据的GUID
9.t_sys_count是为表单sysIndex自动编号功能提交的
10.studio 搜索时可以按拼音查询
11.平台的所有操作DDL语句有录制,可在系统数据模块中找到
12.平台有关联的级联更新和级联删除功能,注:是无级级联,包括明细表的级联
13.明细表可以‘垂直’或‘水平’显示,且可设定比例
14.表单的非空与提交按钮对应,可设定在保存时可为空,在提交时不为空等
·平台支持全球唯一码吗?
支持。平台表中是包含GUID列的。
平台映射表如何使用
映射表没有自己的字段,使用的字段是映射对象的。不能建立流程。不可级联删除和级联更新。表单设计器中的关联表和映射对象的相同。不能上传附件。针对同样的表,系统需要不同的表现方式时可以使用映射表。
·数据接口与业务表有什么区别。
业务表只是记录数据的表,数据接口是用来使用自己写好的对应的视图,存储过程的。在业务表上可建立表单,报表,查询。数据接口只可建立报表,查询。
·数据接口关联表显示
新建映射表,设置映射表的显示内容,映射目标做关联。
·一个存储过程参数和一个控件绑定后,如果控件不填值,传进去是一个带空格的值 ' ',怎么让其传入空字符串''。
可在存储过程里将参数默认值设为null。
·首页的日历项,代办事宜,未读邮件等这些东西在哪里设置,如果我不想在首页出现未读邮件,怎么设置
设计器,工具,系统UI设计。
·在视图里加了新字段,但是在对一个查询按钮做检索条件的时候,这个视图却没有显示这个字段。
到数据借口里找到这个视图,右键选择‘设计’,点击自动更新。
·有什么办法让databrowse从存储过程的里读出的列名 变成中文?不要在存储过程里改。
数据接口的显示字段,设计里的显示字段。