【问题标题】:How to find requirements by keywords using DOORS DXL如何使用 DOORS DXL 按关键字查找需求
【发布时间】:2020-05-06 23:39:59
【问题描述】:

我为模块 A 中的每个需求确定了 3-5 个关键字。每个关键字用逗号分隔。现在我想搜索模块B中的每个需求,看看它们中的哪些词与每个关键词匹配。

【问题讨论】:

    标签: keyword ibm-doors


    【解决方案1】:

    不确定您在寻找什么。如果我将要提出的这些解决方案都不是您正在寻找的,您可能需要说明。

    如果您尝试创建一个仅在当前视图中显示具有这些关键字的对象的过滤器,您可以通过首先转到过滤器(工具 > 过滤器 > 定义)然后选择高级按钮来创建高级过滤器出现的过滤器菜单的左下角。

    此时您可以为过滤器创建自定义规则。我会为每个单词创建一个单独的规则,定义如下:

    Attribute: Object Text
    Condition: contains
    Value: <insert word here>
    Match Case: uncheck
    Regular Expression: uncheck
    

    然后选择添加按钮将规则添加到高级选项中的可用规则列表中。

    此时,您可以在可用规则列表中选择多个规则,并且可以将这些规则与/或组合在一起,为您想要的视图创建自定义过滤器。

    如果您尝试使用仅包含特定单词的对象创建自定义视图。

    如果您正在讨论编写 DXL 代码以自动吐出包含特定单词的需求。您可以使用如下所示的内容:

    Object o
    String s
    int offset, len
    
    for o in entire (current Module) do
    {
      if (isDeleted(o)) continue
    
      s = o."Object Text"""
      if findPlainText(s, "<insert word here>", offset, len, false)
      {
        print identifier(o)  // or replace this line with however you want to display object
      }
    }
    

    希望这会有所帮助。干杯!

    编辑:

    要对逗号分隔的列表执行操作,一次一个,您可以使用带有某种搜索功能的 while 循环,一次一个地切断单词。

    void processWord (string someWord, Module mTarget, Object oSource)
    {
      Object oTarget
      string objID = identifier(oSource)
    
      for oTarget in mTarget do
      {
        if (<someWord in oTarget Object Text>) // edit function as necessary to do this
        {
          if (oTarget."Exists""" == "")
            oTarget."Exists" = objID
          else
            oTarget."Exists" = oTarget."Exists" "," objID
        }
      }
    }
    
    int offset, len
    string searchCriteria
    Module mSource = read("<path of source module>", true)
    Module mTarget = edit("<path of target module>", true)
    Object oSource
    
    for oSource in mSource do // can use "for object in entire(m)" for all objects
    {
      if (oSource != rqmt) continue // create conditions specific to your module here
    
      searchCriteria = oSource."Search Criteria"""
      while (findPlainText(searchCriteria, ",", offset, len, false))
      {
        processWord(searchCriteria[0:offset-1], mTarget, oSource)
    
        searchCriteria = searchCriteria[offset+1:]
      }
    }
    
    processWord(searchCriteria, mTarget, oSource) // for last value in comma separated list
    

    【讨论】:

    • 感谢您的回复。对不起,我应该添加更多细节。所以在我的模块的一列中,我列出了关键字,用逗号分隔。=,例如跑步、跳跃、睡觉、吃饭
    • 感谢您的回复。对不起,我应该添加更多细节。因此,在我的源模块的一栏中,我列出了 5 个用逗号分隔的关键字 ea,即跑步、跳跃、睡眠、吃饭。我需要我的 DXL 代码循环遍历目标模块的对象,并分别从源模块中搜索每个单词。如果找到做一些事情,例如将对象的ID放在目标模块的列中,然后返回并拿起第二个单词,即跳转,转到目标模块,搜索,如果找到则放入对象的ID将源模块中的对象转换为目标模块中的对象。
    • 我知道如何遍历源模块中的对象并使用 Regexp 搜索任何内容,然后执行任何操作,但不知道如何从由分隔的单词列表中仅选取一个单词一个逗号并在目标模块中搜索它(即,对于每个单词而不是所有单词),然后返回并选择第二个单词并在目标模块中搜索它,依此类推。
    • 希望我理解正确。当说“源模块中的列”时,我假设您的意思是只有一个对象具有这五个关键字,并不是该源模块中的每个对象都有五个不同的关键字。如果是前者,我编辑了我的原始帖子以获取一些可能对您有用的代码。如果你说的话有什么我遗漏的地方,请告诉我。
    • 谢谢 DC United。是的,当我阅读自己的文字时,我发现它是多么不准确和模棱两可。我道歉。所以我现在将尝试更准确地解释这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多