起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 34383|回复: 46

[分享] 自己整理项目遇到的问题及相关解决方法(实时更新)

  [复制链接]

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
发表于 2012-11-19 17:12:03 | 显示全部楼层 |阅读模式
本帖最后由 XiaoQLuo 于 2012-11-21 09:50 编辑

以下都是自己前段时间总结的一些问题及解决方法,现在贴出来,希望对新手能有帮助。很多图片不能放进来,只能尽量用文字代替。希望管理员加精,呵呵。
1#***ksql 中的not in
不能直接写NOT IN ,可以通过NOT(** in * *)
2#***windowDialog传参
A  可以通过 onSend事件的返回值  return 1111可以在 windowReceiveronReceive  event.data进行接收
B  通过 组件的open方法第一个参数进行传递 接收方法同上
如果 onSend open  同时进行了传参   只能接收到onSend中的参数。(在onSend事件中event.data就是open传入的值,这里提供了修改时机)
3#***界面报错

无法获取属性"0"的值:对象为null或未定义

此时将BIZ进行模型编译   UI进行源码编译  各自整体刷新   再重新启动tomcat

4#***弹出框模式的主子窗口子窗口处理完后  主窗口实时刷新并且需要设置索引
A  子窗口数据集的 onSaveCommit事件传ID给主窗口
var data = justep.xbl('detailData');
    justep.windowReceiver.windowEnsure({
       id : data.getCurrentRowId()
    }, true);         //true 代表不关闭
B   主窗口在弹出框组件的onReceive事件中 需要拿到子窗口传过来的ID 对数据集进行刷新 并且根据ID设置索引。
var data = justep.xbl("listData");
    data.refreshData();
    var id = event.data.id;
    if (!!id && (data.getCurrentRowId() != id)&& (data.getIndex(id) >= 0))
       data.setIndex(data.getIndex(id));
//这里需要  区分   id   !!id  的区别  (!!id必然会返回  true  或者false)  id本身有可能是 undefined
5#***refreshData的底层逻辑
refreshData就是取数据,取过来了,就不用再取了
就是说 如果对数据过滤 执行refreshData 会重新去取
如果没有过滤范围 执行refreshData就不会再取 而是使用已经从数据库取过来的原数据
此时 此前做的修改如果没有保存 就会丢失。
刷新按钮就是执行了 refreshData 操作
(补充:refreshData 是data进行数据刷新的方法,默认bizData是先服务端请求QueryAction,当然也可以通过onCustomRefresh重写刷新逻辑;
默认bizData逻辑:
1、refreshData只取第一页的数据(设置limite情况)
2、级联加载auto-load设置成true的从data
3、刷新时如果数据修改进行提示(受属性confirm-refreshconfirm-refresh-text控制)
4、data为tree数据并且设置了root-filter时,加载root-filter 指定的数据
)


6#*** 修改时影响记录数不为1, 权限为:null  
可能有3个原因:
原因1version没有默认值
原因2version作为grid列,被设置了show-index属性为true
原因3:是有两个version,联合查询的时候不能把别的表的version列加进来
7#*** 功能中A要引用B中的某个概念,在B中要引用A中的某个概念,在X5中循环引用会导致报错,那么遇到这个问题我在X5平台中该怎么处理
建立公共目录,放公共概念

评分

参与人数 2威望 +20 收起 理由
Masion + 12 很给力!
gost_1223 + 8 很给力!

查看全部评分

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-19 17:12:54 | 显示全部楼层
本帖最后由 XiaoQLuo 于 2012-11-21 09:52 编辑

8#*** 测试分页后前台数据条目针对 listData 这个bizdata
listData的数据库条目数为 3
A 设置listData limit=20  此时  alert(justep.xbl(“listData”).getCount()) 3
B 设置listData limit=2   此时  alert(justep.xbl(“listData”).getCount()) 2
通过  A B   可以很明确 queryAction 是携带分页参数去后台拿数据的,每次只拿当前页的数据,并不是全部的数据。
9#*** 针对8测试分页后的Grid 组件点击表头 的排序 (注意:grid提供了服务端排序选项:server-sort,点击表头执行服务端排序)

第一页数据   合同编号
                   55
                   444
第二页数据    合同编号
                    1
点击第一页的 合同编号猎头   按照编号的 int型顺序排列  并没有将第二页的 1 数据排到前面。
10#***
Grid组件点击表头的时候,会进行排序,但是只是针对当前页的数据,如果想针对所有数据进行排序的话,需要自定义——重写排序方法。在页面的onload事件中重新分配gridonBeforeSorting事件的句柄。
代码如下:
mainActivity.mdDefaultLoad =function(event){
   // 重定义grid组件的排序方法
justep.xbl("grdMain").grid.attachEvent("onBeforeSorting",customSort);
}

function customSort(index, type, order){
//index 排序列序号  type 排序类型(str/int) order 升序降序(asc/desc)
   var grid = justep.xbl("grdMain").grid;
   var col = grid.columnIds[index];

var data =justep.xbl("dataMain");

/*由于setOrderBy为追加模式,会有多个列的排序条件,所以要清空一下,
写法不规范,后续提供clear方法,暂时可以这样写
setOrderBy(col)时为清除排序*/
data.orderBys = {};
data.setOrderBy(col,order=="asc"?1:0);
data.refreshData();

//设置排序图片
grid.setSortImgState(true, index, order);
// 最后return false,这样就不会进行默认的排序了
return false;
};
11#***queryAction中设置的ksql语句能测试成功但是界面上就报错了:
data[masterData]idColumn(T_SP_LandDevelopTidyProject)没有在select部分定义!
解决方法:queryAction的返回关系中需要添加dataidColumn列,在X5中就是概念名这一列。
idColumn :查询结果table中能唯一标示一行的列(通常是概念,当使用join后概念不能唯一标示行时可以指定其他能唯一标示一行的列 )

12#***queryAction 不支持group by
如果要用group by 的话,就自定义action,返回Table对象,在前台用data来加载Table对象。 注意这里需要考虑  分页的功能  data加载Table的方式填充入grid的情况,此时并没有走 dataqueryAction 所以不会读取data组件上的limit 属性。


回复 支持 2 反对 1

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-27 16:39:25 | 显示全部楼层
38#***关于列表新增记录位置在最上面
现在grid列表新增数据时,记录默认在第一行,需要实现,先加的在上面,后加的在下面。
测试grid如下图:
未命名.jpg
解决方法:点击 + 按钮执行的代码如下:
var batchSplAreaData = justep.xbl("batchSplAreaData");
batchSplAreaData.newData(batchSplAreaData.getCount());
batchSplAreaData.setValue("fNumberOfPeriods", " "+batchSplAreaData.getCount()+" ");

39#***
gridSelect 可以既有静态数据也有动态数据吗?
比如第一条是静态数据“全部”  下面的是动态数据的分类-类型,这个可以实现吗?
全部可以用下面的方法实现
var array = ["全部","全部"];
  justep.xbl('dataDEMO_Custemor').insert('all', 0, array);
回复 支持 1 反对 0

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-19 17:13:49 | 显示全部楼层
13#***测试jssplit()join()函数使用  发现join()函数在某些时候可以代替for循环来使用。
var str = "1-2-3";
alert(str.split("-"));
//结果:   
1,2,3
    var ary = ["1","2","3"];
alert(ary.join("-"));
//结果:
        1-2-3
14#***grid中多表头的设计   类似下面的

                                          本年入库
    新增建设用地                                        农用地
                                                                             其中耕地
指标总量 其中专项            指标总量 其中专项        指标总量   其中专项

     
首先确定  表头只是界面显示  实质是最后一行的数据  从数据可以确定该表头有 6
通过对6列的 label 进行修改就可以实现上面的效果。 Label中的“|“代表了换行。代码如下。着重关心<column>中的label属性。
<column id="default5"label="本年入库|新增建设用地|指标总量" ref="fYearInputBldLandSum"
       type="ed" width="211px"align="right" format="0,000.00"/>  
<column id="default6"label="本年入库|新增建设用地|其中专项" ref="fSYearInputBldLand"
       type="ed" width="210px"align="right" format="0,000.00"/>  
<column id="default7"label="本年入库|农用地|指标总量" ref="fYearFrmLandSum"type="ed"
       width="144px" align="right"format="0,000.00"/>  
