Почему модуль DOORS иногда обнуляется при попытке редактировать модуль через DXL? - PullRequest
1 голос
/ 13 мая 2019

Я новичок в языке программирования DXL в IBM DOORS.Тем не менее, я думаю, что мне удалось сделать много интересных вещей: создавать модули, создавать объекты, создавать ссылки, удалять объекты и т. Д.

Однако у меня есть очень специфическая проблема, связанная с «нулевыми» модулями.Я только что написал ноль между "", потому что модули существуют, и на них ссылаются с правильным именем.

При этом:

 Module m1 = edit("1. MY_MODULE", false)
 save(m1)
 close(m1)

Появляется такая ошибка: введите описание изображения здесь

Вы не могли понять, что это значит, так как он испанский.В основном говорится следующее: «Нулевой параметр модуля в первой позиции аргумента».Это означает, что «m1» является нулевым, поскольку параметр для метода save () является нулевым.

Дело в том, что это ошибка, которая появляется только иногда.Кажется, что модуль является нулевым, так как он был ранее открыт, и DOORS не закрывается должным образом.

Есть ли способ, любой метод ... что бы избежать этой ошибки?

Ответы [ 3 ]

1 голос
/ 13 мая 2019

Я предполагаю, что скрипт не может найти модуль, когда активна другая папка.Попробуйте

Module m1 = edit ("/myproject/myfolder/mysubfolder/1. MY_MODULE", false)
0 голосов
/ 16 мая 2019

Вот как структурирован Код:

void checkModule(string folderPath, string mName, Skip list, int listSize, int listLastIndex, string headers[], string heading[], string headerKey, bool uniqueKey, string combinedKey[]){
if (module mName){
    Folder f = folder(folderPath)
    current = f
    Module m = edit(folderPath""mName, false)
    current = m
    Object o = first(m) // error sometimes: Se ha pasado un parametro Module null en una posición de argumento 1
    if (o == null){
        loadModule(m, list, listSize, listLastIndex, headers, heading)
    } else {
        updateModule(m, mName, list, listSize, listLastIndex, heading, headerKey, headers, uniqueKey, combinedKey)
        save(m)
        close(m)
    }
    if (lastError() != ""){
        print "Error: " lastError() "\n"
    }
} else {
    print "No module " mName ".\n"
}

}

Точно, это ломается в линию:

current = m

Но, как сказано, только иногда, не всегда. Кстати, я выполняю этот скрипт через пакетную, через код Java. Любопытно, что если я закрываю DOORS и выполняю скрипт, он выполняется правильно. Это как если бы его нужно было закрыть, чтобы правильно редактировать модули.

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

Нулевое значение передано команде DXL (текущий модуль).

Очевидно, это означает, что m является нулевым, но я не вижу никакой причины для этого.

0 голосов
/ 14 мая 2019

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

string fullPathToMod = "/myproject/myfolder.."
Item i = item fullPathToMod; 
if null i then error "there is no item called " fullPathToMod
if "Module" != type i then error "there is an item, but it's not a module, it's a " type i
...