目录
1.NC 交互说明
- 基于企业级 MA Server 开发
- 结合 RIA 培训提供的环境,展示 MA Server 如何调取网关服务,获取 NC系统数据。
2.案例讲解
该案例的目的是使用企业级 MA Server 获取 NC 服务,数据仅以模拟数据,NC 具体接口参照相关接口文档。
2.1 获取 NC 数据过程
移动端通过 MA Server 获取 NC 数据,主要有一些几个过程:
- 移动端向 MA Server 请求数据
- MA Server 接收移动端的请求,通过网关服务向 NC 发出请求,这个
过程包括以下过程:- (1) MA Server 解析移动端请求数据
- (2) MA Server 组装调用网关服务的请求参数
- (3) 调用网关服务
- NC 接口实现,返回请求数据。
- MA Server 获取数据(选取有用信息,拼成 JSON 格式),传给移动端
- 移动端接收数据,展示数据
2.2 开发过程
移动端通过 MA Server 获取 NC 数据的过程,开发步骤如下:
2.2.1 NC 登录
注意:
1、Summer工程中使用summer.callService调用,参数相同
2、Summer工程中使用额外添加appid参数
平台提供 NC 登陆的服务,使用方法:
function com$yyuap$nanchang$LoginController$loginnc(sender, args) {
$ctx.dataCollect();
var username = $ctx.getString("userName");
var password = $ctx.getString("passWord");
var dataparam = {
type : "nc",
method : "login",
contextmapping : "none",
success : "successMethod()",
user : username,
pass : password
};
$service.call("UMService.login", dataparam, false);
}
支持 NC 登录服务说明:
网关服务:MAServer 安装下confconfigureappidservices.xml 必须有
【ncLoginService】接口说明
<service id="ncLoginService" provider="nclocator" method="umLogin"
returntype="uap.vo.umobile.UMResult">
<properties>
<params>context:uap.vo.umobile.UMContext</params>
<interface>uap.itf.umoblie.IUapMoblieServ</interface>
<security>false</security>
</properties>
<ds-set>
<datasource name="uapma" />
</ds-set>
</service>
2.2.2 获取【销售订单】数据
MA Server 接收移动端的请求,通过网关服务向 NC 发出请求
(a) NC 服务开发
(1)NC 系统接口定义
package nc.itf.mobile;
import nc.vo.pub.BusinessException;
public interface MobileSupport {
public static final String QUERY_GROUPADMIN_FUNCNODE_SQL = "select gf.funcode from sm_gm_func gf ,sm_funcregister func where gf.funcode = func.funcode and func.isEnable = 'Y'";
public String queryAllGroupManagerFuncode() throws BusinessException;
public String getList(String searchinfor) throws BusinessException;
}
- (2)接口实现
package nc.impl.mobile;
import nc.itf.mobile.MobileSupport;
import nc.vo.pub.BusinessException;
import uap.json.JSONArray;
import uap.json.JSONObject;
public class MobileImpl implements MobileSupport {
public String queryAllGroupManagerFuncode() throws BusinessException {
return "张三";
}
@Override
public String getList(String searchinfor) throws BusinessException {
// TODO 自动生成的方法存根
return "lisi";
}
}
- (3)upm 文件
(b) NC 服务发布
- (1)配置 NC 服务对外接口
【2016 年 10 月体验式培训环境】虚拟机:
C:envUAP-HOMEinsysConfig.bat,打开配置工具,配置虚拟机的 IP(之 前 RIA 培训环境给的端口和数据源信息不更改)
注意:
如果对 UAP HOME 配置了对外的 IP,要想成功启动 UAP 客户端,需要 配置【窗口】—-【首选项】—-【开发配置】—-【客户端连接】 - (2)启动 RIA 的虚拟机的中间件
说明:
开发环境发布服务,先清理 homeejb 下已经部署的服务—-启动 server
生产环境发布服务:导出 NC 补丁包—-部署到 modules 下—-部署 ejb—启动 server(c) 移动端请求
function loadData() {
$service.writeConfig({
"host" : "172.21.1.92", // 向configure中写入host键值
"port" : "8080"// 向configure中写入port键值
})
$service.callAction({
"viewid" : "com.yonyou.example.ExampleController", // 部署在MA上的Controller的包名
"action" : "getData", // 后台Controller的方法名,
"params" : {
a : 1,
b : 2
}, // 自定义参数,json格式
"callback" : "myCallBack()", // 请求成功后回调js方法
"error" : "myErrCallBack()"// 请求失败回调的js方法
})
}
(d) MA 处理移动端请求-网关服务
- MA Server 解析移动端请求数据,参数解析
- MA Server 组装调用网关服务的请求参数、调用网关服务:数据以 json 格式返回给移动端
网关服务统一调用方式:
参数说明:IGatewayService service =GatewayServiceFactory.findGatewayService(appId, serviceId, paramsMap) ;
Object result = service.doService();
a) appId:应用 id
b) serviceId:请求的服务接口 id
c) paramsMap:请求服务时的参数,要求 map 形式
appId 说明: 调用网关服务的appId与项目下的.mspec 文件:application id=”XXX”一致,
与MA Server 安装目录下的confconfigure 文件夹名称一致
其他调用方式IServiceNode svr = GatewayNodeFactory.getGatewayNode(“ump_demo”).getServiceNode(“ssoLoginService”);
IGatewayService service = GatewayServiceFactory.findGatewayService(svr, paraMap); Object retObj = service.doService();
(e) NC 接口导入
需要将网关服务使用到的 NC 接口,导入到 MA 中【导出 MP 包时,自动打包接口】;或者是导出 jar 包放到 modulesmobrt 下(f) 网关服务依赖的配置文件
调用网关服务,需要在工程ma 的目录下三个个配置文件 - (a)services.xml 配置:服务接口信息
services 配置文件的安全配置节“<!-- 新增 -->
<!--Provider:为服务提供者 id 信息; Method:为接口中使用的方法名; Returntype:为接口方法的返回值类型(包含包名的类的全名);
Params:为方法参数名称和参数具体类型; Interface:为调用后台服务的接口名称; 10 Security:为调用后台服务安全特征(true代表后台服务需要校验的token,false代
表后台服务不需要校验token) -->
<gateway>
<!--获取 NC 数据的服务; -->
<service id="query" provider="nclocator" method="queryAllGroupManagerFuncode"
returntype="java.util.String">
<properties>
<params></params>
<interface>nc.itf.mobile.MobileSupport</interface>
<security>false</security>
</properties>
<ds-set>
<datasource name="nc633" />
</ds-set>
</service>
<!--NC 登录服务; -->
<service id="ncLoginService" provider="nclocator" method="umLogin"
returntype="uap.vo.umobile.UMResult">
<properties>
<params>context:uap.vo.umobile.UMContext</params>
<interface>uap.itf.umoblie.IUapMoblieServ</interface>
<security>false</security>
</properties>
<ds-set>
<datasource name="uapma" />
</ds-set>
</service>
...
</gateway>
false ”要与 upm 配置文件的“accessProtected=”false””一致。false :MA Server 是否要求发送 token
NC upm 文件:“accessProtected=”false””调用接口是否需要 token - (b)datasources.xml 配置:url 表示要访问的服务的地址,ncds 则是配置的访问的数据源,services.xml 中的 datasource 需要在 datasources.xml 配置
说明:<?xml version="1.0" encoding="UTF-8"?>
<dsset>
<datasource id="nc633" isdefault="true">
<url>http://172.21.1.92:9091</url>
<ncds>design</ncds>
</datasource>
</dsset>
172.21.1.92:9091 :nc 的 ip 地址和 port,此处是虚拟机中 UAPHOME 对外的 ip ,port
design:nc 数据源 - (c) provider.xml配置:用于设置几种服务调用的方式,该文件不需要修改
uap 服务类:<provider-set>
<provider id="nclocator"
class="com.yonyou.uap.um.gateway.service.NCLocatorGatewayService" />
<provider id="http"
class="com.yonyou.uap.um.gateway.service.HTTPGatewayService" />
<provider id="jdbc"
class="com.yonyou.uap.um.gateway.service.JDBCGatewayService" />
<provider id="u8http"
class="com.yonyou.uap.um.gateway.service.U8HTTPGatewayService" />
</provider-set>
(g) 启动 MA 服务,调试
注意:检查 MA 启动后,MAhomeconfconfigureappid 下,网关服务的配置文件是否更新到最新。3.注意事项
- MA Server 的 IP、port,启动后保证手机可连通
- MaServerconfconfigure 配置文件:保证配置文件正确
- a)修改 datasources.xml 中 IP 和端口号
- b)网关调用的服务在 services.xml 可找到
文档更新时间: 2018-01-16 10:11