用友致远协同办公系统-开发手册
ThirdpartySpace:名称、登录地址、页面地址、打开方式、访问权限、能访问的系统角色 3. 登录过程
o 在A8中点击\空间页签\
o A8产生Ticket,并维护在内存中
o A8带着Ticket访问第三方系统的\登录地址\(loginURL)进行握手
第三方系统根据Ticket回调获取A8身份信息,进行单点登录,并注册Ticket和登录用户的映射 o A8带着Ticket跳转到第三方系统的\页面地址\(pageURL)
4. 说明
o 第三方系统完全依赖和信任A8的身份验证,Ticket由A8发放 o 第三方系统使用与A8完全相同的登录名
或者进行二次开发,自己维护A8登录名与第三方系统用户的映射表。
o 如果当前用户已经登录第三方系统,将跳过② ③,直接到第4步,使用相同的Ticket
1. 认证ticket/获取身份信息的接口系统提供Servlet:
http://a8:80/seeyon/thirdparty.do?ticket=**;A8将通过response header的LoginName返回登录名; 2. 如果第三方回调后认为有异常,请在response header增加名称为SSOLogoutError的信息。
o 第三方系统退出时,要通知A8,地址是
http://a8:80/seeyon/thirdparty.do?method=logoutNotify&ticket=** o 根据情况可将 ③ ④步合并 (省略loginURL)
3.1.2.2 实现方式二:关联系统+扩展栏目
无需开发,使用关联系统管理登录信息,集成外部系统页面。 1、 配置关联系统
以系统管理员system登录A8,使用“关联系统管理”建立一个新的关联系统。关联系统的url为被集成系统的登录链接,将登录需要的信息如用户名和密码定义为关联系统参数。
用友致远协同办公系统-开发手册
2、 建立扩展栏目
由外部系统管理验证信息的栏目有两种:数据集成型栏目(SSOWebContentSection)和功能操作型栏目(SSOIframeSection)。
3、 用户登录后,在个人空间中配置关联系统参数,填写集成系统的登录信息(用户名和密码)。由关联系统维护
被集成系统的用户名、密码以及Session。
用友致远协同办公系统-开发手册
4、 说明
被集成系统的修改:登录不成功,需要在登录请求的response中增加header项:LoginError=***,否则A8无法判断是否成功登录。 3.2 Portlet 3.2.1 概述
Portlet在A8中的概念是首页空间中的一个区域,它包含多个Tab(栏目)。Portlet的开发也就是对Tab栏目的开发
3.2.2 开发说明 3.2.2.1 确定栏目数据
栏目中的数据由首页应用来确定
需要提供的接口:在应用中专为首页提供数据抽取的接口或方法,一般有2个: 1. 数据列表抽取,需要做好按量抽取 2. 数据总数统计 3.2.2.2 确定栏目显示模板
现在栏目显示模板提供了以下几种 (不断扩充中)
1. MultiRowFourColumnTemplete 重复行、4列
? 4列依次是subject、createDate、createMemberName、category
用友致远协同办公系统-开发手册
? 链接:subject、category分别都有链接
? 扩展属性:importantLevel、hasAttachments、bodyType、extIcons
2. MultiRowThreeColumnTemplete重复行、3列
? 3列依次是subject、createDate、category ? 链接:subject、category分别都有链接
? 扩展属性:importantLevel、hasAttachments、bodyType、extIcons
3. ChessboardTemplete 棋盘式
? 每个项目的属性有:icon、name、link
? setLayout(row,colum) 设置行数跟列数 4. HTMLTemplete HTML的输出模式
? Model属性:
1,直接输出,采用innerHTML方式 2,采用内嵌模式
? Html属性:html代码 3.2.2.3 开发说明
包名: com.seeyon.v3x.main.section 命名规范:***Section
其它:必须继承BaseSection
需要实现的方法
1、 getId()
栏目的唯一标识,同时也是Spring Bean定义的Id, 在ajax.xml中需要配置该bean; 直接返回一个有字符+数字组成的字符串,如:pendingSection 2、 getName()
栏目名称的国际化key,需要在资源文件/apps_res/v3xmain/js/i18n下定义 3、 getIcon()
栏目图标,统一放在 /apps_res/v3xmain/images/section下,如 /apps_res/v3xmain/images/section/pending.col.gif 4、 getTotal()
总数,如果不需要显示总数,就返回null
5、 projection()
在这里取得数据,并在显示模板中填充数据 底部链接:
1、 接口templete.addBottomButton(label, link); 2、 通用按钮label
a) 更多 BaseSectionTemplete.BOTTOM_BUTTON_LABEL_MORE
3.2.2.4 注册到系统
找到section.xml,配置spring: group, // 集团空间 custom, // 自定义空间 不设置表示不限制 2、初始化方法必须是init,否则不可用
执行sql脚本把portlet(Tab)添加到系统: 例如: INSERT INTO v3x_portlet_entity_property VALUES(15, 30, 'sections', 'relateMemberSection,projectSection,newLinkSystemSection'); 在其后增加你的sectionid,用逗号分隔 3.2.3 代码示例 以待办事项为例:
例如:
public class PendingSection extends BaseSection { @Override public String getId() { return \; public void setOrgManager(OrgManager orgManager) { } this.orgManager = orgManager; public void setAffairManager(AffairManager affairManager) { } this.affairManager = affairManager; private static final Log log = LogFactory.getLog(PendingSection.class); private AffairManager affairManager; private OrgManager orgManager;