




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
A8接口和增值开发手册A8接口和增值开发手册A8接口和增值开发手册A8接口和增值开发手册编制仅供参考审核批准生效日期地址:电话:传真:邮编:A8平台接口和增值开发手册©2006UFSeeyonCo.,Ltd.Allrightsreserved.ThisdocumentcontainsinformationthatisproprietaryandconfidentialtoUFSeeyon.,whichshallnotbedisclosedoutsidetherecipient'scompanyorduplicated,usedordisclosedinwholeorinpartbytherecipientforanypurposeotherthantoevaluatethisfile.AnyotheruseordisclosureinwholeorinpartofthisinformationwithouttheexpresswrittenpermissionofUFSeeyon.isprohibited.Date: 200Author: 王文友Version: TOC修改记录 31. 概述 4 编写目的 4 开发背景 4 应用价值 4 接口范围 52. 二次开发接口 6 接口一览 6 服务列表 63. Portal集成 7 单点登录(SSO) 7 外部平台集成A8 7 实现说明 7 接口说明 7 代码示例 8 部署说明 9 A8集成第三方系统 9 实现方式一:Ticket 9 实现方式二:关联系统+扩展栏目 11 Portlet 12 概述 12 开发说明 12 确定栏目数据 12 确定栏目显示模板 12 开发说明 13 注册到系统 13 代码示例 14 待办事项和跟踪事项 20 新闻和公告 204. 消息集成 21 消息通道 21 概述 21 接口说明 21 方法说明 21 注册到系统 21 原理说明 22 代码示例 22 短信接口 23 概述 23 接口说明 23 注册到系统 25 原理说明 26 代码示例 275. 组织模型同步 28 初始化同步 28 导出 28 导入 29 实时同步 29 实现A8组织模型事件监听接口 29 注册事件监听 356. BPM集成 35 准备 36 外部系统发起A8表单流程 37 轮询完成的表单流程 37 导出A8表单流程到外部系统 377. 附录 38 术语表 38修改记录日期修改人修改内容备注200王文友创建文档,编写文档模板。2008-12-1王文友增加了安装服务文档。2008-12-23王文友增加了文档导出接口例程。2008-12-29王文友合并刘娜组织模型文档,加入例程;合并于荒津BPM文档。2009-王文友合并张勇Portal和消息文档,拆分API文档。2009-06-16张勇增加单点登录不打开页面方式说明和待办事项接口说明2009-9-27王文友增加组织模型同步和BPM集成概述编写目的本手册主要面向二次开发人员,内容涵盖A8平台的二次开发、第三方应用集成。如果需要更详细的开发信息,请参考《平台API参考手册》。开发背景接口的目标是与第三方应用集成,达成松散耦合,紧密集成的目标;与异构应用集成;降低二次开发的技术难度;规范化二次开发,提升二次开发的稳定性;保证二次开发的延续性,降低二次开发应用升级难度。应用价值目前平台开放的接口支持:组织模型同步
使用组织模型导入接口,实现外部系统到A8的组织模型初始化同步;
调用组织模型管理远程接口,在外部系统组织模型发生变化时实时同步到A8。
实现组织模型事件接口,将A8组织模型变更实时同步到外部系统。表单流程集成
外部系统通过BPM集成远程接口发起A8的表单流程,在A8中审批流转后回到外部系统,实现表单流程的打通。文档导出
使用文档导出SDK,将A8的协同、公文、新闻、公告、调查和讨论导出到外部系统,满足数据交换和归档的需求。Portal集成
A8Portal可以集成外部系统的页面,也可以将A8集成到第三方Portal中,并且实现单点登录。消息集成
外部通过消息通道,实时获取A8中的消息。可以将A8的消息以邮件、IM(如GKE、RTX)消息和短信形式发送。
外部系统通过消息接口向A8指定用户发送消息。待办事项集成外部系统通过待办事项接口,可以得到A8待办事项的列表,并且可以处理待办事项。接口范围A8协同办公平台采用Java开发,支持Oracle、mysql和SqlServer数据库。平台提供了以下接口:二次开发接口:
提供本地开发的JavaSDK和WebService远程接口,涵盖组织模型同步与导入导出、文档导出、表单与流程集成、新闻与公告发布支持。Portal接口:
提供页面集成和单点登录接口,实现外部应用在A8-Portal的集中展现。消息(短信)接口:
提供外部系统获得A8协同办公平台消息的机制。除标准化产品提供的短信集成支持外,A8还提供了短信二次开发接口,支持与特定的短信运营平台集成。二次开发接口预备知识:WebServiceXML支持WebService调用的编程语言其中Java已验证,C#、Php未经验证,请参照Java例程及axis2文档进行开发。A8平台接口提供基于axis2实现的标准Webservice。可以采取多种方式进行客户端开发。本指南所有远程接口例程使用axis2的ADB(Axis2DataBindingFramework)stub方式进行开发。为便于二次开发,在client/demo目录中提供了一个示例应用,示例包括以下内容:单点登录、组织模型同步、组织模型导出、公告新闻导出、文档导出、表单流程查询、BPM集成、消息集成、Portlet栏目集成接口一览组织模型接口:提供组织模型导入和导出接口,可以实现其他HR与A8的集成,其他系统可以与A8实现组织模型和人员信息同步。文档接口:提供了A8文档导出接口,支持协同、公文、新闻、公告等信息导出,通过此接口可以实现与档案软件的集成,以及A8信息发布到外部网站。表单流程接口:提供了外部数据导入A8进行流转审批,以及A8流程审批信息导出到其他系统(如ERP),通过此接口可以实现政府外网审批信息提交到内网进行流转审批,ERP数据可以转入A8进行流转,A8流程审批信息也可以转入ERP进行结果管理。新闻和公告发布接口:提供了单位新闻和公告的发布。待办事项接口:提供A8待办事项列表。服务列表A8平台提供以下服务:说明验证服务authorityService用户身份验证服务人员管理服务personService人员的创建、修改、删除和启用/禁用。部门管理服务departmentService部门的创建、修改、删除和启用/禁用。岗位管理服务ocupationService岗位的创建、修改、删除和启用/禁用。职务级别管理服务otypeService职务级别的创建、修改、删除和启用/禁用。单位管理服务accountService组织模型数据服务organizationDataService人员、部门、岗位和职务级别数据导入导出服务。文档导出服务documentService协同、公文、新闻、公告、讨论、调查数据导出服务。新闻公告发布服务documentService新闻和公告发布发布服务。表单服务formService表单定义与数据导出服务BPM服务BPMService业务单据流程集成服务。事项服务affairService待办事项和跟踪事项集成服务。消息服务messageService外部系统发消息到A8的服务。文件服务downloadService
uploadServiceA8的附件下载和上传服务。服务详情参见《平台API参考手册》。Portal集成单点登录(SSO)外部平台集成A8实现说明也就是从外部系统登录到A8,这种认证是完全信任外部系统的。单点登录有2种效果:单点登录成功后直接打开A8主页面单点登录成功后并不打开A8主页面,A8维护ticket信息和登录用户信息,为以后请求服务作认证使用,比如:请求获得A8待办事项列表服务。需要配置中一个属性如下:<propertyname="forward"value="false"/>登录过程:人员登录外部平台外部平台带着ticket和from跳转到A8-/login/ssofrom=*&ticket=*如果A8登录正常,会在responseheader中增加SSOOK,否则增加SSOError例如:"/login/ssoticket="+encodeURIComponent("<%=("ticket")%>")+"&from=gke";A8根据from取得握手bean,也就是springBeanid例如:<beanid="gke"class="">调用握手bean由外部系统认证ticket并返回A8的登录名把ticket和username维护在内存A8带着ticket跳转到/login/proxy,也就是执行一个servletA8JAAS的取得用户身份信息A8退出时,会通过SSOLoginHandshakeInterface的logoutNotify()通知到外部系统外部系统退出时,访问A8/login/ssologoutfrom=*&ticket=*通知A8接口说明外部平台需要有A8登录名的映射表或者使用相同的登录名JAAS的DefaultLoginModule验证用户名(不验证密码)SSOLoginHandshakeInterface与from映射,需要配置或二次开发,系统提供通用的SSOLoginHandshakeServletImplA8的验证系统完全依赖和信任外部系统(存在风险)配置文件:ApacheJetspeed2\webapps\ROOT\WEB-INF\classes\(如无可自己创建)<xmlversion=""encoding="UTF-8"><!DOCTYPEbeansPUBLIC"-etAgentModelList(memberId); List<AgentModel>_agentModelToList=() .getAgentModelToList(memberId); List<AgentModel>agentModelList=null; booleanagentToFlag=false; booleanisPloxy=false; if(_agentModelList!=null&&!()){ isPloxy=true; agentModelList=_agentModelList; }elseif(_agentModelToList!=null&&!()){ isPloxy=true; agentModelList=_agentModelToList; agentToFlag=true; }else{ isPloxy=false; } Map<Integer,AgentModel>agentModelMap=newHashMap<Integer,AgentModel>(); if(isPloxy){ for(AgentModelagentModel:agentModelList){ StringagentOptionStr=(); String[]agentOptions=("&"); for(StringagentOption:agentOptions){ int_agentOption=(agentOption); if(_agentOption== .key()){ .key(),agentModel); }elseif(_agentOption== .key()){ agentModel); }elseif(_agentOption== .key()){ ( agentModel); } } } } return(memberId,agentModelMap,null,null, null,agentToFlag); } publicBaseSectionTempleteprojection(Map<String,String>preference){ MultiRowFourColumnTempletec=newMultiRowFourColumnTemplete(); Useruser=(); LongmemberId=(); LongproxyId=(); (false);etAgentModelList(memberId); List<AgentModel>_agentModelToList=() .getAgentModelToList(memberId); List<AgentModel>agentModelList=null; booleanagentToFlag=false; booleanisPloxy=false; if(_agentModelList!=null&&!()){ isPloxy=true; agentModelList=_agentModelList; }elseif(_agentModelToList!=null&&!()){ isPloxy=true; agentModelList=_agentModelToList; agentToFlag=true; }else{ isPloxy=false; } Map<Integer,AgentModel>agentModelMap=newHashMap<Integer,AgentModel>(); if(isPloxy){ for(AgentModelagentModel:agentModelList){ StringagentOptionStr=(); String[]agentOptions=("&"); for(StringagentOption:agentOptions){ int_agentOption=(agentOption); if(_agentOption== .key()){ .key(),agentModel); }elseif(_agentOption== .key()){ agentModel); }elseif(_agentOption== .key()){ ( agentModel); } } } } List<Affair>affairs=(memberId, agentModelMap,null,null,null,agentToFlag); if(affairs==null){ returnnull; } for(Affairaffair:affairs){ url=""; row=(); StringforwardMember=(); IntegerresentTime=(); Stringsubject=(affair .getSubject(),forwardMember,resentTime,orgManager,null); intapp=(); LongobjectId=(); (subject); ApplicationCategoryEnumappEnum=ApplicationCategoryEnum .valueOf(app); switch(appEnum){ casecollaboration: row .setLink("/method=detail&from=Pending&affairId=" +()); row .setCategory(app, "/method=collaborationFrame&from=Pending"); break; casemeeting: row .setLink("/method=myDetailFrame&id=" +objectId); (app,"/method=listHome"); break; caseedocSend: caseedocRec: caseedocSign: row .setLink("/method=detail&from=Pending&affairId=" +()); (app,EdocUtil .getEdocCategroryPendingUrl())); break; caseexSend: row .setLink("/method=sendDetail&modelType=toSend&id=" +()); if(appEnum .getKey()))){ url="/method=listMainEntry&modelType=toSend"; } (app,url); break; caseexSign: row .setLink("/method=receiveDetail&modelType=toReceive&id=" +()); if(appEnum .getKey()))){ url="/method=listMainEntry&modelType=toReceive"; } (app,url); break; caseedocRegister: ( "/method=entryManager&entry=newEdoc&comm=register&edocType=" + +"&exchangeId="+() +"&edocId="+(), if(appEnum .getKey()))){ url="/method=entryManager&entry=edocFrame&from=listRegisterPending"; } (app,url); break; casebulletin: ("/method=audit&id=" +(),; booleanisGroup=().intValue()== .ordinal()); (app, "/method=auditListMain&spaceType=" +(isGroup0:1)+"&bulTypeId=&type=&from=" +(isGroup"Group":"")); break; casenews: ("/method=audit&id=" +(),; booleanisGroupNews=().intValue()== .ordinal()); (app, "/method=auditListMain&spaceType=" +(isGroupNews0:1) +"&newsTypeId=&type=&from=" +(isGroupNews"Group":"")); break; caseinquiry: ("/method=survey_check&bid=" +objectId,; (app,"/method=recent_or_check"); break; casemeetingroom:{ ("/method=createPerm&openWin=1&id=" +objectId,; (app,"/method=index"); } } V3xOrgMembermember=null; try{ member=()); }catch(BusinessExceptione){ ("",e); } ()); (member)); ()); if())){ (true);etLoginName(); RTXNotifyValueBeanvalue=newRTXNotifyValueBean(); Stringcontent=(); =().getName(); . (value); }catch(Throwablee){ ("",e); } } } terator();();){ AdapterMobileMessageMangeram=(); if()){ adapterMobileMessageManger=am; break; } }只在启用了移动应用的前提下加载wap短信网关 Map<String,AdapterMobileWapPushManager>aWapMsgM=; if(!()){ if for(Iterator<AdapterMobileWapPushManager>iter=().iterator();();){ AdapterMobileWapPushManageram=(); if()){ adapterMobileWapPushManager=am; break; } } } else{ ("没有移动应用插件,将不启用Wappush"); } }从代码中可以看出短信插件只会加载一个短信接口 if(booleanWappush&&isCanUseWapPush(),())){et("success"); if(success)){ returnfalse; } String[]str=(","); booleansuccessSend=false; for(inti=0;i<;i++){ if(str[i].e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油漆翻新劳务合同范本
- 大蒜代购代销合同范本
- 建筑增项合同范本
- 承租房屋合同范本
- 小院地皮出售合同范本
- 转让房屋出售合同范本
- 可视楼宇对讲合同范本
- 企业续签合同范例
- 代耕代种合同范例
- 保健器械采购合同范例
- 【北师大版】2024-2025学年七年级数学下册教学工作计划(含进度表)
- 2025广东深圳证券信息有限公司人员招聘笔试参考题库附带答案详解
- 2024江苏盐城市交通投资建设控股集团有限公司招聘笔试参考题库附带答案详解
- 2025年3月18日第25次全国爱肝日中西医结合逆转肝硬化课件
- 2025年南京机电职业技术学院单招职业技能测试题库必考题
- 职务侵占罪预防
- 预防艾滋病母婴传播工作职责
- 人工智能辅助法律文书处理
- 株洲市天元区招聘社区专职工作者考试真题2024
- 4.2做自信的人(课件) 2024-2025学年统编版道德与法治七年级下册
- 《木兰诗》历年中考古诗欣赏试题汇编(截至2024年)
评论
0/150
提交评论