DXL 门:找出模块仍然打开的原因

DXL doors : finding why a module is still open

我在脚本末尾使用这个循环来检测我是否还有打开的模块:

for module_in_database in database do 
{   
    logResult = logResult "INFO: open modules at the end the script are " fullName(module_in_database) "\n"
}

然后在我的(相当复杂的脚本)结束时,我仍然打开了那些模块:

INFO: open modules at the end the script are /spec_fpga/spec_fpga
INFO: open modules at the end the script are /spec produit/spec_produit
INFO: open modules at the end the script are /spec produit/spec_produit
INFO: open modules at the end the script are /spec_fpga/_conf/OBJ_satisfies_OBJ
INFO: open modules at the end the script are /spec_fpga/_conf/OBJ_satisfies_OBJ

我该怎么做才能关闭它们,甚至更好地理解为什么它们仍然打开(确定 linked 给它们的变量名称?) 打开 link 模块是否正常?我不打开这样的 link 模块。它们是否随下游模块自动打开? 也不知道是开放的模块还是模块的基线

我不确定为什么 spec_produit 和 OBJ_satisfies_OBJ 出现两次,spec_produit(正式模块?)之一可能是单独的基线,但对于 link 模块,例如 OBJ_satisfies_OBj,难得有基线。 您可能会通过启动“工具→管理打开的模块”并在脚本运行时查看列表来了解模块何时打开。也许您想为此使用 DXL 调试器。 一般情况下,link个模块会在包含link个正式模块打开时自动打开,但通常在正式模块关闭时它们会自动再次关闭。当正式模块包含 in links 并且打开到该模块的 out link 时,可以打开正式模块。您可能有一个模块带有一个(默认)视图,该视图跟随它的所有 links。或者在执行类似操作的模块中可能存在触发器或 DXL 属性。

您可能需要查看 isBaseline moduleVersion module_in_databaseversionString moduleVersion module_in_database 以获取更多信息。

要关闭它们,只需使用close module_in_database

旁注:在 DXL 中,关闭当前循环的内容绝不是一个好主意,因此您想使用这样的临时跳过列表:

Skip closeMe = create
for module_in_database in database do {
    logResult = logResult "INFO: currently open: " (fullName module_in_database) ((isBaseline (moduleVersion module_in_database)) ? " Baseline " (versionString moduleVersion module_in_database) : " (current version)") "\n"
    put (closeMe, module_in_database, module_in_database)
}
Module m 
for m in closeMe do {
    if open (module m) then {
        logResult = logResult "INFO: closing " fullName m "\n"
        close m
}   }
delete closeMe