Я новичок в DXL и пытаюсь создать главный модуль (модуль A) в DOORS, в котором есть столбец, отображающий текст из модуля 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 из других модулей а>
Это было полезное начало для отображения имени C в квадратных скобках в новом столбце в B. Вот мой код для этого:
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)
Однако есть 2 проблемы с этим. 1) У меня есть несколько ссылок от объектов в C, входящих в B, и для каждой ссылки отображается имя C столько раз. Я бы хотел, чтобы имя C отображалось только один раз для каждого объекта в B, чтобы не было избыточности. 2) Имя C отображается как новый столбец в B, но я бы хотел, чтобы оно было конкатенировано в конце текста в уже существующем столбце.
Кроме того, набор ссылок между A и B находится в другой папке, чем набор ссылок между B и C, поэтому приведенный выше ответ на переполнение запасов, похоже, не работает 1.
Я полагаю, что есть 2 разных подхода к этому. Пусть имя C отображается в конце текста объекта в B, а затем A вызывает этот столбец B, таким образом захватывая оба связанных объекта. В этом случае мне нужен только код DXL для B. Или сделайте A достаточно умным, чтобы вызвать столбец B и добавить к нему имя C. В этом случае мне понадобится только код DXL для A.
Я не уверен, что этот форум является подходящим местом для этого вопроса (я пытался позвонить в службу поддержки IBM, и они направили меня сюда). Заранее спасибо.