<column id="default8"label="本年入库|农用地|其中专项" ref="fSYearFrmLand"type="ed"
       width="219px" align="right"format="0,000.00"/>  
<column id="default9"label="本年入库|农用地|其中耕地|指标总量" ref="fYearCtvLandSum"type="ed"
       width="211px" align="right"format="0,000.00"/>  
<column id="default10"label="本年入库|农用地|其中耕地|其中专项" ref="fSYearctvLand"type="ed"
       width="50px" align="right"format="0,000.00"/>  


回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-19 17:14:14 | 显示全部楼层
本帖最后由 XiaoQLuo 于 2012-11-21 09:54 编辑

15#***grid下加合计行代码
gridinit事件中设置
grid.grid1Init = function(event){
if(!event)return;
var lstr = "<span style='padding-left:12px;font-size:12px;font-weight:bold;font-style:italic;font-family:arial; color:red;width:100px'>"
+ "fDecimal合计</span>,#cspan,#cspan,"
+ "<divstyle='color:red;font-size:12px;font-weight:bold;text-align:right'id='c_1'>0</div>,"
+ "#cspan,#cspan,#cspan";
if(event.grid){
event.grid.attachFooter(lstr);
}

};

注意 :在gridinit事件中前台是拿不到数据集的,所以要想合计,必须发action去后台取值,然后赋值给div就可以了。
data是提供了基于当前ksql的统计能力,首先在queryAction上定义aggregateColumns统计,如 max(列) as max_列,min(列) as min_列 ;
在data组件上提供了方法获取,justep.xbl('dataID').getAggregateValue('max_列')


16#***业务管理权限X5的业务管理权限 就是实现  那些机构可以管理那些机构的数据 比如说A部门可以  管理B部门的某一业务功能的数据) 需要手动为数据库sa_opmanagetype 插入一条记录,配合界面上的orgFilter(orgFilter中的编码对应数据表中的scode字段)
注意:关于业务管理权限为空时显示所有的设置方法:设置orgFilterauto-refreshfalse,点击事件onChanged,方法中编写
varorgFilterValue=event.source.__select_obj.currentValue;
if(orgFilterValue!=""){
justep.xbl("mainData").refreshData();
}
17#*** 权限继承,X5的权限默认有继承的性质,
即当前组织机构的权限=上级节点机构的权限+本身授的权限
当权限需要根据上下级来区分的时候,就需要给每一级建立独立的节点来实现本级的权限。
避免权限继承。
18#*** numberSelect
numberSelect 设置 默认当前年份用下面的代码  
   var m = justep.xbl("numberSelect1");
m.__input.value=justep.Context.getLoginDate().substring(0,4);

19#*** grid中图片的信息提示(在图片的位置套一个<span>标签 如果有多个图标,最好放在不同的列 因为<span>标签读取的是 td中的区域,多个图标会公用同一个td
var url =commonUntil.pasAtachmentURL(event.value);
var html = "<img src='"+ url + "'><span style='display:none;'>预警</span></img>";
return html;
20#***柱状图
让柱状图每组中的柱子挨在一起
<category-item-marginid="default1">0.0</category-item-margin>
用这段代码去替换0.1的那一段。
21#*** 柱状图上数据库的数值重复多次 在数据轴中将数据格式改为0.00
22#***
treeSelect 设置根条件 (注意:这里其实是给数据集设置的根条件,根据根条件刷新取数据,将取到的数据给treeSelect组件进行加载。)
justep.xbl('adminAreaData').defTreeOption.option.rootFilter= "T_SP_AdminArea.fName='"
           + curArea + "'";
    justep.xbl('adminAreaData').refreshData();
这里还有一种方式:在data的filter支持变参,如:T_SP_AdminArea.fName= :value,value 就是变参,可以通过data的filters对象方法赋值,justep.xbl('adminAreaData') .filters.setStringVar("value", curArea) ;
23#*** 树形数据集 设置根条件2 跟上面的可以实现相同的功能,上面是针对树形数据集加载到treeSelect组件上的情况
var main = justep.xbl(“main”);
main.setTreeRootFilter(“”)
24#***KSQL查询编辑器
    要测试KSQL语句(一般是queryAction中的select语句)必须启动tomcat服务,不然会报错:

     异常:Connection refused:connect


