技术标签: web前端 NC65 NC移动审批 nc NC集成钉钉
用友NC移动审批APP介绍
1.实现思路:通过在NC增加数据接口,实现服务端为移动审批APP提供数据服务
2.客户端:采用H5开发,可以在多平台运行,支持与NC电脑端一模一样的审批功能。
点击查看servlet代码
效果图如下:以集成钉钉为例
部分代码如下
package nc.bs.gxyy.servlet企鹅892446383;
import java.io.IOException;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.bs.framework.comn.NetStreamContext;
import nc.bs.framework.server.ISecurityTokenCallback;
import nc.bs.framework.server.ITokenProcessor;
import nc.bs.gxyy.ma.login.APPUserLogin;
import nc.bs.logging.Logger;
import nc.pub.gxyy.ima.IMAService;
import nc.pub.gxyy.ma.vo.ReciveVO;
import nc.pub.gxyy.tools.APPDBUtil;
import nc.pub.gxyy.tools.APPRequestTool;
import nc.pub.gxyy.tools.MAConfig;
import nc.vo.pub.lang.UFDateTime;import org.apache.commons.lang.StringUtils;
import org.json.JSONObject;public class MAServlet extends HttpServlet {
/**
* 看博客主页
*/
private static final long serialVersionUID = 892446383;
public MAServlet() {
}
@Override
public void init() throws ServletException {
super.init();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Logger.init("gxyy");
InvocationInfoProxy.getInstance().setUserDataSource(MAConfig.getInstance().getDsName());
//设置安全token
ISecurityTokenCallback sc = (ISecurityTokenCallback) NCLocator.getInstance().lookup(ISecurityTokenCallback.class);
sc.token("NCSystem".getBytes(), "pfxx".getBytes());
ReciveVO reciveVO = null;
try {
reciveVO = APPRequestTool.dealRequest(request);
} catch (Exception e1) {
e1.printStackTrace();
MAResponeUtil.writeRespone(request,response, MAResponeUtil.getErrorResponeJsonString("接收参数发生错误",""));
return;
}String result = "";
try {
if ("login".equals(reciveVO.getFunc())) {
String loginuuid = APPUserLogin.login(reciveVO.getUsercode(), reciveVO.getPassword(), false);
JSONObject obj = new JSONObject();
obj.put("loginuuid", loginuuid);
String usercode = reciveVO.getUsercode();
String username = APPDBUtil.getColValue("sm_user", "user_name", "user_code", usercode);
String cuserid = APPDBUtil.getColValue("sm_user", "cuserid", "user_code", usercode);
String pk_group = APPDBUtil.getColValue("sm_user", "pk_group", "user_code", usercode);
obj.put("username", username);
obj.put("userid",cuserid);
obj.put("pk_group", pk_group);
result = MAResponeUtil.getSuccessResponeJsonString("登陆成功", obj);
//业务处理
}
else {
if(!"debug".equals(reciveVO.getRunmode())){
APPUserLogin.loginCheck(reciveVO.getLoginuuid());
}
if("process".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).process(reciveVO);
}else if("queryDspBill".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryDspBill(reciveVO);
}else if("queryYspBill".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryYspBill(reciveVO);
}else if("queryYbhBill".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryYbhBill(reciveVO);
}else if("queryBillVO".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryBillVO(reciveVO);
}else if("queryFJList".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryFJList(reciveVO);
}else if("queryBillApproveInfo".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).queryBillApproveInfo(reciveVO);
}else if("getUserList".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).getUserList(reciveVO);
}else if("getCanSelectActive".equals(reciveVO.getFunc())){
result = NCLocator.getInstance().lookup(IMAService.class).getCanSelectActive(reciveVO);
}else{
MAResponeUtil.writeRespone(request,response, MAResponeUtil.getErrorResponeJsonString("无法识别的参数", ""));
return;
}
}
MAResponeUtil.writeRespone(request,response, result);} catch (Exception e) {
MAResponeUtil.writeRespone(request,response, MAResponeUtil.getErrorResponeJsonString(e.getMessage(), ""));
System.out.println(e);
e.printStackTrace();
return;
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
public void doAction(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doAction");
doPost(request, response);
}
}
文章浏览阅读543次。控件不能加载的时候,可以暂把工程组的只读属性去掉,重新添加部件引用。然后重新从VSSget Last Version(是否除工程文件可根据需要自己尝试*_*!)_怎么重新添加文件引用
文章浏览阅读545次。A. Vitaliy and Pie(525A)题目大意给你nn道门,在开第nn道门前必须开第n−1n-1道门,或者换句话说就是所有门必须按照1、2、3......n1、2、3......n这样的顺序依次打开,门与门之间都藏有一个钥匙,第一个门之前也有一把钥匙,每个钥匙和一类门一一对应,小写的是钥匙,大写的是门,不分大小写字母相同的话这个钥匙就和这个门对应起来了。一把钥匙开完一扇门之后就会报废,也可_code29724
文章浏览阅读574次。AndroidStudio NDK开发最佳入门实践网上一些介绍AndroidStudio NDK入门的教程,感觉都不是很完整和全面,也没有告诉初学AndroidStudio NDK的同学们一些需要注意的地方。网上的方法大多需要使用javah命令,使用本文的方法将不再使用该命令了,是不是方便了很多。 本文所介绍的是在AndroidStudio上搭建最佳的NDK开发环境,给使用NDK的开发人员最大的方_androidstudio ndk 入门
文章浏览阅读7.1k次。核心提示:现在我来教大家谷歌浏览器怎么下载视频 Google Chrome下载视频方法。谷歌浏览器怎么下载视频 Google Chrome下载视频方法 我们经常会在线看一些网页视频,但是网站的视频下载都只支持自己的客户端,如果每家网站的客户端都安装的话那是一件很麻烦的事情,现在我来教大家谷歌浏览器怎么下载视频 Google Chrome下载视频方法。【Google Chrome下载视频方法】启动chrome浏览器,进行谷歌应用商店,如图在左侧的搜索框中搜索Adkill and Media Dow_外国谷歌视频下载
文章浏览阅读150次。经过几个月的努力,我的新站终于上线了 网站主要使用ASP.net core开发,前台页面很简单,后台的功能稍微复杂一点。这个网站到时候主要发布一些IT学习教程供别人学习,主要包括HTML,JavaScript,JavaEE,ASP.NET等方面的教程,敬请各位关注,谢谢! 网站里面的数据会在后面的日子里持续更新!猿教程_-CSharp教程-C#简介猿教程_-CSha..._霹雳猿
文章浏览阅读334次。TCP通信TCP_服务端 1 import socket as s 2 3 tcp = s.socket(s.AF_INET,s.SOCK_STREAM) 4 tcp.bind(('127.0.0.1', 6666)) 5 tcp.listen(5) 6 while True: 7 # 建立客户端连接 8 clientsocket,addr = tcp.accept() 9 print("连接地址: %s" % str(addr))10 m_python3利用socket实现通信
文章浏览阅读173次。jQuery对象的介绍:案例思路:案例演示:需要引用 jquery-1.11.1.js<!DOCTYPE html><html><head><meta charset="UTF-8"><title>jQuery对象</title><script src="../js/
文章浏览阅读443次。通过ExecutorService.submit()方法提交的任务,可以获取任务执行完的返回值。在实际业务场景中,Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果。1、Callable接口类似于Runnable,只是Runnable没有返回值。2、Callable任务除了返回正常结果之外,如果发生异常,该异常也会被返回,即Future可..._threadpoolselectcallrate.submit( 实现
文章浏览阅读5.8k次,点赞9次,收藏20次。本篇文章主要介绍 Java 的访问权限控制。
文章浏览阅读1.6k次。安装tomcat,这里版本大家随意,只需要拷贝(这里我是官网下载的apache-tomcat-8.5.29)拷贝进 usr/local 然后解压tar -zxvf apache-tomcat-8.5.29.tar.gz然后重点来了,进入apache-tomcat-8.5.29/webapps,里面有一个ROOT目录,进入,然后删掉里面全部文件然后将(dubbo-admin-..._centos7安装dubbo-admin
文章浏览阅读1.6k次。4.0.0 t t 1.0 war t /Library/Java/JavaVirtualMachines/jdk1.8.0_65.jdk/Contents/Home 4.0.8.RELEASE 3.2 5.1.1.Final 3.2.8 1.2.2 1.0.11 2.6.9 2.0.4 1.2.1 2.4.2 5.1_pom 讯飞sdk
文章浏览阅读3.2k次。前几天淘宝联盟官方发布了一则公告:【公告】阿里妈妈严禁恶意套取平台补贴通知内容截图如下:联盟公告内容相对来说,比较模糊,为了维护xxx,严禁xxx,如果违规xxx,将处理xxx,都是很套话的模板,不懂行的人可能听得云里雾里,今天,霍常亮带着大家解读一下这则公告。首先,我们需要了解什么是平台补贴,举几个简单的例子:1、淘宝签到红包2、淘宝特价版定向补贴淘宝签到红包淘宝签到红包的玩法很普遍,去年我还特意写过一个文章,《淘宝签到红包商品直达链接,如何转化为自己的链接?》简单的说,淘宝签到红包就_怎么可以套平台补贴