一、 脚本语言的特点
脚本语言是一种解释性编程语言,其程序结构与其它编译性的程序语言
基本相似,只是缺少一个编译的环节;需要脚本引擎来解释执行。
脚本程序类似一种命令式语言,用户可以动态的加载指令来执行,这也是其灵活性所在。编译型语言,如c,c++,一旦编译后其程序逻辑也就固化了;而脚本程序则可以文本的形式存在,可实时修改、加载、执行。也因此具有很好的灵活性,动态特点。
脚本语言可以作为编译语言的一种有效补充,将其嵌入到程序中可很好的支持其它编程语言的扩展、增加其外延。
也因此,我们看到微软在其很多应用产品,如WORD、Excel、Access等嵌入VBA作为功能扩展的基础。Flash也有ActionScript脚本做支持。
在WEB时代,脚本语言更是大行其道,Javascript,ASP,PHP,PERL,python等都是WEB中常用的动态语言。
二、 开发平台的扩展性、灵活性的功能需求
BDS平台需要支持用户自定义界面、自定义数据操作、自定义流
程控制等,这决定其功能实现必须是动态的。
以“数据操作”为例,其以“函数”为基础功能模块,通过逻辑组合可构成更大的功能“方法”。其实现步骤形如下图所示:
图1 “函数”就如积木块
图2 选择合适的“函数”块
图3适当的排列组合“函数”块
图4 构建成一个“方法”模型
这些“系统函数”其表现的形式是一种类似编程语言的Funtion定义,形如:
InsertData(<新增ID返回值>,<新增数据表名称>,<赋值字段列表>);其参数是由用户在设计时自定义的。许多这种函数串联起来就成为一个有序的逻辑控制,就形成了类似脚本语言的程序,如下列:
1. 统计所有行数据 :GetSubFormData(dtBatch, [Form$.FormBody43], )
2. 统计列值完整的行数据:GetSubFormData(dtOKBatch, [Form$.FormBody43], [Form$.FormBody43.FloatBox47]>0 AND [Form$.FormBody43.DateBox45] IS NOT NULL )
3. 检查是否是管制物品:
ExecuteSQL(Datatable isMainMat, select 1 from cyerp..tblBase_Warehouse_MaterialBill
WHERE MaterialNo= [Form$.MainForm.TextBox14] and ( limitedType='A' or charindex('干膜',materialName)>0 ) )
4. 管控物品批次控制:
IF( Count([dtOKBatch])=0 AND Count([isMainMat])>0 )
AbortOperation(管控物品必须录入完整的批次信息!)
5. IF(Count([dtBatch])<>Count([dtOKBatch]))
AbortOperation(“生产批次”行信息不完整或者批次数量小于0,请检查!)
这些有序函数序列是可以随时进行ERP运行时调整的,因为其最终是通过“数据操作引擎”来解释执行的,也因此使得平台具有很强的动态性。因为这是BDS平台中一种特有的类脚本语言。
除此外,平台中有直接应用VBScript脚本作为“数据操作引擎”的补充以支持基础的运算操作等,比如VBScript脚本中常用的日期函数、字符串处理函数、数学函数等。Javascript自然也在WEB平台下 得以应用,因为很多涉及界面操作控制的函数都需借助Javascript的功能在客户端执行完成。
三、 脚本程序与平台的自然结合
基于上面的描述,我们可以看到,脚本程序在平台中得以自然的使用。
BDS平台其运行体系结构如下图所示:
图5 BDS平台运行体系结构
从中我们可以看到“脚本语言”成为.Net Framework基础架构的有益补充。
四、 脚本应用的缺点
所谓有所得亦必有所失,脚本语言因其是解释性程序语言;因此
相对编译性程序而言其执行速度自然会有折扣,但通过BDS平台实践应用的检验结果来看,其性能并没有大的损伤,用户体验上与其它应用程序也没有差异。
五、 总结
综上所述,“脚本语言”是实现BDS平台动态,易于功能扩展的重要手段,BDS平台不仅应用了已有的如VBScript脚本语言之外,也发展了平台专有的类脚本语言—“函数与方法”;从而使得平台具有相当的灵活性。