回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-19 17:14:37 | 显示全部楼层
本帖最后由 XiaoQLuo 于 2012-11-21 10:08 编辑

25#***折线图 分组  分类 数据
“组”代表  线   “类” 代表 横坐标    “数据” 代表纵坐标
26#***带参数的报表,就是报表使用的数据 reportData 所引用的action 是有参数的。
   当报表刷新数据 refreshData 的时候,会去执行action 拿到返回的Table对象,再通过前台的报表相关函数  select()  将数据赋给不同的单元格,展现出来。
给报表传参数的方法:(reportData2是report2所使用的报表数据集)
justep.xbl('reportData2').setStringVar('adminArea', adminArea);
justep.xbl('reportData2').setStringVar('year', year);
justep.xbl('report2').refresh();
27#*** jar包不存在
java.lang.RuntimeException: compile error '[-encoding, utf-8, D:\x5.2.1.2000\model\UI\portal\dsrc,-d, D:\x5.2.1.2000\model\UI\portal\dclasses, -cp,/D:/x5.2.1.2000/apache-tomcat/bin/bootstrap.jar;/D:/x5.2.1.2000/jdk/lib/tools.jar;/D:/x5.2.1.2000/apache-tomcat/lib/;/D:/x5.2.1.2000/apache-tomcat/lib/annotations-api.jar;/D:/x5.2.1.2000/apache-tomcat/lib/catalina-ant.jar;/D:/x5.2.1.2000/apache-tomcat/lib/catalina-ha.jar;/D:/x5.2.1.2000/apache-tomcat/lib/catalina-tribes.jar;/D:/x5.2.1.2000/apache-tomcat/lib/catalina.jar;/D:/x5.2.1.2000/apache-tomcat/lib/el-api.jar;'D:\x5.2.1.2000\model\UI\portal\dsrc\JsonUtil.java:34: 软件包com.justep.studio.util 不存在
importcom.justep.studio.util.FileHelper;
                              ^
注意:某些输入文件使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
第三方jar使用的问题:
平台中有模块(一个目录就是一个模块)的概念,模块和模块是隔离的,模块之间资源使用需要使用use或者include引用(注:子模块自动include 父模块)
一般一个引用模块下都有一个code模块,在下面增加lib目录,可以放入第三方的jar;好处显而易见,不同应用模块可以使用不同版本的第三方包;
需要注意的一种情况:在studio中开发时我们把源码设置成源码路径,运行调试都正常,但是部署后报找不到class,为什么呢?一般都是没有进行模块引用;原因是studio中设置成源码路径 后编译的class级别被提高到tomcat容器加载


28#***studioJs文件的复制粘贴很慢  很卡  即使很短的几个字符都会卡好几秒
解决方法:studio首选项中,Js库---UI依赖库中删除选中的两个文件然后点应用即可
mobileUiJsLibrary.js和uiJsLibrary.js


回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-19 17:32:17 | 显示全部楼层
29#***调整w风格  将单一的w页面做成tab页签的样子,将原有内容展现在第一个tab页签中。原界面是一个单一view(view1)
右键---查看view的源码,view的id是‘view1’查询 ‘view1’找着代码:
<xui:placecontrol="view1" id="controlPlace2"style="height:100%;width:100%;position:relative;"/>
将这段代码剪切,新建tabPanel组件 调整大小 100% 右键—查看源码
找着<xui:tab ></xui:tab>将上面剪切出来的代码粘贴到tab标签中。如下代码:
<xui:tab id="tabPage3">
              <xui:labelid="xuiLabel4">列表</xui:label>
              <xui:placecontrol="view1" id="controlPlace2"style="height:100%;width:100%;position:relative;"/>
            </xui:tab>
调整以后的界面为 tabPanel  分为‘列表’和‘详细’两个页签

前面的view1整个在列表tab中显示出来

30#***列表数据的添加,默认从下往上,改成从上往下:
var ActuallyPayCircumstan = justep.xbl("ActuallyPayCircumstan");
    ActuallyPayCircumstan.newData(ActuallyPayCircumstan.getCount());
