Mobile Service推送原理其实很简单,调用Report Service执行报表后并保存已执行的历史版本文件(保存在content store库),同时生成mobile 所需特殊元素(上一篇提到过)并生成推送的用户列表。因此仅推送列表中的用户方可在APP端读取推送的指定报表。
鄙人根据后台mob.log,总结出如下推送工作的总体流程草图,
现在一步一步详解:
1、 启动mobile任务计划,当然前提是做一个JOB,请参考”CognosMobile工作原理--前端应用”
2、 发送请求到dispatcher,调用reportservice执行报表
3、 保存执行版本到contentstore资料库
同时,读取推送用户清单并写入MOB_USER
4、 获取报表已执行版本的history信息并写入MOB_HISOTRY,该表只保存history_ID、event-time信息。前端APP读取时根据historyID去content store获取已生成的报表规范。
5、 生成mobile特有的元素并写入MOB_BLOBS和MOB_RESOURCE(在此之前会先写入临时表MOB_TEMPSTORAGE,MOB_TEMPSTOREBLOBS)。里面存储的HASH信息被加密处理了,源代码开发人员也看不懂。当然也没必要去理解它,只要知道它存储报表元素即可。
MOB_BLOBS
MOB_RESOURCE
一个报表推送会产生很多HASH对象,两表通过HASH关联获取BLOB_VALUE值,并解析生成报表页面。
6、 生成MOB_RENDERS记录,每次推送后生成的RENDER_ID是唯一的,当然一个推送对象会产生多个RENDER_ID,也是mobile service对象独有的ID。
生成MOB_RENDER_HISTORY映射记录,用于关联BLOB_HISTORY获取history_id,用于从content store里得到已保存的报表规范。
7、 生成MOB_USER_RENDER映射记录,推送的用户根据RENDER_ID去获取报表对象。
现在我们可以根据这些个物理表画逻辑关联关系。
至此通过几篇文章,我们把MOBILE的工作原理已经全部剖析出来了。当然,以上几篇MOBILE文章纯属个人研究,89%以上正确地涵盖了MOBILE工作原理。而且鄙人相信通过这几篇文章,再加上阁下的理解,您基本上理解透了COGNOS MOBILE了,甚至可以拍着胸脯说,COGNOS MOBILE的任何问题都不在话下了。有了该基础后,下一篇,我们将去解决我在项目上遇到的那一个难题,请继续关注“4、解决The Mobile Service has caught an exception问题”。