我是 DXL 的新手,我正在尝试在 DOORS 中创建一个主模块(模块 A),其中有一列显示来自模块 B 的文本,后跟模块 C 的标题。模块 B 链接到模块 A,模块C链接到模块B。我希望模块A有一个列1)显示从B链接的内容,2)在与每个模块B对象相同的行上,显示链接到模块的模块C名称B. 我希望模块 C 的名称放在方括号中。它应该如下所示:
在模块 A 中第一列:“在 A 中手动输入的文本” 第二列:“在 B [C 名称] 中手动输入的文本”
目前我可以将 B 带入 A 中的新列。这是该代码:
pragma runLim, 0
void showIn(Object o, int depth) {
Link l
LinkRef lr
ModName_ otherMod = null
Module linkMod = null
ModuleVersion otherVersion = null
Object othero
string disp = null
string s = null
string plain, plainDisp
int plainTextLen
int count
bool doneOne = false
string linkModName = "*"
for lr in all(o<-linkModName) do {
otherMod = module (sourceVersion lr)
if (!null otherMod) {
if ((!isDeleted otherMod) && (null data(sourceVersion lr))) {
load((sourceVersion lr),false)
}
}
}
for l in all(o<-linkModName) do {
otherVersion = sourceVersion l
otherMod = module(otherVersion)
if (null otherMod || isDeleted otherMod) continue
othero = source l
if (null othero) {
load(otherVersion,false)
}
othero = source l
if (null othero) continue
if (isDeleted othero) continue
doneOne = true
if (depth == 1) {
s = probeRichAttr_(othero,"Object Text", false)
if (s == "")
displayRich("\\pard " " ")
else
displayRich("\\pard " s)
}
}
}
showIn(obj,1)
这是我迄今为止从另一个查询中发现的: 显示其他模块的 DXL 列
这是在 B 的新列中的方括号中显示 C 名称的有用开始。这是我的代码:
pragma runLim, 0
int lines[4] = {0, 0, 0, 0}
void adjustLines(int depth, showAtDepth) {
int count
for (count = 0; count < 4; count++) {
while (lines[depth-1] < lines[count]) {
if (depth == showAtDepth) displayRich("\\pard " " ")
lines[depth-1]++
}
}
}
void showIn(Object o, int depth) {
Link l
LinkRef lr
ModName_ otherMod = null
Module linkMod = null
ModuleVersion otherVersion = null
Object othero
string disp = null
string s = null
string plain, plainDisp
int plainTextLen
int count
bool doneOne = false
string linkModName = "*"
for lr in all(o<-linkModName) do {
otherMod = module (sourceVersion lr)
if (!null otherMod) {
if ((!isDeleted otherMod) && (null data(sourceVersion lr))) {
load((sourceVersion lr),false)
}
}
}
for l in all(o<-linkModName) do {
otherVersion = sourceVersion l
otherMod = module(otherVersion)
if (null otherMod || isDeleted otherMod) continue
othero = source l
if (null othero) {
load(otherVersion,false)
}
othero = source l
if (null othero) continue
if (isDeleted othero) continue
int oldLines = lines[depth-1]
adjustLines(depth, 1)
bool kick = (doneOne) && (lines[depth-1] == oldLines)
if (kick) {
lines[depth-1]++
if (depth == 1) displayRich("\\pard " " ")
}
if (depth < 4) {
showIn(othero, depth+1)
}
doneOne = true
if (depth == 1) {
s = name(otherMod)
if (isBaseline(otherVersion)) {
s = s " [" versionString(otherVersion) "]"
}
s = "{[" s "]}"
displayRich s
}
lines[depth-1] += 3
}
}
showIn(obj,1)
然而,这有两个问题。1)我有多个从 C 中的对象进入 B 的链接,对于每个链接,它都会多次显示 C 的名称。我希望它在 B 中的每个对象只显示一次 C 的名称,因此没有冗余。2) C 的名称在 B 中显示为新列,但我希望将其连接到现有列中文本的末尾。
此外,A 和 B 之间的链接集与 B 和 C 之间的链接集位于不同的文件夹中,因此我在上面提供的 stockoverflow 答案似乎不起作用1。
我想有两种不同的方法。在 B 中的对象文本末尾显示 C 的名称,然后让 A 调用该 B 列,从而抓取两个链接的对象。在这种情况下,我只需要 B 的 DXL 代码。或者让 A 足够聪明,可以调用 B 列并将 C 的名称附加到它上面。在这种情况下,我只需要 A 的 DXL 代码。
我不确定这个论坛是否适合回答这个问题(我试过打电话给 IBM 支持,他们在这里推荐了我)。先感谢您。