为什么在尝试通过 DXL 编辑模块时 DOORS 模块有时为空?
Why is a DOORS Module sometimes null when trying to edit the Module via DXL?
我是 IBM DOORS 中 DXL 编程语言的新手。但是,我认为我已经设法做了很多有趣的事情:创建模块、创建对象、创建链接、删除对象等。
但是,我有一个关于 "null" 模块的非常具体的问题。我刚刚在“”之间写了空,因为模块存在并且它们被正确的名称引用。
执行此操作时:
Module m1 = edit("1. MY_MODULE", false)
save(m1)
close(m1)
出现这样的错误:
enter image description here
你无法理解这是什么意思,因为它是西班牙语。基本上是这样说的: "Module null parameter in the first position of the argument." 这意味着 "m1" 为空,因为 save() 方法的参数为空。
问题在于,这是一个只偶尔出现的错误。似乎模块为空,因为它之前已打开并且 DOORS 未正确关闭。
有什么办法,任何方法...可以避免这个错误吗?
我假设当另一个文件夹处于活动状态时脚本无法找到该模块。
尝试
Module m1 = edit ("/myproject/myfolder/mysubfolder/1. MY_MODULE", false)
您的脚本如何工作?您是否一次又一次地打开同一个模块,有时会出现错误,或者您是否打开了很多模块,其中一些模块可以工作,而另一些模块却没有?在后一种情况下,您可能拼错了路径。您可以添加一些完整性检查,例如
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
准则的结构如下:
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 代码通过 Batch 执行此脚本。一件奇怪的事情是,如果我关闭 DOORS,并执行脚本,它确实会正确执行。好像需要关闭才能正确编辑模块。
I pressume current 可以多次用于不同类型的物品。我猜应该没有错,但它打破说(或多或少):
Null value passed to DXL commmand (current Module).
显然,这意味着 m 为空,但我看不出任何原因。
在编辑模式下无法打开模块的原因可能有很多。例如:用户没有写入权限或模块正在被其他用户使用等
但是,您可以使用以下代码片段解决该错误:
Module m = edit('My_module', false)
if(!null m) {
//execute program
...
}
else {
//do something
}
希望对您有所帮助。
我是 IBM DOORS 中 DXL 编程语言的新手。但是,我认为我已经设法做了很多有趣的事情:创建模块、创建对象、创建链接、删除对象等。
但是,我有一个关于 "null" 模块的非常具体的问题。我刚刚在“”之间写了空,因为模块存在并且它们被正确的名称引用。
执行此操作时:
Module m1 = edit("1. MY_MODULE", false)
save(m1)
close(m1)
出现这样的错误: enter image description here
你无法理解这是什么意思,因为它是西班牙语。基本上是这样说的: "Module null parameter in the first position of the argument." 这意味着 "m1" 为空,因为 save() 方法的参数为空。
问题在于,这是一个只偶尔出现的错误。似乎模块为空,因为它之前已打开并且 DOORS 未正确关闭。
有什么办法,任何方法...可以避免这个错误吗?
我假设当另一个文件夹处于活动状态时脚本无法找到该模块。 尝试
Module m1 = edit ("/myproject/myfolder/mysubfolder/1. MY_MODULE", false)
您的脚本如何工作?您是否一次又一次地打开同一个模块,有时会出现错误,或者您是否打开了很多模块,其中一些模块可以工作,而另一些模块却没有?在后一种情况下,您可能拼错了路径。您可以添加一些完整性检查,例如
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
准则的结构如下:
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 代码通过 Batch 执行此脚本。一件奇怪的事情是,如果我关闭 DOORS,并执行脚本,它确实会正确执行。好像需要关闭才能正确编辑模块。
I pressume current 可以多次用于不同类型的物品。我猜应该没有错,但它打破说(或多或少):
Null value passed to DXL commmand (current Module).
显然,这意味着 m 为空,但我看不出任何原因。
在编辑模式下无法打开模块的原因可能有很多。例如:用户没有写入权限或模块正在被其他用户使用等
但是,您可以使用以下代码片段解决该错误:
Module m = edit('My_module', false)
if(!null m) {
//execute program
...
}
else {
//do something
}
希望对您有所帮助。