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

QQ登录

只需一步,快速开始

查看: 32022|回复: 33

调用Action

  [复制链接]

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
发表于 2011-3-7 09:11:06 | 显示全部楼层 |阅读模式
有两种方法发送Action请求,分别是sendBizRequest和sendBizRequest2,前者返回xml格式的参数,后者提供了返回json或者xml格式的参数的能力。
sendBizRequest方法,返回xml格式的参数——兼容保留
  1. var response = justep.Request.sendBizRequest(
  2.                 "/x5demo/misc/process/testKsql/testKsqlProcess","mainActivity", "testKsqlAction", param);
  3. //判断请求是否执行成功
  4. if(!justep.Request.isBizSuccess(response)){
  5.      throw new Error("调用Action失败");
  6. }
复制代码
sendBizRequest2方法,返回指定格式(json或者xml)的参数——推荐使用
  1. justep.Request.sendBizRequest2({
  2.     dataType: "json",
  3.     action: "testKsqlAction",
  4.     parameters : param,
  5.     callback: function(result) {
  6.         if (result.state) {
  7.             alert("调用成功!");
  8.         } else {
  9.             throw new Error("调用失败!|" + result.response.message);
  10.         }
  11.     }
  12. });
复制代码

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2011-3-7 09:44:13 | 显示全部楼层

Action返回值

Action返回一个值

可以在java中直接返回,例如:return "123";

Action返回多个值

在java中将要返回的多个值存入一个map变量并返回,例如
  1. Map<String, Object> result = new HashMap<String, Object>();
  2. result.put("int", 1234567);
  3. result.put("str", "justep.com");
  4. result.put("list", listParam);
  5. result.put("orgData", KSQL.select("select SA_OPOrg.* from SA_OPOrg SA_OPOrg ", null,"/system/data", null));
  6. return result;
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2013-1-5 14:52:24 | 显示全部楼层

案例——返回table,并导入data组件

1、使用sendBizRequest2方法
  1. justep.Request.sendBizRequest2({
  2.     dataType: "json",
  3.     action: "selectAction",
  4.     callback: function(result) {
  5.         if (result.state) {
  6.             alert("返回值 -> " + JSON.stringify(result.response));
  7.             justep.xbl("dataMain").loadJson(result.response);
  8.         } else {
  9.             throw new Error("调用失败!|" + result.response.message);
  10.         }
  11.     }
  12. });
复制代码
2、使用sendBizRequest方法
  1.         var response = justep.Request.sendBizRequest(null,null,"selectAction", null, null, null, true);
  2.         var result = justep.Request.transform(justep.Request.getData(response.responseXML));
  3.         justep.xbl("dataMain").loadXML(result.xml);
复制代码
action对应的java代码如下
  1.         public static Table select(){
  2.                 Table table = KSQL.select("select ER_WPXX.* from ER_WPXX ER_WPXX", null, "/erp/buy/data", null);
  3.                 table.getProperties().put(Table.PROP_NAME_ROWID, "ER_WPXX");
  4.                 return table;
  5.         }
复制代码
说明:sendBizRequest和sendBizRequest2中不传process和activity表示使用当前process和activity;
          java代码中指定主键的代码 table.getProperties().put(Table.PROP_NAME_ROWID, "概念名"); 是必须的
         上面的例子在调用sendBizRequest之后,没有判断执行是否成功,实际代码中都应加上此判断
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2013-9-22 14:03:04 | 显示全部楼层

在经典门户中调用Action

和在其它地方调用action的区别是,必须加上bsessionid参数
  justep.Request.sendBizRequest2({
      "dataType": "application/json",
      "process": "/erp/buy/process/goods/goodsProcess",
      "activity": "mainActivity",
      "action": "aaAction",
      "bsessionid": $.jpolite.ClientInfo.businessId,
      "callback": function(callbackData) {
          if (callbackData.state) {
              var data = callbackData.response;
              alert("调用成功,返回值是"+data);
          }
      }
  });


通常这段代码写在 /UI/portal/x5/js/ext.js 文件的最后,setTimeout方法中
另外还需要在index.w文件中引用base.js
<head>
    <script type="text/javascript" src="/base/base.js"></script>
引用base.js必须写在最前面
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

216

主题

722

帖子

1824

积分

金牌会员

Rank: 6Rank: 6

积分
1824
发表于 2013-1-21 15:35:06 | 显示全部楼层
zhaixin 发表于 2013-1-5 14:52
1、使用sendBizRequest2方法或者2、使用sendBizRequest方法action对应的java代码如下说明:sendBizRequest ...

