最新消息:

平台二次开发文档

开发文档 admin 2267浏览

1  平台WEB服务快速发布

平台2.0提供了快速发布WEB服务的功能。通过配置界面,配置一下可以快速地将查询SQL,数据操作SQL(Insert,Update,Delete),数据库函数,Java方法发布为WEB服务。

WEB服务地址:http://localhost:8080/xip/services/platformWS?wsdl

方法:executeSQL

参数:sqlKey以此值来获取唯一一条WS配置信息。

paramListWS中的参数值以JSON串传入。

JSON格式为{‘param1′:’param1_val’,’param2′:’param2_val’}

1.1    查询SQL

1.1.1     平台中配置

1

其中${}括起部分为参数,在WS执行此SQL之前会用传入参数paramList中对应的参数值替换掉此部分内容。如果此参数值为字符型,需要自行添加单引号来实现。

1.1.2     调用WS示例

package com.xz.service;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CXFTest {

public static void main(String[] args) {

//基于CXF调用WS测试代码

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

//WS发布地址,其中根据实际情况替换相应内容

Client client = dcf.createClient(“http://localhost:8080/xip/services/platformWS?wsdl”);

Object[] objects;

try {

//executeSQL方法的两个参数,第一个是关键码,第二个是WS所需参数的Json串

String params[] = {“GXF002”, “{’emp_name’:’高’}”};

objects = client.invoke(“executeSQL”, (Object[]) params);

System.out.println(objects[0].toString());

} catch (Exception ex) {

Logger.getLogger(CXFTest.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

1.2    数据操作SQL

1.2.1     平台中配置

2

其中${}括起部分为参数,在WS执行此SQL之前会用传入参数paramList中对应的参数值替换掉此部分内容。如果此参数值为字符型,需要自行添加单引号来实现。

数据操作中的SQL可以为Insert、Update和Delete三种

1.2.2     调用WS示例

package com.xz.service;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import java.util.UUID;

public class CXFTest {

public static void main(String[] args) {

//基于CXF调用WS测试代码

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

//WS发布地址,其中根据实际情况替换相应内容

Client client = dcf.createClient(“http://localhost:8080/xip/services/platformWS?wsdl”);

Object[] objects;

try {

//executeSQL方法的两个参数,第一个是关键码,第二个是WS所需参数的Json串

String id = UUID.randomUUID().toString();

String params[] = {“GXF004”, “{‘id’:'”+id+”‘,’code’:’编码”+id+”‘,’name’:’名称”+id+”‘}”};

objects = client.invoke(“executeSQL”, (Object[]) params);

System.out.println(objects[0].toString());

} catch (Exception ex) {

Logger.getLogger(CXFTest.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

1.3    数据库函数

1.3.1     平台中配置

3

其中${param}作为参数,需要在paramList这个参数中以Json串形式传入,如”{‘param’:’This is WS call database function Test’}”

1.3.2     调用WS示例

package com.xz.service;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CXFTest {

public static void main(String[] args) {

//基于CXF调用WS测试代码

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

//WS发布地址,其中根据实际情况替换相应内容

Client client = dcf.createClient(“http://localhost:8080/xip/services/platformWS?wsdl”);

Object[] objects;

try {

//executeSQL方法的两个参数,第一个是关键码,第二个是WS所需参数的Json串

String params[] = {“GXF001”, “{‘param’:’This is WS call database function Test’}”};

objects = client.invoke(“executeSQL”, (Object[]) params);

System.out.println(objects[0].toString());

} catch (Exception ex) {

Logger.getLogger(CXFTest.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

1.3.3     数据库函数示例

–供WS调用函数示例

FUNCTION wstest(param VARCHAR2) RETURN VARCHAR2 IS

BEGIN

–返回值格式如下,其中flag 0表示成功,1为失败,在result下还可以加入其它内容,根据自己业务需要自己添加

RETURN ‘<result><flag>0</flag><msg>WEB服务测试函数执行成功。参数值为:’ || param || ‘</msg></result>’;

END;

1.4    Java方法

1.4.1     平台中配置

4

1.4.2     调用WS示例

package com.xz.service;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

public class CXFTest {

public static void main(String[] args) {

//基于CXF调用WS测试代码

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

//WS发布地址,其中根据实际情况替换相应内容

Client client = dcf.createClient(“http://localhost:8080/xip/services/platformWS?wsdl”);

Object[] objects;

try {

//executeSQL方法的两个参数,第一个是关键码,第二个是WS所需参数的Json串

String params[] = {“GXF003”, “{‘param’:’This is the demo for WS calling Java method.’}”};

objects = client.invoke(“executeSQL”, (Object[]) params);

System.out.println(objects[0].toString());

} catch (Exception ex) {

Logger.getLogger(CXFTest.class.getName()).log(Level.SEVERE, null, ex);

}

}

}

 

1.4.3     Java方法示例

package com.xzsoft.xip.platform.conc;

 

publicclass ConcTest {

/**

* concTestest:(供并发调用的Java方法示例)

*

* @param name

*            传入参数name

* @parammsg

*            传入参数msg

* @return返回XML字符串

* @author GuoXiuFeng

* @versionVer 1.0

* @sinceVer 1.0

*/

public String concTest(String name, String msg) {

// 返回结果格式如下,其中flag 0表示成功,1表示失败,并发程序根据flag来标定并发是否执行成功。msg为提示信息

return“<result><flag>0</flag><msg>” + name + ” write ” + msg + “</msg></result>”;

}

 

/**

* wsTest:(供WS调用Java方法示例)

*

* @param param

*            传入参数

* @return返回XML字符串

* @author GuoXiuFeng

* @versionVer 1.0

* @sinceVer 1.0

*/

public String wsTest(String param) {

// 返回字符串格式如下,其中flag为0表示成功,1为失败,msg为提示信息,在result下面可以根据业务需要添加需要的返回内容。其中flag和msg是两个默认必须返回的两项。

return“<result><flag>0</flag><msg>” + param + “</msg></result>”;

}

}

 

2  平台二次开发

2.1    业务界面弹出功能帮助

基于Web Builder或Extjs4.1开发界面,可以通过引入/platform/util/platformUtil.js文件调用方法showFunHelpWin弹出功能帮助页面

参数

funId 功能树id

type 帮助类型 r:只读 rw:读写

title 窗口标题

2.2    自定义登录初始化接口

实现接口com.xzsoft.xip.platform.cust.PlatformCustInterface中的custLoginInit方法

示例代码

package com.xzsoft.xip.platform.cust;

import javax.servlet.ServletContextEvent;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class PlatformCust implements PlatformCustInterface {

@Override

public void custLoginInit(HttpServletRequest request, HttpServletResponse response) {

System.out.println(“Cust login init”);

}

@Override

public void custContextInitialized(ServletContextEvent event) {

System.out.println(“Cust context initial”);

}

@Override

public void custContextDestroyed(ServletContextEvent event) {

System.out.println(“Cust context destroyed”);

}

}

配置系统参数

13

参数值不为空,则在登录初始化的过程中动态加载此参数配置的类,并调用custLoginInit方法。配置类如果没有实现接口PlatformCustInterface将会报错,平台将不再执行此类下的任何方法。

2.3    WEB工程启动初始化接口

实现接口com.xzsoft.xip.platform.cust.PlatformCustInterface中的custContextInitialized方法

示例代码

package com.xzsoft.xip.platform.cust;

import javax.servlet.ServletContextEvent;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class PlatformCust implements PlatformCustInterface {

@Override

public void custLoginInit(HttpServletRequest request, HttpServletResponse response) {

System.out.println(“Cust login init”);

}

@Override

public void custContextInitialized(ServletContextEvent event) {

System.out.println(“Cust context initial”);

}

@Override

public void custContextDestroyed(ServletContextEvent event) {

System.out.println(“Cust context destroyed”);

}

}

 

配置系统参数

14

参数值不为空的时候,在WEB工程启动的时候平台会加载此参数指定的类并调用方法custContextInitialized,如果未实现接口PlatformCustInterface则不会被执行,但不影响平台正常启动。

2.4    WEB工程关闭清理接口

实现接口com.xzsoft.xip.platform.cust.PlatformCustInterface中的custContextDestroyed方法

示例代码

package com.xzsoft.xip.platform.cust;

import javax.servlet.ServletContextEvent;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class PlatformCust implements PlatformCustInterface {

@Override

public void custLoginInit(HttpServletRequest request, HttpServletResponse response) {

System.out.println(“Cust login init”);

}

@Override

public void custContextInitialized(ServletContextEvent event) {

System.out.println(“Cust context initial”);

}

@Override

public void custContextDestroyed(ServletContextEvent event) {

System.out.println(“Cust context destroyed”);

}

}

配置系统参数

15

参数值不为空的时候,在WEB工程关闭的时候平台会加载此参数指定的类并调用方法custContextDestroyed,如果未实现接口PlatformCustInterface则不会被执行,但不影响平台正常关闭。

2.5    平台菜单打开页面URL传入参数

userId 用户ID

roleId 角色ID

funId 功能ID

appId 应用ID

userName 登录用户名

roleCode 角色编码

funCode 功能编码

appCode 应用编码

2.6    平台常用Session变量

平台所有Session变量都存放在Session中的XzSessionVars中,XzSessionVars是一个HashMap

empName 员工姓名

AUTH_MODAL 平台授权模式

userId 用户ID

userName 登录用户名

roleId 角色ID

roleCode 角色编码

roleName 角色名称

2.7    非平台2.0工程集成到平台2.0的实现

将校验是否在平台2.0登录的过滤器放到要集成的工程里

过滤器源码

package com.xzsoft.xip.platform.filter;

 

import java.io.IOException;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import org.apache.commons.net.util.Base64;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

 

/**

* ClassName:CheckLoginFilter Function:

* 验证是否在平台2.0登录的过滤器。放到需要集成到平台2.0的web工程里(必须Java Web工程)

*

* @author GuoXiuFeng

* @versionVer 1.0

* @sinceVer 1.0

* @Date 2015年4月16日下午2:26:50

*

*/

publicclass CheckLoginFilter implements Filter {

 

@Override

publicvoid destroy() {

// TODO Auto-generated method stub

 

}

 

@Override

publicvoid doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) resp;

HttpSession session = request.getSession();

String loginName = (String) session.getAttribute(“xzLoginName”);

String userName = (String) request.getParameter(“userName”);

if (loginName != null) {

chain.doFilter(request, response);

return;

} else {

if (userName != null) {

// 平台2.0提供的WEB服务验证用户是否登录,具体URL根据实际情况进行相应替换

String checkLoginUrl = “http://www.xzsoft.info:8080/xip2/services/platformWS?wsdl”;

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

org.apache.cxf.endpoint.Client client = dcf.createClient(checkLoginUrl);

Object[] objects;

Object[] args = { userName };

try {

objects = client.invoke(“hasLogined”, args);

String hasLogined = (String) objects[0];

if (“Y”.equals(hasLogined)) {

// 将登录用户名写入Session

session.setAttribute(“xzLoginName”, userName);

// 这里可以执行要集成到平台2.0的工程的登录初始化操作

chain.doFilter(request, response);

return;

}

} catch (Exception e) {

 

}

}

}

String url = request.getRequestURL().toString();

String queryStr = request.getQueryString();

if (queryStr != null) {

url = url.concat(“?”).concat(queryStr);

}

// 如果Session内没有登录用户信息,通过调用平台2.0WEB服务校验URL中的userName是否在平台2.0已经登陆过,如果没有登录。以上两个条件都满足则跳到平台2.0的登录页面

// 在平台2.0登录后,平台会调回到原来页面地址。并在URL后加入userName信息

response.sendRedirect(“http://www.xzsoft.info:8080/xip2/login/login.jsp?url=” + Base64.encodeBase64String(url.getBytes()));

}

 

@Override

publicvoid init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

 

}

 

}

2.8    移动APP登录

登录访问URL:

http://ip:port/webproject/platformAction.do?method=appLogin

参数:loginName登录用户名

password登录用户口令(MD5加密后的口令)

返回值:Json串。

登录成功返回{“flag”:”0”,”msg”:“loginKeyCode”} loginKeyCode是平台返回一个UUID需要APP进行记录。在以后移动APP向系统发请求时需要带上参数loginKeyCode和userName两个参数。否则平台将会拦截请求并返回{“flag”:”1”,”msg”: “未登录,无法完成请求!”}

登录失败{“flag”:”1”,”msg”: “登录失败原因”}

 

3   WB快速开发

3.1    WB在页面可以获取的变量

WB在页面可以通过{##}  和{??} 应用的变量

XIP.empName 员工姓名

XIP.AUTH_MODAL 平台授权模式

XIP.userId 用户ID

XIP.userName 登录用户名

XIP.roleId 角色ID

XIP.roleCode 角色编码

XIP.roleName 角色名称

sys.date 系统当前日期含时间(页面初始化那一时间点)

sys.now 字符串格式的当前时间(页面初始化那一时间点)

sys.id 获取ID,此ID在页面初始化时获得,页面不刷新,此值不变

sys.lang 页面语言

sys.uuid 获取UUID,此ID在页面初始化时获得,页面不刷新,此值不变

3.2    获取UUID

在js代码中直接调用Wb.getUuid()

3.3    执行数据库过程

在js代码中调用

Wb.executeProcedure(appCode,procedureName,params,callback)

 

参数

appCode 应用编码

procedureName 过程名(如果是包中过程,需要带包名)

callback 回调函数

示例代码

Wb.executeProcedure(‘xip’,’test’,’guoxiufeng,test’,function(obj){

if(obj.flag!==null&&obj.flag===0){

Ext.Msg.alert(“Success”,obj.msg);

}else{

Ext.Msg.alert(“Faild”,obj.msg);

}

});

 

转载请注明:兴竹集成开发平台 » 平台二次开发文档