Как найти требования по ключевым словам с помощью DOORS DXL - PullRequest
0 голосов
/ 07 мая 2020

Я определил 3-5 ключевых слов для каждого требования в модуле-A. Каждое ключевое слово разделяется запятой. Теперь я хочу просмотреть каждое требование в модуле-B, чтобы увидеть, какие из них содержат слова, соответствующие каждому из ключевых слов.

1 Ответ

0 голосов
/ 27 мая 2020

Не совсем уверен, что вы ищете. Возможно, вам придется указать, не является ли ни одно из этих решений, которые я собираюсь предложить, именно тем, что вы ищете.

Если вы пытаетесь создать фильтр, который отображает только объекты с этими ключевыми словами в текущем представления, вы можете создать расширенный фильтр, сначала перейдя к фильтру (Инструменты> Фильтр> Определить), а затем нажав кнопку Дополнительно в левом нижнем углу появившегося меню фильтра.

На этом этапе вы можете создать собственный правила для фильтра. Я бы просто создал отдельное правило для каждого слова со следующим определением:

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

Затем нажмите кнопку «Добавить», чтобы добавить правило в список доступных правил в дополнительных параметрах.

На этом этапе вы можете выбрать несколько правил в списке доступных правил, и вы можете И / ИЛИ эти правила вместе, чтобы создать настраиваемый фильтр для нужного вам представления.

Так что, если вы пытаетесь создать собственное представление только с объектами, содержащими определенные c слова.

Если вы говорите о написании кода 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 l oop с какой-то функцией поиска, которая отсекает слова one за один раз.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...