最近在做VRU的开发,使用的是Invision开发工具,经过两天的培训,就开始做训练性的工作了。因为是新人,所以接触到的东西比较初级,下面说说Invision里面的一些控件的特点。
因为公司使用的比较旧的版本,目前Invision主页上面可以下载的Invision Studio的界面做得很漂亮了……所以现在使用的2.x的版本有相当多的bug和看起来比较可笑的行为(本文所提及的所有invision都是基于2.x版本的,以下就不做特殊说明了):
1. 基本操作:
Invision的底层是基于C语言的,这个流程工具里面的窗口侧边滚动条只能用鼠标左键拖动,可能当时开发环境中鼠标滚轮处于一个尚未普及的尴尬境地吧,反正令人很不舒服。
在开发窗口中点击鼠标右键的时候要非常小心,因为右键默认为“close”——就是说,在你反应过来之前,当前工作窗口就已经关闭了~建议按实右键,然后选择“flash”,这样误点右键的时候,就只是刷新当前窗口而已。
使用ctrl+鼠标点选,可以选择当前控件【block】到本窗口的流程末尾的所有控件【block】; 使用shift+鼠标点选,可以选择鼠标所选择的当前几个控件【block】。
使用鼠标左键双击,可以进入所有【subroutine】之外的【block】的参数窗口,也可以使用ctrl+J的快捷键;双击【block】的名字,可以直接编辑名字,也可以使用ctrl+M的快捷键;双击子程序控件【subroutine call】,则会打开【subroutine call】的外部属性窗口,可以看到传递参数等说明,要进入【subroutine call】内部,则需要使用ctrl+L的快捷键;想要看到所经过的流程的【block】历史(完全的block历史记录,但是不包括subroutine call),用快捷键ctrl+H;想看所进入的【subroutine call】记录(倒序记录所经过的subroutine call),用快捷键ctrl+P。当然,所有的文档基本操作还是和windows契合的,毕竟这个东西的平台还是windows,比如复制ctrl+C,粘贴ctrl+V,剪切ctrl=X,撤销ctrl+Z。
调整窗口的时候,尽量使用最大化那个按钮,而不是直接拖拉窗口边框,这样有一定的几率出现“out of memory”的错误,导致整个程序退出。
2. copy行为:
复制可以点击工具栏上面的复制按钮,也可以直接使用键盘的ctrl+C的快捷组合(推荐);粘贴的话,使用ctrl+V也是比较舒服的方式,不过,有几个bug需要引起注意:
a>在所有可编辑的【block】内部,使用“全选(ctrl+A)”这个动作时,如果马上使用“删除(Backspace)”动作的话,那么你想使用ctrl+V粘贴新内容的时候,你会发现粘贴的内容还是刚才删除的旧内容!就是说刚才的“全选+删除”动作暗含了copy当前内容到剪贴板的动作,要解决这个问题,只需在“全选”动作之后,直接使用ctrl+V来粘贴就可以了。
b>在子程序【subroutine call】进行copy的时候,如果当前窗口中没有同名的【subroutine call】,那么可以直接复制粘贴;如果有同名的【subroutine call】,那么需要新建一个【subroutine call】,接着按ctrl+L进行命名(可以采用相同的名字不会冲突),然后进入源【subroutine call】中进行copy,再到新建的目标【subroutine call】中粘贴便可。不过这里也有bug,对于源【subroutine call】中新添加的【block】,即使通过save+compile动作,依然无法被复制到新建的目标【subroutine call】中去,重启invision也无法做到这点。解决方法比较笨:就是不能使用上面说的ctrl+鼠标点选进行全选和复制粘贴,而是一个个【block】的单独复制到信件目标【subroutine call】中去……
3. 部分控件【block】特性:
涉及到的控件还是比较少,比如fax、dll、mq传递等高级控件的用法,培训中间没有说,我现在也没条件搞清楚。这里只能浅显的讨论一下一些基本的流程【block】的一些容易忽视的特点。
a> Loop / While
Loop拥有4个可编辑属性:From, To, Step, Assign result to. 从字面意思也可以看出来:From, To表明了循环的范围,Step表明了每次循环的步长,Assign result to表示循环的结果赋值的对象,这里循环的起止都是可以控制的。
While也有四个颗编辑属性:While, Assign result to, Error on loop count, Error exception. 这里While表示循环进行的条件,Assign result to和上面一样表示结果赋值对象,Error on loop count感觉没怎么使用,根据help里面提供的资料,是用来提供抛出异常的限制的,当出现Error on loop count限制时,执行Error exception;而Error exception的内容可以在程序的EXCEPTION部分作出专门的规定。需要说明的是,While的起点是定死的,一定从‘1’开始,终点则是根据while处的条件语句而定。
另外,根据测试的结果来看,Loop或者While控件是一个带有private性质的整体,外部对其中参数的改变都不会体现到该控件内部,比如修改Loop的From, to的数值,修改While的while条件,都不会对结果产生影响,换句话说,都不会影响到控件内部的运行。
b> Subroutine Call
【subroutine call】控件是比较重要的控件,因为只要涉及可重用的或者集群的功能,都要使用【subroutine call】,可以说【subroutine call】的身影无处不在。这里简单的介绍它的参数传递: