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

QQ登录

只需一步,快速开始

查看: 83339|回复: 79

数据组件(bizData、data)

  [复制链接]

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
发表于 2012-11-23 11:19:05 | 显示全部楼层 |阅读模式
数据组件是.W中的数据核心,它负责数据的加载,修改,保存并且通知表现组件进行展现更新,数据组件分为bizData,data。

bizData组件是和业务层绑定的data,通过指定的reader、writer、creator来进行相关的加载、保存、新增逻辑,同时支持主从数据的同事务保存,树形数据的延迟加载。适合用于展示数据库中的数据。

data组件是.W上通用的数据组件,相对于bizData组件没有绑定相关的业务action,适合用于作为界面上的静态数据。

评分

参与人数 2威望 +19 收起 理由
gost_1223 + 10 很给力!
Masion + 9 神马都是浮云

查看全部评分

远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 11:29:23 | 显示全部楼层

遍历data

  1.         var d = justep.xbl('bizData1');        
  2.         for ( var i = 0; i < d.getCount(); i++) {
  3.                 var rowid = d.getID(i);
  4.                 var v = d.getValue('fName',rowid);
  5.         }
复制代码
说明:bizData1是data组件的ID
          getCount是data组件的方法,用于获取记录数
          getID是data组件的方法,根据行的索引值获取行的行ID
          getValue是data组件的方法,用于获取当前行或指定行的某个关系的值
          fName是data中的一个关系
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2013-7-2 11:17:03 | 显示全部楼层

给queryAction中设置的命名参数赋值

可以在data组件的ondataMainRefreshCreateParam事件中通过下面的代码给ksql中的参数赋值
mainActivity.dataMainRefreshCreateParam = function(event){
     var mapParam = new justep.Request.MapParam();
     mapParam.put("aa", new justep.Request.SimpleParam("02",
     justep.XML.Namespaces.XMLSCHEMA_STRING));
     mapParam.put("bb", new justep.Request.SimpleParam("02",
     justep.XML.Namespaces.XMLSCHEMA_STRING));
     event.param.setMap("variables", mapParam);
};
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2013-2-18 10:21:22 | 显示全部楼层

查找数据

使用data组件的find方法
array find( fields, values, first, caseInsensitive, partialKey)
参数:
    fields {array} [required]列列表
    values {array} [required]值列表
    first {boolean} 是否只是返回第一条
    caseInsensitive {boolean} 忽略大小写
    partialKey {boolean} 模糊查询
返回值: {array} 行Id数组

案例
1、用一列的值进行查找

查找物品名称(fWPMC)为5的记录
var arr = justep.xbl('dataMain').find(['fWPMC'],['5'],false,true,true);
查找到两条记录,返回值为593565C56C374305BF9A9D1C4DCB40F5,7DF876ECD4AE42348D43F3645A880058

2、用多列的值进行查找
查找物品名称(fWPMC)为5且物品编码(fWPBM)为15的记录
var arr = justep.xbl('dataMain').find(['fWPMC','fWPBM'],['5','15'],false,true,true);
查找到一条记录,返回值为593565C56C374305BF9A9D1C4DCB40F5
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

22

主题

72

帖子

183

积分

初级会员

Rank: 2

积分
183
QQ
发表于 2015-3-28 13:54:23 | 显示全部楼层
zhaixin 发表于 2013-2-18 10:21
使用data组件的find方法
array find( fields, values, first, caseInsensitive, partialKey)
参数:

这些参数都是必须的吗?这个方法能不能获取某一列的值?

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 14:18:43 | 显示全部楼层

新增记录

1、插入记录
  1. justep.xbl('dataMain').newData();
复制代码
2、追加记录
  1. justep.xbl("dataMain").newData(justep.xbl("dataMain").getCount());
复制代码
3、批量插入记录
批量插入记录需要先形成数组,再使用data的newData方法。代码如下
  1. arr1['fCode']=’001’;
  2. arr1['fName']=’aaa’;
  3. arr.push(arr1);
  4. data1.newData(data1.getCount(),null,arr);
复制代码
4、新增默认值
(1)、可以在ontology文件中的关系上设置默认值
(2)、可以在data组件的规则上设置默认值
(3)、可以在data组件的onNewCreateParam事件中,写代码设置默认值,代码如下
  1. mainActivity.dataMainNewCreateParam = function(event){
  2.     event.defaultValues.push({rowID: '值',关系标识: '值'});
  3. };
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 15:21:46 | 显示全部楼层

数据改变事件

data组件当前行的每一列数据在修改之后,依次触发onValueChanging,onValueChanged两个事件,系统将改变的列名和改变后的值传入这两个事件的event参数中,通过event.column获取改变的列名,通过event.value获取改变后的值

在onValueChanging事件中可以判断用户输入的值是否合法,不合法可以进行清空输入或改为原值等操作
  1. mainActivity.dataMainValueChanging = function(event){
  2.         if(event.column=="fWPMC"){
  3.                 if(event.value=="aa")
  4.                         event.value="";//清空输入
  5.                         event.value=event.originalValue;//改为原值
  6.         }
  7. };
