0

我正在寻找一些 DXL/DOORS 帮助...

我有 3 个模块:A、B 和 C。B 链接到 A,C 链接到 B。所以 B 是深度 1,C 是深度 2。我正在尝试在 A 中创建一个列来显示来自 B 和 C 的内联对象的对象文本、模块名称和对象编号。但是,我不想为 B 和 C 显示所有这 3 个(文本、名称、编号)——而是我想仅显示 B 中的对象文本以及 C 中的模块名称和对象编号。理想情况下,我希望 C 中的信息紧跟在 B 中的信息之后的方括号中。我希望它看起来像这样:

在 A 的列中:“来自 B 的对象文本”[“C 的模块名称”“C 的对象编号”]

我已经使用向导创建了以下布局 DXL 脚本,但目前它显示了 B 和 C 的所有 3 条信息。有没有人对如何仅打印 B(深度 1)中的对象文本有任何建议,然后是C 中的模块名称和对象编号(深度 2)?

注意:在下面的脚本中,我调整了结尾以按照我想要的顺序显示 s、p 和 t。

// DXL generated by DOORS traceability wizard on 27 October 2014.
// Wizard version 2.0, DOORS version 9.5.2.1
pragma runLim, 0
const int indentStep = 360
Buffer indentBuff = create
Buffer lineBuff = create
lineBuff = "______________________"
string indentAllParagraphs(string s, bool addBullets, int addedIndent)
{
    int numParas = 0
    RichTextParagraph rtp
    indentBuff = s
    for rtp in s do
    {
        numParas++
        Buffer t = create()
        t += rtp.text
        if (length(t) > 0 )
        {
            bool hasBullet = rtp.isBullet
            int  indentLev = rtp.indentLevel
            indentBuff = applyTextFormattingToParagraph(indentBuff, hasBullet, indentLev+addedIndent, numParas)
        }
        delete(t)
    }
    return (numParas == 0 ? "" : tempStringOf(indentBuff))
}
int lines[2] = {0, 0}
void adjustLines(int depth, showAtDepth) {
    int count
    for (count = 0; count < 2; 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]
        doneOne = true
        {
            s = name(otherMod)
            p = probeRichAttr_(othero,"Object Number", false)
            t = probeRichAttr_(othero,"Object Text", false)
            displayRich(t" ""["s" "p"]")
        }
        lines[depth-1] += 3
        if ( depth < 2 ) {
            showIn(othero, depth+1)
        }
    }
}
showIn(obj,1)
delete indentBuff
delete lineBuff
4

1 回答 1

0

这是我的处理方法:

在模块 B 中: 创建一个 DXL 属性,从模块 C 中提取您想要的信息,例如,一个名为“C 对象信息”的属性,它收集模块名称和对象编号。(我通常通过分析 > 向导执行此操作,然后使用工具 > 支持工具 > 将布局 DXL 转换为属性 DXL,然后调整 DXL)。因此,模块 B 中具有来自模块 C 的内链接的每个对象都将具有此属性“C 对象信息”,该属性可以在模块 A 中访问。

在模块 A 中: 创建一个 DXL 布局(通过分析 > 向导),从模块 B 中提取并格式化您想要的信息:“对象文本 [C 对象信息]”

[我不知道这样做是否是良好的 DOORS 实践,但它使脚本编写更容易一些。当我知道我将在多个链接层次结构级别(例如,从模块 A customerRequirement 到模块 B systemRequirement 到模块 C我的 systemRequirement 模块中的 customerRequirement 和 subsystemRequirement 的 DXL 属性,因此我可以从多个链接级别访问/显示/操作数据。它在可追溯性报告、开发验证/验证程序等方面派上用场。]

于 2014-11-05T16:44:21.420 回答