建乔移动办公平台之LOTUS办公专题

 
 
 
 
 
LOTUS 办公专题
 
 
 
 
 
                            CHE 300 5 �C W D �C 200 7
                       Version 3 .0
 
 
 
 
 
 
Approved by :                               
 
 

Copyright Ó March , 2007 by mastudio Inc.
This document and the information contained in it shall not be used, or published, or disclosed outside of mastudio  in whole or in part without Mastudio’s consent. The copyright notice does not imply publication of this document.
 

1         背景

随着信息科技的高速发展,特别是网络技术和移动通信技术在全世界的推广,人们获取信息的手段发生了巨大变化,尤其是那些对实时信息要求强烈、移动性强的单位和个人,移动计算和无线数据技术将为他们的工作带来崭新的变化。
 
MAStudio 平台移动办公模块就是在这种技术发展的背景下提出来的,为政府机关、企事业单位移动办公提供的一套简洁实用的解决方案,目的是帮助用户高效率地把现有的计算机邮件和计算机办公应用借助互联网和无线网络扩展到智能手机或PDA上,使处于移动状态的工作人员可以随时随地通过手机上网方式继续保持与办公自动化系统的无缝衔接,随时查阅公文。
 

2         概要

移动办公属于MAStudio平台的一个模块,在移动平台的基础实现移动办公,通过连接到IBM Lotus系统,实现移动批阅文件、公文流转、公文签发,实时查阅会议通知、内部公告、灵活会捷,提高企业内部效率。
MAStudio 平台的优势在于将现有的办公系统实现其移动的特性,真正做到“随时随地”,无缝挂接运行中的办公平台,不需要对原有系统作改动、不影响原系统的运行。
 
 
 
 
 
 
 

3         Lotus Domino平台的移动办公的现状

目前国内使用Lotus Domino平台做为OA系统的政府和企业都是使用OA比较长的,比较有经验的用户;他们是最清楚OA给他们能带来什么效果。他们经过几年或10多年的应用;OA的使用已经进入一个成熟稳定期;需求上也相对比较稳定;每加一个需求都比较慎重;不希望对原由的结构进行调整。
目前随着智能手机和无线网络的发展;已经具备了实现移动OA的外部环境。对于Lotus Domino原有的用户来说,他们领导层也非常迫切需要在手机上来进行公文审批;但是信息部门对原来OA实施的时候面对的周期过长、代码反复调整、领导需求变化、实施推广等等以前头痛的问题还历历在目;现在好不容易OA稳定下来;而且又用得很顺畅了;如果现在要上移动OA;又需要将OA大面积的改造;带来的风险是非常高的;
如何实现能不需要修改现有OA的结构甚至代码;从而能将Lotus Domino OA拓展到手机上使用;这个就是目前Lotus用户主要的困境。
由于Lotus Domino有良好的二次开发环境(其Designer简单易用);使得用户经常可以在原来OA厂家提供的产品上进行深层次的改造;二是这些用户通常都有信息部门;这些信息部门大多数都具有一定的开发能力;这使得在上移动OA的时候,他们希望得到的不仅仅是一个产品;事实上想要一个平台;再这个平台上可以自己对其进行任意的功能增加、修改;这样才符合Lotus Domino用户群的需要。
MAStudio 平台正好解决了以上这两个问题:
MAStudio 提供了网页接口模式(HTTP方法);就是通过模拟浏览器向DOMINOHTTP SERVER提交(post/get)URL来获取到文档(openDocument)、视图(openView)、运行现有的代理(openagent)、新建文档(openForm)等等操作;充分利用现有domino的设计元素来进行数据交互。
MAStudio 是一个完整的平台;其全称为移动(mobile)应用(application)工作室(Studio)。我们有优秀的配置文件的设置;客户可以根据自己的需求,随意修改;包括用户界面和功能。具有其二次开发能力只需培训一周。
 

4         我们的优势

1.      您只需要配置一下,不需要修改原有系统代码;就可以将现有C/SB/S架构系统(OA,财务管理,CRM,ERP)扩展到手机上来应用。
2.      实施周期短,通常两周内就可以将一个系统大部份功能扩展到智能手机上使用。
3.      附件支持
1)      可以在线查看doc,xls,pdf,tif,tiff,bmp,txt,jpg文件。
2)      可以分页查看,可放大、缩小查看,以及移动显示内容。
3)      其中doc文件要达到
a)      展示内容包含文字、表格、图片;同时支持混排。
b)      依据WORD原文的分页进行分页显示。
4)      支持附件下载。
5)      支持附件上传。
6)      大附件支持,对于5M大小的文件、展示速度平均在3秒以内,也是目前最先进的技术。
4.      客户也可以自己进行二次开发;我们有优秀的配置文件的设置.客户可以根据自己的需求,随意修改;包括用户界面和功能.
5.      可以同时支持SymbianWindows Mobile两种手机操作系统;而不需要另外写配置脚本。
6.      价格超低
7.      为你的产品OEM(logo等任何标识都为贵公司);让你低成本拥有移动办公产品;快速的进入移动信息化领域。
 