只需要在newData方法中传入index参数就可以了。
31#***
使用X5自带的绿色数据库进行远程数据库服务器上数据的导入导出备份。
1,导入数据库文件:
将现有数据全部删除
只保留用户
开始给各用户导入各自的dmp文件
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码(如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSIONTO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=yfile=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp
2,导出远程数据库文件:
expX5landspvs/x5@192.168.1.99/x5platform file=d://x5landspvs.dmp full=y
exp X5sys/x5@192.168.1.99/x5platformfile=d://x5sys.dmp full=y
exp X5doc/x5@192.168.1.99/x5platformfile=d://x5doc.dmp full=y
32#***
文档服务器隔一段时间会变慢,解决方法:清空以下三张表的数据:x5doc用户登录
清空activemq开头的3个表(Activemq_acks,Activemq_lock,Activemq_msgs)的数据
33#***
凡是引用别人界面的功能,当前功能对应的process文件,必须包含别人界面里面的所有action动作,主要针对多入口进入同一界面,需要拥有界面的所有动作
34#***
tabPanel的tab页签放置图表 会报错:java.lang.IllegalArgumentException: Width(0) and height (0) cannot be <= 0
解决方法:图表默认auto-load=false
在对应tab加载时再刷新chart。可以有两种方法:
A  在源码中对应的tab页签代码加入<xforms:action 具体见下面实现
<xui:tab id="tabPage2"selected="false">
             <xui:label id="xuiLabel2">饼图</xui:label>  
                       <xforms:actionev:event="xforms-select">
           <xforms:script> <![CDATA[
                                                             if (justep.xbl('chart7').loaded != 'true') {
                                                            
                                                               justep.xbl('chart7').refresh();
                                                            
                                                               justep.xbl('chart7').loaded == 'true';
                                                            
                                                             }
                                                 ]]></xforms:script>
          </xforms:action>  
                         </xui:tab>
B  在JS中实现 在对应的tab的onSelect事件中 写代码
if (justep.xbl('chart7').loaded !='true') {
                                                            
                                                               justep.xbl('chart7').refresh();
                                                            
                                                               justep.xbl('chart7').loaded == 'true';
                                                            
                                                             }
注意 如果只是简单的刷新报表就采用A 如果tab在select时,还需要其他一些业务设置,就选择B方式。
回复 支持 反对

使用道具 举报

40

主题

196

帖子

514

积分

高级会员

Rank: 4

积分
514
QQ
发表于 2012-11-19 17:58:41 | 显示全部楼层
谢哥辛苦了哇。。。。。
我怀念的是什么也不说!
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2012-11-20 12:30:25 | 显示全部楼层
35#***treeFilter组件的delay属性
请问一下,
为什么delay=true的时候,可以过滤出来子孙,delay=false时候,只有一个节点?
想知道,treeFilter组件的delay属性,底层是什么动作?
tree,treeGrid,treeSelect,treeFilter上的delay属性指的是分级加载数据的意思,也就是说下一级的数据是通过点击数据行前的+进行刺激加载的(当然这里要配合data使用)
如果设置了delay=false,同时data上又设置了root-filter,那么只能加载root-filter允许范围的数据
36#***关于studio应用编译的问题 (本机)
dsrc右键设置为源码路径,修改后不能编译,直接运行即可
37#***关于studio应用编译的问题 (SVN)
问题:SVN开发已经进入了测试阶段,A机器作为测试服务器,同时需要更新SVN上的提交的内容,是不是一旦SVN上有java文件的改动和提交,A机器就需要手动去编译???
前段时间测试项目时因为编译问题老出现莫名其妙的问题。想请教一下,有没有好的办法?
解决:可以把class文件也一块更新或者使用平台提供的编译工具tools\compileBIZ.bat
回复 支持 反对

使用道具 举报

47

主题

171

帖子

430

积分

中级会员

Rank: 3Rank: 3

积分
430
发表于 2012-11-27 18:34:40 | 显示全部楼层
哇,谢哥整理了这么多~~~
学习了~
个性太过强烈,Discuz已屏蔽此条签名。如有问题,请与管理员联系~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-19 08:36 , Processed in 0.116806 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表