NC中开发一个Servlet接口

外部Web平台向UAP平台传递数据实现方式有多种,这里介绍一种简单的在UAP平台定义Servlet的形式,外部平台去访问该服务即可,实现方式如下

  1. 首先需要在自己的项目中定义一个Servlet、参考如下,需要放在Public端
public class ChangeInfoServlet implements IHttpServletAdaptor{

@Override
public void doAction(HttpServletRequest request,

HttpServletResponse response) **throws** ServletException, IOException {
String name = request.getParameter("name");
String password = request.getParameter("password");

//方式1设置环境变量信息
//NC6X

InvocationInfoProxy.getInstance().setUserDataSource(dsName);
IFwLogin ls = NCLocator.getInstance().lookup(IFwLogin.class);
byte[] token = ls.login(usrcode, pwd, null);
NetStreamContext.setToken(token);
INCUserQueryService service = NCLocator.getInstance().lookup(INCUserQueryService.class);
UserVO user = service.findUserVO(dsName, usrcode);
InvocationInfoProxy.getInstance().setGroupId(user.getPk_group());
InvocationInfoProxy.getInstance().setUserCode(usrcode);
InvocationInfoProxy.getInstance().setUserId(user.getCuserid());

//NC5X
InvocationInfoProxy.getInstance().setUserDataSource(dsName);
InvocationInfoProxy.getInstance().setDefaultDataSource(dsName);
InvocationInfoProxy.getInstance().setLangCode(langCode);
InvocationInfoProxy.getInstance().setCorpCode(pkCorp);

//方式2仿照外部交换平台过掉令牌的方法,适用于NC6
ISecurityTokenCallback sc = (ISecurityTokenCallback)NCLocator.getInstance().lookup(
ISecurityTokenCallback.class);
try{
sc.token("NCSystem".getBytes(),"pfxx".getBytes());
//这之后就可以调用接口了
}catch(Exception err){

}finally{
sc.restore(null);
}
}

2.然后在把该Servlet部署在自己项目中的upm文件中、部署方式如下

<component name="changeinfoservlet" accessProtected="false" remote="false" singleton="true" tx="NONE">
<implementation>nc.demo.changeinfo.changeservlet.ChangeInfoServlet</implementation>
</component>

一旦部署以后的访问地址为 http://127.0.0.1/service/ changeinfoservlet

从外部系统访问uap里面的服务的时候可以通过访问http://127.0.0.1/service/ changeinfoservlet?name=”test”&password=”123”可以通过改方式传递所需要的参数

信息交换平台常用工具类

nc.vo.pfxx.util包下

1.PfxxPluginUtils

处理单据流水号docid与单据pk的对应关系

取得辅助信息中待分配的公司(不可在前台使用)

根据NC单据主键清除交换平台ID对照表中对应的数据,解决数据删除后下次不能再导入的问题 deleteIDvsPKByDocPK

2.PfxxUtils

通过外系统编码获得外系统pk 实际上执行的是NCLocator.getInstance().lookup(IExSystemQueryService.class).queryExSystemPkByCode(exsystemCode)

通过元数据ID(beanID)得到元数据 实际上执行的是MDBaseQueryFacade.getInstance().getBeanByID(beanID);

通过帐套编码取得数据源名称 实际上执行的是NCLocator.getInstance().lookup(IBusiCenterManageService.class).getBusiCenterByCode(accountCode).getDataSourceName()

3.FileUtils 文件操作基本类

将字节流写入文件 public static File writeBytesToFile(byte[] filedata, String filename) throws IOException

从文件中得到字节流 public static ByteArrayOutputStream getByteStreamFromFile(File newfile) throws Exception

将document写入XML文件 public static File writeDocToXMLFile(Node newdoc, String filename) throws IOException

取得文件扩展名 public static String getExtension(File f)

读取一个Excel单元格中的内容 public static String getCellValue(HSSFCell cell)

移动文件 public static boolean moveFile(File srcFile, File dstDir) 实际上通过File的renameTo方法实现

得到Document的字节数据 getDocBinaryByteData

4.HttpHelper http请求帮助类,只能发送Content-Type:text/xml