5         实现原理

 
MAStudio 系统由服务器部分和客户端部分组成,通过无线网络、Internet相连接。MAStudio服务器架设于企业局域网络中,负责连接企业DOMINO系统。MAStudio客户端安装于手机/PDA等无线终端,通过无线网络连接到MAStudio服务器,读取数据和指令。
MAStudio 服务器可以部署在Domino服务器上也可以部署在单独服务器上。
MAStudio Lotus Domino的数据交换主要是通过如下两种方式进行数据交换:
*        HTTP 方式:主要通过向DominoHTTP SERVER进行POSTGET请求;请求的URL是现有OA的应用连接如openDocumentopenViewopenAgentopenFormeditDocument等;对请求回来的结果;采用正则表达式进行匹配;匹配的结果整理后PUSH到手机终端显示。
*        API for C++ 方式:主要是通过Lotus提供的API;配上相对.id文件进行对nsf数据库进行直接数据操作。

6         MAS脚本的语法

4.1. HTTP方式

4.1.1  使用条件

Lotus Domino 启用了HTTP SERVER;而且OA系统大多数功能是B/S模式的。

4.1.2  登陆

[Datasource]
Database= HTTP
Server= --raw--http:// 服务器 IP/names.nsf?login
Flow=--raw--username=[User]&password=[Pwd]&RedirectTo= 您系统首页的 URL
Port= 80                                           // 端口号
Method= Post                                    // 提交方式;通常登陆都为POST
Preget= --raw--http:// 服务器 IP /names.nsf?login  // 预处理;获取登陆页面的数据一并提交;
Lex= <INPUT TYPE=hidden NAME="(%%ModDate)" VALUE="(.+?)"> // 获取%%ModDate值进行提交

4.1.3  数据源的设置

