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

Module 为什么在尝试通过DXL编辑模块时,DOORS模块有时为空?,module,null,ibm-doors,Module,Null,Ibm Doors,我不熟悉IBM DOORS中的DXL编程语言。然而,我想我已经做了很多有趣的事情:创建模块、创建对象、创建链接、删除对象等等 但是,关于“null”模块,我有一个非常具体的问题。我刚刚在“”之间写了null,因为模块存在,并且使用正确的名称引用它们 执行此操作时: Module m1 = edit("1. MY_MODULE", false) save(m1) close(m1) 出现如下错误: 你无法理解这是什么意思,因为它是西班牙语。基本上是这样的:“参数第一个位置的Module

我不熟悉IBM DOORS中的DXL编程语言。然而,我想我已经做了很多有趣的事情:创建模块、创建对象、创建链接、删除对象等等

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

执行此操作时:

 Module m1 = edit("1. MY_MODULE", false)
 save(m1)
 close(m1)
出现如下错误:

你无法理解这是什么意思,因为它是西班牙语。基本上是这样的:“参数第一个位置的Module null参数。”这意味着“m1”为null,因为save()方法的参数为null

关键是这是一个错误,只是偶尔出现。模块似乎为空,因为之前已打开,门未正确关闭


是否有任何方法可以避免此错误?

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


你的脚本是如何工作的?您是否一次又一次地打开同一个模块,有时会出现错误,或者您是否打开了许多模块,其中一些模块工作正常,而另一些模块则不工作?在后一种情况下,可能是您拼错了路径。您可以添加一些健全的检查,如

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代码执行这个脚本。一件奇怪的事情是,如果我关上门,并执行脚本,它会正确执行。就好像需要关闭它才能正确编辑模块一样

I pressumecurrent可对不同类型的项目使用多次。我想这不应该是错的,但它打破了说(或多或少):

传递给DXL commmand(当前模块)的空值


显然,这意味着m为空,但我看不出任何原因。

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

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

我希望这能有所帮助。

如果设置为空,您不能重试吗?DOORS非常糟糕,DXL语言非常糟糕。“祝你好运!”让·弗朗索瓦·法布试着这么做。问题是,它应该是一种关闭“打开的”但“看不见的”模块的方法……否则,问题并没有真正解决。感谢您的支持呵呵:)在同一个会话中,该模块以前不太可能被打开,当然也可能是其他人打开了该模块。对于这种情况,您应该使用“edit”perm的第三个参数(1.字符串名称,2.bool显示,3.bool静默),在编辑之后,询问m1是否为null。它似乎已经改进了很多次,但有时(即使在较少的情况下)出现中断和错误…有什么改进吗?有什么提示吗?不,这是第一种情况。我通过多次编辑打开同一个模块…这可能是问题所在吗?嗯,这不太可能。当你有一个脚本时-编辑“/path/to/module”-对模块做些什么或不-编辑“/path/to/module”或多或少等于“current=m”,即无论模块是否已更改或保存或未保存或关闭,它都会将客户机的焦点带到模块上。也许您可以通过评估lastError(请参阅noError/lastError)获得有关发生错误的更多信息在DXL手册中,我在接下来的几行中写下了确切的情况。也许您可以按以下顺序获得更多信息:错误;模块m=edit(…);if lastError(){print”错误:lastError()“\n”};if null m{print”m为null,但没有发生错误\n”}我假设在重复调用函数时,您确信folderPath和mName具有正确的值。也许您应该通过打印“->”folderPath”“mName”“if(模块mName)进行双重检查"看起来不正确。是否要检查给定位置是否有模块?这将通过我的答案5月14日13:09中的检查来完成。这不是问题,它可以,因为它与某些模块一起工作。我对问题有%95的把握:如果模块以独占模式打开,则函数编辑无法控制该模块模块…返回null。有可能吗?我不知道这是怎么发生的,我从来没有见过这种情况。如果您同时打开多个模块,而客户端没有内存,可能会发生这种情况。如果您可以在稳定的情况下重现此问题,也许您可以向IBM发出支持电话。但如果这是真的有一个问题,也许您可以创建一个全局跳过列表,其中key=fullName of Module,data=opened Module。这样您就可以从跳过中使用模块,而不是再次打开模块。
Module m = edit('My_module', false)
if(!null m) {
    //execute program
    ...
}
else {
    //do something
}