如何在以前未加载的模块中迭代DXL中的传出链接的目标对象

时间:2013-02-20 17:12:12

标签: ibm-doors

我想在DXL中编写一个循环,从一个名为“req”的Object链接到的每个Object中读取一些东西。

天真的解决方案,省略了req的初始化,将是这样的:

Object req 
Object parent
Link baselink

for baseLink in req -> "*" do{
        parent = target(baseLink)
        ...
}

除非存在这些“父”对象的所有模块已经打开,否则这不起作用。对于仍未打开的任何内容,“父”变量只接收Null值。

鉴于这种情况,我想要一种以编程方式打开它们的方法。

DXL参考手册提供的解决方案仅适用于传入链接(来自“子”对象):

ModName_ srcModRef
for srcModRef in o<-"*" do
    read(fullName(srcModRef), false)

不幸的是,我无法找到传出链接的解决方案。用“ - &gt;”替换“&lt; - ”在上面的例子中失败。我在手册和网页上搜索过。

我想避免打开整个链接模块指向的所有链接,因为这涉及其他来源。

有人知道如何以编程方式打开由对象链接的所有模块吗? 我怀疑有没有办法在不打开它所在的模块的情况下访问对象,但这也可以解决我的问题。

1 个答案:

答案 0 :(得分:2)

以下是您的解决方案:

Object req
ModName_ parentModName
Module parentMod
Object parent
Link baselink

for baseLink in req -> "*" do{
    parentModName = target(baseLink)
    parentMod = read(fullName(parentModName), false)
    parent = target(baseLink)
    ...
    close parentMod
}

即使模块未打开,您也可以获取ModName_句柄然后打开它。然后,您可以获取目标对象引用。完成后,不要忘记关闭链接的模块以释放资源。

希望这有帮助!