OA消息设计文档
简介
蜜蜂的普通应用消息只能用来显示通知信息,缺乏消息发送者、接受者间的交互手段,这里OA消息就是为了解决这个问题而出现,其基本需求如下:
OA消息支持简单的交互功能,有OA流程处理按钮。
OA消息有状态,客户应用服务器调用openapi可以设置OA消息的状态;客户端依消息的不同状态显示不同的内容。
OA消息文本内容支持富文本;可以定制显示文本的:字号、颜色、样式( 加粗、斜体)
总体设计
如图所示,OA服务器(客户应用服务器)可以在OA消息的流通中,根据消息格式规则构建消息内容,推送互动流程的进行。
OA消息根据不同状态显示不同的内容; 当处于未处理状态时,有供交互点击处理的按钮; 当处于已处理状态时,显示OA消息的状态和内容。
OA消息的操作按钮的名称和行为由OA消息定义,OA消息按钮的点击触发后台发起一次HTTP请求, HTTP请求的URL由OA消息定义。
OA服务器调用API(openapi)接口修改OA消息的状态,蜜蜂服务器通知客户端(发起方、处理方)更新指定OA消息的显示。
消息状态定义
OA消息状态是一个0-20的数值。
OA消息状态分为两类:1-10是已处理状态; 11-20未处理状态; 0:保留。
已处理状态:客户端每次显示OA消息时,不需要再次向蜜蜂服务器查询消息状态。
未处理状态:客户端每次显示OA消息时,都必须向蜜蜂服务器查询此OA消息的当前状态。
OA消息状态默认是0。
OA消息定义
如上图,描述了一个OA消息的组成结构:
每个消息由消息标题与若干个消息元素构成, 消息元素最多10个。
消息标题的内容有OA消息给出,是一个固定的元素,每个OA消息必须有。
每个元素显示时独占消息的一行, 元素与消息显示控件同宽。高度由消息内容定义,针对消息内容自适应。
每个消息元素可以指定一个状态值,只有当消息的当前状态与元素的状态值相等时,才会显示此消息元素; 如果元素没有定义status值,此元素在任何状态下都显示。
一条OA消息实例如下:
{
"appId":3,
"color":"blue",
"detailAuth":1,
"detailURL":"http://192.168.35.145/msgtest2/event/detail?eventIdx=%7BDA92EB17-FE75-E7E8-2DE6-4CA6EE2D3BBB%7D",
"elements":[
{
"imageId":"NjIwNzY1MjIvMjU2L3FpbmdqaWEuanBnXl5edGFuZ2hkZnNeXl5GRjA2OTNBQUE5NUM0NzQ5Mjc1MjQ0NjUyMzQ4OTczRV5eXnRhbmdoZGZzXl5eMTI0Mzk$",
"imageType":"fileid",
"type":"image"
},
{
"content":[
{
"bold":1,
"color":"#000000",
"size":1,
"text":"2016-01-21 13:24:54 "
},
{
"color":"#808080",
"text":"审批类型:"
},
{
"color":"#000000",
"text":"请假 "
},
{
"color":"#808080",
"text":"申请人:"
},
{
"color":"#000000",
"text":"maoyandev_b1 "
},
{
"color":"#808080",
"text":"审批人:"
},
{
"color":"#000000",
"text":"maoyandev_b1 "
},
{
"color":"#808080",
"text":"申请内容:"
},
{
"color":"#000000",
"text":"请一天假,望批准 "
},
{
"color":"#000000",
"name":"opinion",
"text":"审核意见:"
}
],
"type":"text"
},
{
"buttons":[
{
"needSuggestion":"1",
"noEmptySuggestion":"0",
"suggestionName":"opinion",
"suggestionTitle":"审核意见 ",
"title":"同意",
"url":"http://192.168.35.145/msgtest2/event/process?forAction=true&eventIdx=%7BDA92EB17-FE75-E7E8-2DE6-4CA6EE2D3BBB%7D&eventStatus=1",
"urlauth":1
},
{
"needSuggestion":"1",
"noEmptySuggestion":"0",
"suggestionName":"opinion",
"suggestionTitle":"审核意见 ",
"title":"拒绝",
"url":"http://192.168.35.145/msgtest2/event/process?forAction=true&eventIdx=%7BDA92EB17-FE75-E7E8-2DE6-4CA6EE2D3BBB%7D&eventStatus=2",
"urlauth":1
},
{
"needSuggestion":"1",
"noEmptySuggestion":"0",
"suggestionName":"opinion",
"suggestionTitle":"审核意见 ",
"title":"无认证测试",
"url":"http://192.168.35.145/msgtest2/event/noauthtest?status=15",
"urlauth":0
}
],
"status":15,
"type":"action"
},
{
"content":[
{
"color":"#808080",
"text":"状态:"
},
{
"color":"#0000FF",
"size":3,
"text":"待审批"
}
],
"status":16,
"type":"text"
},
{
"content":[
{
"color":"#808080",
"text":"状态:"
},
{
"color":"#0000FF",
"size":3,
"text":"已同意"
}
],
"status":7,
"type":"text"
},
{
"content":[
{
"color":"#808080",
"text":"状态:"
},
{
"color":"#FF0000",
"size":3,
"text":"已拒绝"
}
],
"status":8,
"type":"text"
}],
"status":15,
"title":"审批",
"titleElements":[
{
"color":"red",
"status":1,
"title":"已同意"
},
{
"color":"yellow",
"status":2,
"title":"已拒绝"
},
{
"color":"red",
"status":7,
"title":"已同意"
},
{
"color":"yellow",
"status":8,
"title":"已拒绝"
},
{
"color":"gray",
"status":15,
"title":"审批"
}],
"toUsers":[
"maoyandev_b1"
]
}
OA消息元素
由元素json对象中type确定,分别是:文本(text),图片(image),action。
文本元素
显示富文本,富文本支持定制字号(预定义字号:大,中,小等)、颜色、格式(加粗)。文本元素的高度以文本内容为准,像聊天消息显示那样,自适应高度。
图片元素
此元素显示一个图片,元素的高度有最大值。
当图片的宽度大于元素宽度时,图片以拉伸显示;高度不得超过最大高度。当图片的宽度小于元素宽度且高度不大于元素最大高度时,图片不拉伸;如果图片高度大于最大高度,则拉伸显示。
点击此图片时,在独立的窗口中显示完整的图片。
3) Action元素
Action元素是预定义若干按钮的元素; 最多4个按钮。
点击按钮时,后台向OA消息指定的URL发起HTTP请求,按钮的“标题”、“点击动作URL”由OA消息定义("实例OA消息button\url元素")。
button执行后,对应URL接口要返回执行操作后的状态($newStatus),审核意见附加数据(externalData)。Eg: { “externalData”:{ “text”:{ “opinion”:”value1”, //opinion:本次意见名,value1:意见内容 } }, “reqId”: "1452158164.83546800.11292", “status”:7 } 以方便客户端能根据响应即时显示操作结果。附加数据
消息内容格式
1) OA消息定义
title: 字符串,OA消息的标题,如果此字段为null或“”,则UI中标题栏位隐藏不显示。
Status: 整形,OA消息的默认状态值;缺省默认是0。
Color: 字符串, 预定义标题配色模版,可选名称值(大小写不敏感):
"red", 赤红
"yellow", 蜜蜂黄
"green", 柳绿
"gray", 铅灰
"blue", 主题蓝
"lightblue", 薄蓝
默认值:主题蓝
Elements:一个元素的JSON格式字符串,是消息元素对象的数组
“elements”: [
{ <elem>},
{elem2},
……
];
DetailURL: 消息详情URL;
DetailAuth: 数值型,指定打开详情URL时,是否带上认证信息。1:带上认证信息;0:不带,默认0。
titleElements:标题栏扩展元素,定义了不同状态下标题栏对应的颜色与内容; 定义格式上节所示; 有以下几点说明:
"titleElements":[{
"stauts": 15
"title": "asdfasdrqwerqwer",
"color": "blue",
},
{
"stauts":18
"title": "asdfasdrqwerqwer",
"color": "red"
}]
如果有titleElements字段,且有OA消息状态对应的标题栏元素时,显示元素定义的内容与颜色。
如果有titleElements字段,但是没有OA消息状态对应的标题栏元素时,显示OA消息title, color字段定义的内容与颜色。
如果没有titleElements字段,显示OA消息title, color字段定义的内容与颜色。
2) 文本元素
{
"type": “text”, // 元素类型
"status": 1, // 当前元素的状态
"content": {}, // type为text时, 指定文本元素的内容; 仅在type为text时有效。
}
type:字符串,指定消息的类型,文本元素类型值:text。
status: 整形, 指定此消息元素对应的消息状态值, 缺省默认是null,在任何状态下都显示。
content: 字段有三种数据格式,纯文本、JSON对象、JSON数组对象。
当content字段的内容是纯文本时, UI直接以默认的颜色、字号显示文本内容,不加粗、斜体;如:
content”: “Hello, world”
当content字段是一个JSON对象时,描述的是一段富文本, 具体定义如下:
"content": {
"size": 1,
"color": “#ff00ff”,
"bold": 1,
"urlauth": 1,
"url": “http://www.baidu.com”, // 文本连接URL
"text": "文本内容"
}
size:整形;定义显示文字的大小,共有3(大),2(中),1(小)三种字号,默认值:2。
color: 字符串, 颜色值定义格式“#<RGB颜色的十六进制值>”, 如:黑色 #000000, 红色 #FF0000; 默认是黑色(参照视觉给定的颜色,不是纯黑色)。
bold:整形,指定是否加粗显示文字;候选值:1(加粗),0(不加粗),默认值:0。
urlauth: 整形,指定打开本json对象描述的链接时,是否附上统一认证信息。
url: 字符串,定义一个URL连接;当此字段存在且不为空时,忽略color的用户定义值,color显示使用默认颜色,建议用:#0000ff, 且带有下划线。
text: 字符串, UTF-8格式的文本内容。
3) 图片元素
{
"type":"image",
"status": 1,
"imageType": ""
"imageId": ""
}
type:字符串,指定消息的类型,图片元素类型值:image。
status: 整形,指定此消息元素对应的消息状态值,缺省默认是null,在任何状态下都显示。
imageType: 字符串, 指定imageId值的类型,候选值:fileid,url。默认url。
imageId: 字符串,指定图片文件的地址。
当imageType是fileid时, imageid字段的内容是一个Image文件在FS中的ID。如:“imageid”: “123123kjsdkfjsdkfsdlfsdfksdfksdfjsdfl”,当imagetype是url时,imageid字段的内容是一个图片文件的URL, 如:“imageid”: “http://www.baidu.com/icon.png”。
4) Action元素
{
“type”: “action”,
“status”: 1,
“buttons”: [{
“title”, “按钮标题“,
“url”: “http://www.qanshi.com/url.php?”,
“urlauth”: 0,
“needSuggestion”:1,
“noEmptySuggestion”:1,
“suggestionTitle”:”测试审核意见”,
“suggestionName”:”opinion1” //审核意见对象名(见审核意见文档)
}]
}
type:字符串,指定消息的类型,action元素类型值:action。
status: 整形,指定此消息元素对应的消息状态值, 缺省默认是null,在任何状态下都显示。
buttons: JSON数组,每个数组元素定义个按钮;按钮元素的JSON字段定义如下:
title: 字符串,按钮的标题。
url: 字符串,按钮被Click时,触发的URL链接。
urlauth: 数值,打开URL时是否要带上认证信息,1:带,0:不带;默认0.
needSuggestion: 整形, 1:需要意见, 0:不需要意见; 默认不需要。
noEmptySuggestion: 整形, 1: 意见内容不能为空, 0: 意见内容可为空:默认0.
sggestionTitle:”审核意见”输入框图的标题,如下图的“红色框”。默认“审核意见”,PC端有效。
suggestionName:审核意见对象名。
消息URL约定
1) 链接URL
文本元素的内容JSON描述部分可以赋值一个URL, 显示的时候就像网页的URL连接;点击此链接时, PC客户端直接在浏览器中打开URL,移动客户端在内嵌的WebView中打开此URL。
除URL外,还可以指定一个附加属性;当附加属性设置“urlauth”为1时,则打开URL的规则与打开应用中心的应用是一样的,会带上统一认证的信息, 默认”urlauth”为0.
2) Action URL
Action元素按钮的URL, 不使用浏览器或者WebView打开;在后台发起一个HTTP请求。
所有Action按钮打开URL方式还有一个附加属性;当附加属性设置“urlauth”为1时,则打开URL的规则与打开应用中心的应用是一样的,会带上统一认证的信息,默认”urlauth”为0.
Action URL的答复约定为一个Json格式的数据; 定义如下:
{
“externalData”:{
“text”:{
“opinion1”:”value1”,//opinion1:本次意见名,value1:意见内容
}
},
“status”: <newstatus>
}
status: OA消息新的消息状态, 客户端要以此消息状态刷新消息的显示;
3) 详情URL
每个OA消息有一个对应的详情URL字段,当在客户端界面点击详情的区域(由产品定义)时,PC客户端直接在浏览器中打开URL,移动客户端在内嵌的WebView中打开此URL。 由独立的字段detailAuth定义是否在打开时带上认证信息。
4) 统一认证信息
统一认证信息是附在URL上的,本质是2个URL变量, 统一认证信息变量定义如下:
uc_account: 蜜蜂客户端当前用户登录名作为此变量的值。
uc_token:蜜蜂客户端当前用户SessionId作为此变量的值。
举例说明:http://www.baidu.com/a/b/c?uc_account=xxxxxxx&uc_token=xxxxxxxx;