IBM Doors DXL:无法遍历模块中的对象

问题描述

使用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的变量,您首先需要打开模块(如现实生活中的:) :))。您可以使用editshareread打开它。例如。像这样

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...