NCV5界面集成技术红皮书.docx
- 文档编号:27347482
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:13
- 大小:19.74KB
NCV5界面集成技术红皮书.docx
《NCV5界面集成技术红皮书.docx》由会员分享,可在线阅读,更多相关《NCV5界面集成技术红皮书.docx(13页珍藏版)》请在冰豆网上搜索。
NCV5界面集成技术红皮书
NC界面集成
技术红皮书
NC-UAP5.02
用友NC-UAP
2018-11-06
目录
第一章前言3
第二章与NC进行单点登录4
第三章打开NC节点5
1.通过iframe登录NC系统5
2.通过javascript打开节点5
第四章打开NC待办事务6
1.获取待办事务列表,把其内容显示在相应Portal页面上6
2.打开代办事务6
第五章示例代码7
1.打开NC节点代码7
2.打开代办事务9
第一章前言
在广泛多样的产品集成场景中,基于界面的集成是非常重要的一类。
NC待办事务消息集成到Portal和在第3方产品(包含Portal)中打开NC具体节点是最典型的需求。
例如,很多企业拥有自己的OAPortal,并且是企业领导和员工最常用的办公桌面。
这时候,希望作为其整体信息系统一部分的NC产生的待办事务消息也可以及时出现在其Portal中并且相应角色可以直接点击处理就成为最常见的要求。
企业还希望在相应角色的办公桌面上直接添加NC业务节点的链接,使得其领导或员工可以不登陆而进入到具体NC节点做相应业务。
与第3方产品集成应用时,也常常面对本产品界面嵌入对方产品的需求,例如双方相关单据的互相联查。
无论是代办事务的集成还是NC节点嵌入的集成,都需要完成关键的三步:
●与NC进行单点登录。
●通过页面Iframe(隐藏)登录进NC系统
●通过javascript调用iframe中的NCApplet提供的特定java方法,进行反射类调用。
下面章节进行详细阐述。
注:
该红皮书内容作为支持重点项目特定集成场景的临时技术方案,所公布之方式、API不排除后续版本更新的可能。
第二章与NC进行单点登录
利用NC提供的机制,登录方使用httpGET或者POST方式,NCservlet提交如下信息:
ServletURL如下:
http:
//NC_IP/service/RegisterServlet
提交参数:
accountcode=帐套编码
workdate=工作日期
language=登录语言
usercode=用户编码
pwd=密码
key=生成的唯一key。
其中,前五个参数是NC正常登录需要的。
这里重点解释key参数。
此参数是一个凭证码,一旦注册通过,将可以拿着此key在一定时间内直接登录NC(如10秒中,具体看NC设置)。
因此,单点登录的客户端需要保证此key在NC设置的时间段内不会重复。
一旦注册完成,可直接使用http:
//NC_IP/login.jsp?
key=注册所使用key略过登录界面直接进入NC主界面。
这一步骤仅仅是对第三方系统如何单点登录NC的简单描述。
如果还需要进一步了解,可以参考NC关于此部分的详细描述文档。
第三章打开NC节点
1.通过iframe登录NC系统
单独打开代办事务或者NC任意节点,要调用NCApplet的方法。
因此,需要在完成了NC登录后进行。
照上一步所述,完成单点注册后,在第三方页面中通过一个iframe,将http:
//NC_IP/login.jsp?
key=注册所使用key引入,此时界面应该已经隐藏载入并初始化。
这一步需注意的是:
CApplet载入需要一定的时间,因此调用代码必须等待Applet完全载入完毕才可以进行调用。
2.通过javascript打开节点
第三方页面和Applet交互比较常用的一个方式是通过javascript进行调用。
NCApplet为执行客户端类提供了一个基于反射调用的方法,可以传入客户端可得到的任何java类名和参数,applet负责进行反射调用。
此方法调用方式为:
Applet.callNC(className,methodName,argStr);
其中,applet是javascript获得的applet对象。
callNC是applet提供的方法。
className为欲调用java类,methodName是欲调用方法,argStr为参数。
对于打开NC节点的常用操作,NC默认提供了Nc.ui.sm.webcall.OpenNCNode类的openNode方法。
所以,客户端可以直接按如下方法调用
Applet.callNC(“nc.ui.sm.webcall.OpenNCNode”,“openNode”,“节点号”)
即可打开NC。
第四章打开NC待办事务
分两步:
1.获取待办事务列表,把其内容显示在相应Portal页面上
通过NC提供的服务,获取代办事务列表VO,并展现。
具体代码示例:
IplatFormEntryp=(IplatFormEntry)locator.lookup(IplatFormEntry.class.getName());
MessageFilterfilter=newMessageFilter();
HashMap
//hmFilters.put(MessageVO.SPACE_IN_WORKLIST,filter);
hmFilters.put(MessageVO.SPACE_IN_BULLETIN,filter);
//hmFilters.put(MessageVO.SPACE_IN_PREALERT,filter);
MessageDateTimeVOmsgAggVO=p.getFilteredReceivedMsgs(ncUserPK,pkcorp,hmFilters);
MessageVO[]msgs= msgAggVO.getWorkitems();
if(msgs==null||msgs.length==0)
returnnewMessageVO[0];
Stringtitle=null;
for(MessageVOmsg:
msgs)
{
title=MessageVO.getMessageNoteAfterI18N(msg.getMessageNote());
msg.setMessageNote(title);
}
returnmsgs;
2.打开代办事务
NC代办事务的打开,并非是按照打开节点的方式进行,因此,需要构造一个打开代办事务的客户端类,并通过上述步骤调用。
NCPortal中实现了一个类,可作为样板,内容见下章。
第五章示例代码
针对上面描述的步骤,NCPortal做了实现,以下为实现代码,可提供参考(根据具体应用情况,需要做对应修改)。
1.打开NC节点代码
(打开节点时,只需要用javascript调用openNCNode即可)
/**
*打开被集成的NC系统的某个节点
*@paramfuncode被打开节点的节点号
*/functionopenNCNode(funcode){
try
{
execNCAppletFunction("nc.ui.sm.webcall.OpenNCNode","openNode",funcode);
}
catch(error)
{
}
};
/**
*
*@paramargStr调用类的参数String
*@paramisNcJob是否是打开NC待办事务节点.
*/
functionexecNCAppletFunction(className,methodName,argStr)
{
varncFrame=document.getElementById("$NC_FRAME_ONLY_ONE_ID$");
//此处注意gateUrl的key参数是根据单点登录情况动态形成的
vargateUrl=“http:
//NC_IP/login.jsp?
key=abcd”;
if(ncFrame==null)
ncFrame=initNCFrame(gateUrl);
showProgressPopup();
waitLoadNCApplet(className,methodName,argStr);
};
//等待直到获取到applet
functionwaitLoadNCApplet(className,methodName,argStr)
{
varapplet=null;
try{
varncFrame=$("$NC_FRAME_ONLY_ONE_ID$");
if(ncFrame!
=null)
applet=ncFrame.contentWindow.document.applets["NCApplet"];
log("ncFrame="+ncFrame+"applet="+applet);
}
catch(error){
hideProgressPopup();
showErrorDialog("getappleterror:
"+error.name+":
"+error.message);
return;
}
if(applet==null)
{
setTimeout("waitLoadNCApplet('"+className+"','"+methodName+"','"+argStr+"','"+systemcode+"')",100);
return;
}
exec(className,methodName,argStr,systemcode);
};
//执行NC方法
functionexec(className,methodName,argStr)
{
try{
varncFrame=$("$NC_FRAME_ONLY_ONE_ID$");
varapplet=ncFrame.contentWindow.document.applets["NCApplet"];
hideProgressPopup();
applet.callNC(className,methodName,argStr);
/*
if(isNcJob)
applet.callNC("nc.client.portal.PortalInNCClient","openMsgPanel",argStr);
else
applet.callNC("nc.ui.sm.webcall.OpenNCNode","openNode",argStr);*/
}catch(error)
{
hideProgressPopup();
showErrorDialog(error.name+""+error);
//showMessageDialog("由于NC与Portal不在同一个域中,因此此功能失效!
");
}
}
functioninitNCFrame(url)
{
varframeID="$NC_FRAME_ONLY_ONE_ID$";
varframe=$(frameID);
if(frame==null)
{
frame=document.createElement("iframe");
frame.id=frameID;
frame.style.position="relative";
frame.style.left="0";
frame.style.top="0";
frame.style.width=0;
frame.style.height=0;
frame.frameBorder=0;
frame.width=0;
frame.height=0;
frame.src=url;
document.body.appendChild(frame);
}
returnframe;
};
/**
*当portlet初次进入View时需要调用此方法将过时的iframe信息清楚掉.
*/
functionclearNCFrame()
{
varframeID="$NC_FRAME_ONLY_ONE_ID$";
varncFrame=$(frameID);
if(ncFrame!
=null)
{
ncFrame.src="";
ncFrame.parentNode.removeChild(ncFrame);
}
};
2.打开代办事务
publicclassPortalInNCClient{
publicPortalInNCClient()
{
}
publicvoidopenMsgPanel(StringmessageVOInfo)
{
UIPanelpanel=Desktop.getApplet().getDesktopPanel().getMessagePanel();
FramePanelframePanel=(FramePanel)panel;
MessagePanelmsgPanel=(MessagePanel)framePanel.getToftPanel();
System.out.println("传入的messageVO信息:
:
"+messageVOInfo);
if(messageVOInfo==null||"".equals(messageVOInfo))
return;
String[]infos=messageVOInfo.split(";");
processStringArray(infos);
StringmessageType=infos[0];
MessageVOmsg=createMessageVO(infos);
System.out.println("messageType:
:
"+messageType);
if(messageType.trim().equals("workitem"))
{
/*强制在审批结束时以对话框形式打开.*/
msg.setForceDialogOpen(true);
msgPanel.acceptWorkitem(msg);
}
elseif(messageType.trim().equals("notice"))
msgPanel.acceptBulletin(msg);
elseif(messageType.trim().equals("prealarm"))
msgPanel.acceptPrealert(msg);
}
privateMessageVOcreateMessageVO(String[]infos)
{
MessageVOmsg=newMessageVO();
msg.setPrimaryKey(infos[1]);
msg.setPk_billtype(infos[2]);
msg.setPk_srcbilltype(infos[3]);
msg.setBillNO(infos[4]);
msg.setBillPK(infos[5]);
msg.setBusiTypePK(infos[6]);
msg.setCorpPK(infos[7]);
msg.setActionTypeCode(infos[8]);
msg.setSenderCode(infos[9]);
msg.setSenderName(infos[10]);
msg.setCheckerCode(infos[11]);
msg.setCheckerName(infos[12]);
if(infos[13]!
=null&&infos[13].equalsIgnoreCase("y"))
msg.setIsCheck(newUFBoolean(true));
else
msg.setIsCheck(newUFBoolean(false));
msg.setCheckNote(infos[14]);
if(infos[15]!
=null)
msg.setSendDateTime(newUFDateTime(infos[15]));
if(infos[16]!
=null)
msg.setDealDateTime(newUFDateTime(infos[16]));
msg.setMessageNote(infos[17]);
msg.setTitle(infos[18]);
msg.setMailAddress(infos[19]);
if(infos[20]!
=null)
msg.setMsgType(Integer.parseInt(infos[20]));
if(infos[21]!
=null)
msg.setPriority(Integer.parseInt(infos[21]));
returnmsg;
}
privatevoidprocessStringArray(String[]infos)
{
Strings=null;
for(inti=0;i { s=infos[i]; if(s==null||s.trim().equals("")||s.trim().equalsIgnoreCase("null")) infos[i]=null; } } } 注意: 由于浏览器的安全性限制,在操作NCApplet的时候,需要考虑浏览器”域”问题。 具体请参考这方面的手册。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NCV5 界面 集成 技术 红皮书
![提示](https://static.bdocx.com/images/bang_tan.gif)