如何在另一个没有直接链接的模块中显示模块的名称(DXL DOORS)

时间:2014-10-10 19:00:48

标签: ibm-doors

我是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支持,他们在这里提到了我)。提前谢谢。

1 个答案:

答案 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)

您可能需要根据具体情况对其进行一些修改。

祝你好运!