这是 DXL
中的代码string path = "blablabla...";
Module mod = read(path, false);
Object obj = object(1337, mod);
string nameObject;
Object objectObject;
Link lnk_in;
Link lnk_out;
print "The objects for IN links:\n";
for lnk_in in obj <- "*" do
{
nameObject = source(lnk_in);
objectObject = source(lnk_in);
print identifier(objectObject) " " ;
print nameObject "_" objectObject."Absolute Number" "\n";
}
print "\nThe objects for OUT links:\n";
for lnk_out in obj -> "*" do
{
nameObject = target(lnk_out);
objectObject = target(lnk_out);
print identifier(objectObject) " ";
print nameObject "_" objectObject."Absolute Number" "\n";
}
基本上它有兴趣打印与我们的 obj 对象链接的对象,它具有给定的绝对数字等于1337.我仔细选择了这个对象,以便它有内部和外部链接到其他对象。然而,尽管它很简单,但我还有一些问题。
在它自己的脚本上,脚本输出:
The objects for IN links:
The objects for OUT links:
-R-E- DXL: <Line:25> null Object parameter was passed into argument position 1
-I- DXL: execution halted
正如您所看到的,存在严重问题。尽管 obj 确实链接了内部对象,但脚本不会返回内部对象。然而,对于输出链接,我观察到 nameObject 确实返回了对象的字符串名称,但 objectObject 是空的。
如果第二个 更改为:
print "\nThe objects for OUT links:\n";
for lnk_out in obj -> "*" do
{
nameObject = target(lnk_out);
objectObject = target(lnk_out);
//print identifier(objectObject) " ";
print nameObject "\n";
print nameObject "_" objectObject."Absolute Number" "\n";
}
输出变为:
The objects for OUT links:
etc...System_Req...etc
-R-E- DXL: <Line:27> null Object parameter was passed into argument position 1
-I- DXL: execution halted
会出现什么问题?它不应该是这样的。
答案 0 :(得分:1)
此行为的原因是,为了访问对象,您需要打开包含此对象的模块。
当您遍历链接时,您只能访问链接本身的属性,例如target(类型为object),module(类型为module)。 因此,您需要在访问目标对象之前打开目标模块。
对于inlinks,它甚至有点复杂,因为模块只存储链接。链接不存储在模块中。相反,您有LinkRefs,您也可以使用它来打开源模块,然后您可以访问链接和源对象。
我建议使用链接分析向导创建两个DXL布局列,一个用于传入链接,一个用于传出链接。从向导生成的代码向您显示如何访问这些属性。
请记住,以下指向基线的链接甚至更复杂一步,因为您必须打开(“加载”)正确的基线(请参阅DXL手册中的“版本化链接”)
在https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000001527的Rational DXL论坛中也有很多关于链接的帖子,搜索像LinkRef,showOut,showIn
这样的术语