当尝试通过DXL编辑模块时,为什么DOORS模块有时为空?

时间:2019-05-13 12:12:46

标签: module null ibm-doors

我是IBM DOORS中DXL编程语言的新手。但是,我认为我已经做了很多有趣的事情:创建模块,创建对象,创建链接,删除对象等。

但是,关于“空”模块,我有一个非常具体的问题。我刚刚在“”之间写了空值,因为这些模块存在,并且用正确的名称引用了它们。

这样做时:

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

出现这样的错误:     enter image description here

您无法理解这是西班牙文的意思。基本上声明以下内容:“在参数的第一个位置使用模块空参数”。这意味着“ m1”为空,因为save()方法的参数为空。

重点是这是一个仅在某些时候出现的错误。似乎该模块为空,因为它先前已打开并且DOORS无法正常关闭。

有什么方法,任何方法...可以避免这种错误吗?

4 个答案:

答案 0 :(得分:1)

我假设当另一个文件夹处于活动状态时,脚本找不到模块。 试试

Module m1 = edit ("/myproject/myfolder/mysubfolder/1. MY_MODULE", false)

答案 1 :(得分:0)

您的脚本如何工作?您一次又一次地打开同一模块,有时会收到错误消息?还是打开了很多模块,对于其中一些模块而言,它起作用,而对于其他模块而言,则不起作用?在后一种情况下,也许您拼错了路径。您可以添加一些健全性检查,例如

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

答案 2 :(得分:0)

代码的结构如下:

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 为空,但我看不到任何原因。

答案 3 :(得分:0)

有许多原因导致无法在编辑模式下打开模块。例如:用户没有写访问权限,或者其他用户正在使用模块,等等。
但是,您可以使用以下代码段解决该错误:

Module m = edit('My_module', false)
if(!null m) {
    //execute program
    ...
}
else {
    //do something
}

我希望这会有所帮助。