我是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)
以下是我迄今为止从其他查询中找到的内容: Show DXL columns from other modules
这是一个有用的开始,用于在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的名称显示在B中的对象文本的末尾,然后将A调用为B列,从而抓取两个链接的对象。在这种情况下,我只需要B的DXL代码。或者使A足够智能以调用B列并将C的名称附加到其中。在这种情况下,我只需要DX的DXL代码。
我不确定这个论坛是否适合这个问题(我试过打电话给IBM支持,他们在这里提到了我)。提前谢谢。
答案 0 :(得分:1)
我知道这个回复有点迟了,我相信你现在已经开始了,但是......我认为你正在寻找这样的事情......
pragma runLim, 0
void showIn(Object o, int depth) {
Link l, l2
LinkRef lr
ModName_ modC = null
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)
for l2 in all (othero <- "*") do {
modC = source(l2)
s = s " [" name(modC) "]"
break
}
if (s != "")
displayRich("\\pard " s)
}
}
}
showIn(obj,1)
您可能需要根据具体情况对其进行一些修改。
祝你好运!