用IDE Script对REAL Studio进行自动化控制一例(答法国客户问)

    几小时前,REAL公司欧洲总部的法文客服在REAL公司内部职员邮件列表中发了封邮件,说有个法国的REAL Studio用户问如何用IDE Script将当前工程中某个项目中指定的附注保存为文本文件。
    最近一段时间没少跟应用程序自动化控制打交到,比如在Windows上是许多Windows软件都自带的VBA(MS Office,CorelDraw和AutoCAD等都支持),在Mac上则是能自动化控制所有Cocoa程序的AppleScript。因此对REAL Studio的IDEScript也有些兴趣,便稍微研究了一下。
    REAL Studio要有自己的自动化功能就需要有能跨平台的自动化控制引擎。只能在Mac上用的AppleScript显然是不行的,而且REAL Studio的Mac版暂时还是基于Carbon框架程序而不是Cocoa程序,需要被AppleScript支持就要写个庞大的AppleScript扩展,还不一定能做到完美。VBA本来的确有Mac上的实现,但是由于没法将Mac版VBA代码编译为Intel指令,MS从Office 2008 for Mac开始已经移除了VBA功能,转而支持AppleScript(在大量需要跨平台VBA实现的客户的强列要求下,MS的苹果软件事业部似乎已经动手重新增加VBA对Mac版Office的支持了)。因此REAL Studio基于自己的RBScript引擎设计并开发了专门的IDEScript自动化控制功能。
    IDEScript主要用于编写软件构建脚本,使用户能实现对程序编译、打包,甚至发布的自动化处理。当然也可以做很多别的事情,比如提供这个法国客户所需要的功能。这个客户的需求很清晰,他需要一个自动化脚本,把某个工程中某几个工程项的附注(估计这个用户习惯用附注部分来编写项目文档)导出为文本文件。
    因为他经常修改附注内容,每次手动导出附注比较麻烦,过程大抵是这样的:先进入要导出其附注部分的工程项,接着进入附注中,在代码编辑器里全选,复制,然后打开一个文本编辑器,将复制的内容贴进去,选择文件位置并进行保存,最后关闭文本编辑器。虽然不复杂,每天都要重复两三次也不是件有趣的事情。
REALbasic的IDE是没有将工程项中的例程或附注导出为文本的功能的,因此IDEScript的命令集中并没有直接可以调用的命令。我稍微研究了一下,发现要解决这个法国用户的需求并不困难,如果只要支持一个平台的话,只需2行代码(我为了保险起见写了行错误判断)。具体的想法是,先用Location命令跳转到指定的附注项,在用Text命令获取当前代码编辑器中的文本,最后用DoShellCommand调用Unix或Dos的流定向命令来将文本写出到文件中。由于法文客服只需要一个Mac版本做参考,我给就只给出了一个Mac的版本,在Linux上要稍微修改下Unix命令的部分,在Windows上也差不多,Dos的echo命令看来是从Unix上学去的(注意Dos的流输出定位指令是“>>”)。当然使用REALbasic/RBScript语言的预编译指令#if...#elseif...#endif就能编写出支持3个平台的代码了。我的脚本如下:
Location="Window1.Note1"
Dim Result As String=DoShellCommand("echo '"+Text+"' > '/Users/zhujianan/Documents/Note1.txt'",5000)
If Result<>"" Then Print "Failed to save note: "+Result
    第一行代码用于跳转到工程项Window1的名为Note1的代码项/附注项中,第二行代码执行Unix命令echo并用流定向指令符“>”将Text命令返回的文本写入到指定的文件中,第三行命令检查是否正常执行(在Mac中此Unix命令正常执行后不打印任何内容,否则在终端上打印输出错误信息),如果有错误信息就显示给用户(可能的错误比如有目录不存在,文件不可写之类)。
    然后在REAL Studio的脚本编辑器中保存这个脚本,以后就可以直接从文件菜单中选择这个脚本并执行了。

[本日志由 kmzs 于 2009-04-19 02:55 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: -34 | 查看次数: 4459
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 200 字 | UBB代码 关闭 | [img]标签 关闭