建乔手机OA-MAS脚本的语法
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= //获取%%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= (所有发文) //定义开始匹配点
aQuery.End= //结束定义点
aQuery.Lex= (.+?)(.+?)(.+?)(.+?)(.+?)(.+?) //正则表达式;数据匹配
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 Domino的OA上使用。
4.2.2. OBJECT BASIC语法如下:
OBJECT wxDATASOURCE对象用来定义和数据库的连接,该对象包含各种数据库的连接,连接的定义提供给wxQUERY、wxPROCEDURE使用。
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 实现效果
请查阅http://www.jianq.com中的成功案例。
--------------------编程问答-------------------- 很好
补充:企业软件 , 其他