你上面说
java代码中指定主键的代码table.getProperties().put(Table.PROP_NAME_ROWID, "概念名"); 是必须的
ksql = "SELECT m,'',a.fName,a.fAcvName,m.fMaterialTName,m.fMaterialName FROM HR_ACV_Archives a join HR_ACV_Material m on a = m.fMasterID WHERE m.fBorrowState='1' AND m IN(SELECT HR_ACV_BorrowMaterial.fMaterialID FROM HR_ACV_BorrowMaterial HR_ACV_BorrowMaterial WHERE HR_ACV_BorrowMaterial.fMasterID='"
                                + fID + "')";


table.getProperties().put(Table.PROP_NAME_ROWID, "m");
那我这个主键该怎么指定啊?

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2013-1-5 14:42:03 | 显示全部楼层

使用sendBizRequest调用action返回值的接收方法

判断是否调用成功
  1. justep.Request.isBizSuccess(response);
复制代码
获得错误消息
  1. justep.Request.getMessage(response.responseXML);
复制代码
获得返回值
  1. var ret = justep.Request.transform(justep.Request.getData(response.responseXML));
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2013-1-5 14:24:18 | 显示全部楼层

使用sendBizRequest2调用action返回值的接收方法

写在callbakc回调事件中
  1.                 callback: function(result) {
  2.                             if (result.state) {
  3.                                         alert("调用成功!");
  4.                             } else {
  5.                                         throw new Error("调用失败!|" + result.response.message);
  6.                             }
  7.                 }
复制代码
判断是否调用成功
  1. if (result.state)
复制代码
获得错误消息
  1. throw new Error("调用失败!|" + result.response.message);
复制代码
获得返回值
1、接收一个值
  1. alert(result.response);
复制代码
2、接收多个值
  1. alert(result.response.int);
  2. alert(result.response.str);
复制代码
说明:result.response.int其中的int是java中map变量的key
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

88

主题

9401

帖子

4941

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4941
QQ
 楼主| 发表于 2011-3-7 09:15:19 | 显示全部楼层

给Action传参

创建一个参数对象,添加参数。不同类型的参数使用不同的set方法
var actionParam = new justep.Request.ActionParam();
简单类型
  1. actionParam.setString("stringParam", "传个字符串回去");

  2. actionParam.setDate("dateParam", now);
  3. actionParam.setTime('para_time', "12:55:55");
  4. actionParam.setDateTime("datetimeParam", now);//日期时间类型对应到java中的Timestamp类型

  5. actionParam.setInteger("integerParam", 9876);
  6. actionParam.setFloat('para_float', 1.345);

  7. actionParam.setBoolean("booleanParam", true);
复制代码
list类型
  1. var listParam = new justep.Request.ListParam();
  2. listParam.add(new justep.Request.SimpleParam("列表项1",justep.XML.Namespaces.XMLSCHEMA_STRING));
  3. listParam.add(new justep.Request.SimpleParam("45678",justep.XML.Namespaces.XMLSCHEMA_INTEGER));
  4. actionParam.setList("listParam", listParam);
复制代码
map类型
  1. var mapParam = new justep.Request.MapParam();
  2. mapParam.put("key1", new justep.Request.SimpleParam("Map项1",justep.XML.Namespaces.XMLSCHEMA_STRING));
  3. mapParam.put("key2", new justep.Request.SimpleParam("Map项2",justep.XML.Namespaces.XMLSCHEMA_STRING));
  4. mapParam.put("key3", new justep.Request.SimpleParam("Map项3",justep.XML.Namespaces.XMLSCHEMA_STRING));
  5. actionParam.setMap("mapParam", mapParam);
复制代码
table类型
  1. var dRole = justep.xbl("dRole");
  2. actionParam.setTable("tableParam", new justep.Request.TableParam(dRole.Serialize(false, false)));
复制代码
远程的联系方法 QQ 728094812。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要解决的问题

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

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
发表于 2013-1-25 11:34:37 | 显示全部楼层
new justep.Request.SimpleParam("Map项1",justep.XML.Namespaces.XMLSCHEMA_STRING)
这句代码有没有相关API可以查看
主要是SimpleParam类

74

主题

257

帖子

724

积分

高级会员

Rank: 4

积分
724
QQ
发表于 2013-6-20 11:45:33 | 显示全部楼层
mark

17

主题

93

帖子

322

积分

中级会员

Rank: 3Rank: 3

积分
322
QQ
发表于 2013-6-20 11:49:00 | 显示全部楼层
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2019-4-23 04:45 , Processed in 0.145080 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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