gServer= " 服务器 IP"
OBJECT wxDATASOURCE aSource
{
private:
      aSource.Database= HTTP
      PRINT "aSource.Server= ""--raw--", gServer, "/names.nsf?login"""
      aSource.Port= 80                               // 端口号
      aSource.Method= "Post"
      aSource.Timeout= 5
      var= "--raw--username="
      var= var+ sysGLOBAL.USER
      var= var+ "&password="
      var= var+ sysGLOBAL.PASSWORD
      var=var+"&RedirectTo= 重定向的首页 URL"
      PRINT "aSource.Flow=""", var, """"
}
 
aSource.Flow 参数,是提交的数据,其中用户和密码分别是 sysGLOBAL.USER sysGLOBAL.PASSWORD
 

4.1.4  获取视图数据

OBJECT wxQUERY aQuery
{
      sUrl = "--raw--http://"                            // 加上 ―raw― 是代表按原文不进行额外的编码或去 ? 号等操作 ; 进行提交
      sUrl=sUrl+gServer+"/"+"/test.nsf/ 视图名 ?openview"                                                             访问数据页面
      aQuery.wxDATASOURCE= gSource
      aQuery.wxRECORDSET= aRecord
 
      PRINT "aQuery.Url=""",sUrl,""""
      aQuery.Begin= " <h2>( 所有发文 )</h2> "     // 定义开始匹配点
      aQuery.End= "</html>"                              // 结束定义点
aQuery.Lex=" <tr.+?><td.+?><img.+?>(.+?)</td><td.+?>(.+?)</td><td.+?>(.+?)</td><td.+?>(.+?)</td><td.+?>(.+?)</td><td.+?>(.+?)</td></tr> "                                                    // 正则表达式; 数据匹配
      aQuery.Method= Get                                // 请求方式
      aQuery.Split= 3                                        分页大小
      aQuery.Page= 1
      aQuery.No= true
 
      aQuery.wxRECORDSET= aRecord
}
 

4.1.5  获取文档的数据

OBJECT wxQUERY aQuery
{
    sUrl = "--raw--http://"
    sUrl=sUrl+gServer+"/test.nsf/0/03DD0E6B52ABD7EC482574A900159D1A?openDocument"                          // 获取具体文档的资料
    aQuery.wxDATASOURCE= gSource
    aQuery.wxRECORDSET= aRecord
    PRINT "aQuery.Url=""",sUrl,""""
    aQuery.Begin= " 发文编号</td>"
    aQuery.Lex= " <table.+?>.+?<tr.+?>.+?</tr>.+?<tr.+?<td.+?>(.+?)<script>.+?</tr>"
    aQuery.End= "</html>"
 
    aQuery.Method= Get
 
    aQuery.Split= 3
    aQuery.Page= 1
    aQuery.No= true
 
    aQuery.wxRECORDSET= aRecord
}

4.1.6  读取附件

OBJECT wxDIR aDir
{
      OBJECT wxFILE aFile
        {
aFile.Source="http:// 服务器 IP :端口号 /test.nsf/0/ 文档UNID /$FILE/ 附件名 1 .doc?OpenElement"
           aFile.Display= " 附件名 1 "
           aFile.Local= " 附件名 1 .doc "
      }
      OBJECT wxFILE aFile
        {          
aFile.Source="http:// 服务器 IP :端口号 /test.nsf/0/ 文档UNID /$FILE/ 附件名2 .doc?OpenElement"
           aFile.Display= " 附件名2 "
           aFile.Local= " 附件名2 .doc "
      }
 
      aDir.wxLIST= aList
      aDir.Attachment= 1, 0
      aDir.Download= "com_down.mas"
      aDir.Open= "com_view.mas"
 
      aDir.Prompt[]= 200, 250
}
 

4.1.7  执行代理

OBJECT wxQUERY aQuery
{
   sUrl = "--raw--http://"
   sUrl=sUrl + gServer + "/" + gOADir +"/test.nsf/ 代理名 ?openagent"
   aQuery.wxDATASOURCE= gSource
   aQuery.wxRECORDSET= aRecord
 
   PRINT "aQuery.Url=""",sUrl,""""
   aQuery.Begin= "<root>"
   aQuery.Lex= "<dbCount>(.+?)</dbCount><dyCount>(.+?)</dyCount><domnioName>(.+?)</domnioName><ggCount>(.+?)</ggCount><mailCount>(.+?)</mailCount>"
   aQuery.End= "</root>"
 
   aQuery.Method= Get
 
   aQuery.Split= 3
   aQuery.Page= 1
   aQuery.No= true
 
   aQuery.wxRECORDSET= aRecord
}

4.1.8  提交数据

OBJECT wxQUERY aQuery
{
       aQuery.wxDATASOURCE= aSource
 
       var= "/weboa/rcbg/office.nsf/0/"
       var= var+ sysPARAMETER.pID
       var= var+ "?EditDocument&Seq=1"
       PRINT "aQuery.Url= ""--raw--", gServer, var,""""
 
       aQuery.Begin= " 请选择下一环节的办理人 "
       aQuery.End= " 正在提交 , 请稍候 "
       aQuery.Lex= "js.document.write\(.+?input type=checkbox value=\\'([^;]+?)\\'.+?);"
 
       var= "--boundary=-----------------------------7d81992df09a9&--attachment=%%File.482572d500208cc2.420ef16bf3dc51d94825723c0022d710.$Body.0.1A6A&--attachment=%%File.482572d500208cc2.420ef16bf3dc51d94825723c0022d710.$Body.0.2D36&__Click=482572D500208CC2.0fe0ffa5495f047c482572950018845f/$Body/0.89DC"   // 预先知道的附件控制域
 
       var= var+ "&"
       var= var+ sysPARAMETER.pField                            // 用户可编辑的域;如标题等。
       var= var+ "="
       var= var+ sysPARAMETER.pNote
       var= var+ "&subflow_yj="
       var= var+ sysPARAMETER.pNote
       PRINT "aQuery.Flow= """, var, """"
 
       aQuery.Cache= 300
 
       OBJECT wxPARAMETER aPara
       {
              var= sysPARAMETER.pUrl
              var= var+ "&Click=482572D500208CC2.0fe0ffa5495f047c482572950018845f/$Body/0.1E24"
 
              PRINT "aPara.Preget= ""--raw--", gServer, var,""""
              aPara.Lex= "<input name=""([^>"";]+?)"" type=""hidden"" value=""([^>""]*?)"">"     // 将所有隐藏的域进行提交 ;
       }
 
       OBJECT wxPARAMETER bPara
       {
              PRINT "bPara.Preget= ""--raw--", gServer, var,""""
              bPara.Lex= "<input name=""([^>""]+?)"" value=""([^>""]*?)""[^>]*?>"  // 将所有其非隐藏的 input 进行提交 .
       }
      
       OBJECT wxPARAMETER cPara
       {
              PRINT "cPara.Preget= ""--raw--", gServer, var,""""
              cPara.Lex= "<input type=""hidden"" name=""([^>""]+?)"" value=""([^>""]*?)"">" // 将所有隐藏的域进行提交 ; 由于他们的 hidden 位置有可能不同 . 正则表达式需要多次匹配 .
       }
 
       OBJECT wxPARAMETER dPara
       {
              PRINT "dPara.Preget= ""--raw--", gServer, var,""""
              dPara.Lex= "<select name=""([^>""]+?)""[^>]+?>[^<]*?<option value=""([^>""]*?)"" selected>"
       }
 
       OBJECT wxPARAMETER ePara
       {
              PRINT "ePara.Preget= ""--raw--", gServer, var,""""
              ePara.Lex= "<textarea name=""(subflow_specifyflowtask)""[^>]+?>(.+?)</textarea>"
// RTX 的域进行提交 ;
       }
 
 
       aQuery.Method= Post
       aQuery.Order[]= 1, 2
       aQuery.Split= 30
       aQuery.Page= 1
}

4.2. API for C++方式(不建议使用)

 

4.2.1.     使用条件:

必须在MAStudio上安装Lotus Domino Notes 6/7客户端;只建议在C/S系统的Lotus DominoOA上使用。

4.2.2.     OBJECT BASIC语法如下:

   
OBJECT wxDATASOURCE 对象用来定义和数据库的连接,该对象包含各种数据库的连接,连接的定义提供给wxQUERYwxPROCEDURE使用。
 
OBJECT wxDATASOURCE aSource
{
private:
    aSource.Database= DOMINO           数据库类型
    aSource.Server= "maserver/mastudio"           DOMINO 网络名
    aSource.Login= "D: \Lotus\notes\data\user.id" id 文件(可动态)
    aSource.Pwd= 123                       密码
    aSource.Timeout= 10                    超时
aSource.Nsf= "test.nsf"                数据库
}
   
OBJECT wxQUERY aQuery                     Lotus 数据库
{
    aQuery.wxDATASOURCE= aSource           数据源名
    aQuery.wxRECORDSET= aRecord            数据记录
 
    aQuery.Notes= View / Document / Response      来自视图文档答复
    aQuery.From= student / NotesID / NotesID      视图名或文档编号
    aQuery.Field= “name, age”                   查询字段
    aQuery.Temp= “c:/temp/zhangxh”              附件保存位置
}
 
aQuery.Notes 值为View表示查询From中指定的视图student;值为Document或则Response表示查询文档或则文档的答复,From中的参数表示文档编号。
 
aQuery.Notes 值为View查询视图的时候,不论Field有几个字段,系统会自动增加一字段显示每个文档的编号,通过此编号可查该文档。
 
aQuery.Field 值为查询的字段列表,字段名区分大小写。
 
aQuery.Temp 值为保存附件的目录,当查询的字段中包含附件的时候,系统自动创建此目录,并且只保留最后一个文档查看所下载的附件。可通过wxDIR对象将此目录下的附件提供给用户下载或则查看。
 
OBJECT wxPROCEDURE aProc                Lotus 数据库
{
aProc.Execute= Update / Upload          写值或上传
aProc.Document= 1322                    文档参数
aProc.Field= name                       字段列表
aProc.Value= 123                        值列表
 
aProc.wxDATASOURCE= aSource
}
aProc.Execute 值为Update表示将对应的值写到文档对应的字段中,没有该字段自动增加。
aProc.Execute 值为Upload表示将对应的值文件上传到文档中。此时Value参数为文件的全路径。以上字段列表和值可通过”f1, f2, f3”形式来表示多个字段以及对应的值。
 
 
OBJECT wxDIR  aDir
{
    PRINT " aDir.Root=""", root, """"                设置根目录
    aDir.wxLIST= aList                        文件列表定义
    aDir.wxRECORDSET= aRecordSet              数据记录
 
    aDir.Attachment= 1, 0
    aDir.Download= "mail/emDownload.mas"          文件下载控制
    aDir.Open= "mail/emFile.mas"                  文件浏览控制
 
    aDir.Prompt[]= 205, 250                       导航提示区域
}
 
OBJECT wxLIST aList
{
    aList.Rect[]= 8,225,224,275                   列表框范围
    aList.Font[]= 14, 0x4b74ff                    列表字体
    aList.Banna[]= 1, 0xcedce2, 0x4b74ff             列表导航
}
 

7         实现效果

请查阅 [url]http://www.jianq.com[/url] 中的成功案例。
 

你可能感兴趣的:(职场,休闲,移动办公,移动OA)