Object IBM Doors DXL:can';t迭代模块中的对象

Object IBM Doors DXL:can';t迭代模块中的对象,object,module,iteration,ibm-doors,Object,Module,Iteration,Ibm Doors,我在使用IBM Doors的DXL语言时遇到了一个相当奇怪的问题: 我可以获取要访问的模块的变量: our_mod = module "<path_including_filename_of_module>" 它给出了错误输出:“function(name)的参数不正确” 但是,如果我搜索包含模块的文件夹,我可以通过其文件名获取它: Item x Item my_module for x in my_folder do { if (name(x) ==

我在使用IBM Doors的DXL语言时遇到了一个相当奇怪的问题:

我可以获取要访问的模块的变量:

our_mod = module "<path_including_filename_of_module>"
它给出了错误输出:“function(name)的参数不正确”

但是,如果我搜索包含模块的文件夹,我可以通过其文件名获取它:

Item x
Item my_module
for x in my_folder do
{
    if (name(x) == "<filename>")
    {
        my_module = x
    }
}
它只是给了我一条错误消息“不正确的(do)参数”

如果有人知道这可能是什么原因,我将不胜感激


感谢并问候

DXL中有几种数据类型与模块有关,它们都具有不同的访问功能(PERM)。例如,Item类型的变量适用于迭代“文件夹或项目中的所有内容”。如果要在对象上迭代,则需要Module类型的变量。正如您已经发现的,perm“module(string)”不会返回module类型的数据。它返回类型为bool或类型为ModName_的变量(这是模块引用,而不是模块),具体取决于分配结果的数据类型。有关详细信息,请参见Tony Goodman页面上的烫发列表

在DXL中,请确保始终使用类型声明变量,如果您想保持理智,请不要使用自动声明(如果您在上面的示例中说
打印我们的_mod
,您会发现您得到了一个bool,当然它既没有名称也没有类型)

要获取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

谢谢你详尽的回答。下一次机会我会试试。
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...
}
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