复制代码
在onValueChanged事件中可以根据用户输入的值进行其它操作,例如计算、赋值等等。
  1. mainActivity.dataMainValueChanged = function(event) {
  2.         if (event.column == "fGoodsName")
  3.                 if (event.value == "a") {
  4.                      justep.xbl("data1").setValue("fGoodsName", "1");
  5.                 }
  6. };
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 14:37:11 | 显示全部楼层

保存数据

1、保存数据
  1. justep.xbl('dataMain').saveData();
复制代码
2、保存前进行校验,不满足条件,不保存
在data组件的onBeforeSave事件中写代码,不允许保存时,写event.cancel=true;保存动作就会停止
  1. function dataDEMO_OrderBeforeSave(event){
  2.     var data = justep.xbl('dataDEMO_Order');
  3.     var fTolotalAmt = data.getValue('fTolotalAmt');
  4.     if(fTolotalAmt == ""){
  5.         alert("产品的单价、数量不能为空!")
  6.         event.cancel=true;
  7.     }
  8. }
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 11:22:04 | 显示全部楼层

获得data对象

要使用data组件的方法,需要先获得data组件的js对象,方法如下
  1. var data = justep.xbl('dataMain');
复制代码
说明:dataMain是data组件的ID
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 11:42:58 | 显示全部楼层

设置过滤条件,刷新数据

  1.         var data = justep.xbl("dataMain");
  2.         data.setFilter("filter1", "X5_GoodsType.fPersonName='" + justep.Context.getCurrentPersonName() + "'");
  3.         data.setFilter("filter2", "X5_GoodsType.fUpdateTime = stringToDateTime('2010-10-10 10:10:10')");
  4.         data.refreshData();
复制代码
说明:dataMain是data组件的ID
          setFilter是data组件的方法,用于设置数据的过滤条件
          filter1、filter2是过滤条件的名称,一个data组件可以有多个过滤条件,它们以and方式连接共同作用
          X5_GoodsType.fPersonName是要过滤的概念及其中的关系
          如果过滤的关系是日期时间类型的,需要调用ksql的函数stringToDateTime进行转换
          refreshData是data组件的方法,用于从数据库获取数据

          如果从某个日期时间类型的关系中取值作为过滤条件,需要经过如下的转换
  1.         var s = data.getValue("fDateTime");
  2.         s = s.substr(1,19);
  3.         s = s.replace("T"," ");
  4.         data.setFilter("filter2", "X5_GoodsType.fUpdateTime =stringToDateTime('"+s+"')");
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 13:28:15 | 显示全部楼层

赋值、取值

赋值
  1.         justep.xbl('dataMain').setValue("关系标识","值");       //操作当前行
  2.         justep.xbl('dataMain').setValue("关系标识","值",rowid); //操作其它行
复制代码
取值
  1.         var org = justep.xbl('dataMain').getValue('关系标识');       //操作当前行
  2.         var org = justep.xbl('dataMain').getValue('关系标识',rowid); //操作其它行
复制代码
说明:操作其它行时,需要先获得其它行的行ID
          可以返回行ID的方法如下
                获取当前行ID——getID 不传参数
                通过行索引值获取行ID——getID 传行索引作为参数
                查找数据——find
                获取修改的行ID——getChangedIDList, getChangedIDs

给行ID赋值
  1. justep.xbl("dataMain").setValue("rowid","值");
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 15:52:37 | 显示全部楼层

获取记录数

justep.xbl('dataMain').getCount();
获取记录数
justep.xbl('dataMain').getTotal();
返回data的全部记录数,当data不分页加载数据时为-1

如果有100条数据,每页显示20条,使用getCount=20,使用getTotal=100
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴

88

主题

9507

帖子

5135

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5135
QQ
 楼主| 发表于 2012-11-23 16:23:10 | 显示全部楼层

动态设置树的根节点的过滤条件

使用setTreeRootFilter方法设置,

使用此方法时data必须是分级加载,这样才会显示“+”去加载子,data控制分级加载的属性是root-filter,root-filter属性不为空表示使用分级加载,为空表示不分级加载,即全部加载
可以设置一个不成立的条件如root-filter="1=2",然后在相关方法中调用setTreeRootFilter方法

方法一: 只会加载一次
  1. var data = event.source;
  2. if(!data.loaded)
  3.     data.setTreeRootFilter("DEMO_AssetClass.fParentID= '8D9C68A197134FDC94CB40AF123AB5C8'");
复制代码
方法二:
  1. var data = justep.xbl('dataDEMO_AssetClass');
  2. data.setTreeRootFilter("DEMO_AssetClass.fParentID= '8D9C68A197134FDC94CB40AF123AB5C8'");
  3. data.refreshData();
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

如按照该方法解决,请及时跟帖,便于版主结贴
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-11-21 18:21 , Processed in 0.056991 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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