问题描述
使用DXL语言,IBM Doors遇到了一个非常奇怪的问题:
我可以获取要访问的模块的变量:
our_mod = module "<path_including_filename_of_module>"
我无法执行与该变量上的模块相关的任何常规功能,例如:
name (our_mod) //or entering the string consisting of path + filename directly)
但是,如果我搜索包含该模块的文件夹,则可以通过其文件名进行抓取:
Item x
Item my_module
for x in my_folder do
{
if (name(x) == "<filename>")
{
my_module = x
}
}
当我可以执行name(my_module)
或type (my_module)
时:
返回文件名和预期的“正式”
但是,即使我以这种方式获取模块,我仍然无法像使用
那样遍历该模块内部的对象。Object o
for o in my_module do // ...in all my_module... does not work either,same error msg
{
//Do what I came to do...
}
这只是给我错误信息“(做)不正确的参数”
如果有人对导致此问题的原因有任何想法,将非常有责任。
感谢和问候
解决方法
DXL中有几种与模块有关的数据类型,它们都有不同的访问功能(权限)。例如。 Item类型的变量非常适合遍历“文件夹或项目中的所有内容”。如果要遍历对象,则需要类型为Module的变量。如您所知,烫发“模块(字符串)”不会返回模块类型的数据。根据分配结果的数据类型,它返回布尔类型或ModName_类型的变量(这是模块 reference ,而不是模块)。有关详细信息,请参见Tony Goodman的页面上http://www.smartdxl.com/downloads/undoc31.html上的烫发列表。
在DXL中,请确保始终使用类型声明变量,如果要保持理智,请不要使用自动声明(如果在上例中使用print our_mod
,您会发现布尔值,当然它既没有名称也没有类型。
要获取类型为Module的变量,您首先需要打开模块(如现实生活中的:) :))。您可以使用edit
,share
或read
打开它。例如。像这样
Module m = read ("/path/to/my_mod",false /* display */,true /* load standard view */)
if null m then error "could not open the module"
Object o
for o in entire m do {print o."Absolute Number" ""}
close m