【问题标题】:in DXL, how to get the handle of a module that I don't open myself in the DXL script在 DXL 中,如何获取我在 DXL 脚本中不自己打开的模块的句柄
【发布时间】:2021-03-30 14:24:13
【问题描述】:

我有一个 DXL 脚本,可以打开(读取或编辑)模块并将它们放在跳过列表中(这样我可以在最后关闭它们)

跳过列表存储每个模块读取或编辑的模块句柄:

if (MODIF_OTHER_MODULES)
{
modSrc = edit(modSrc_Name, false)
} else 
{
modSrc = read(modSrc_Name, false) 
}
put(skp_openmodule, modSrc, modSrc) 

但有时模块已经在我的 DXL 脚本之外打开,因此以下检查是 KO:

mvSource = sourceVersion lr 
modSrc_data = data mvSource 
modSrc_Name = fullName(source lr)

if (null modSrc_data)
"read/edit modSrc_Name module and add module in the skip list" : OK DONE
else
"the module is already open but maybe I don't open it myself"
"so I WANT TO CHECK if module is already in the skiplist and ADD module of modSrc_data in the precedent skip list if it isn't " : I DONT KNOW HOW !

"

有没有办法获取 modSrc_data 的模块,如果列表中不存在,可以将其添加到 skp_openmodule 中?

我不想再次阅读/编辑它,因为我不知道它之前以哪种模式打开,我宁愿避免它,因为我会为每个对象和每个链接做它!

如果我还可以检索有关模块打开方式(读取或编辑)的信息,那就太好了

我试过了: 模块(modSrc_data) 和 模块(modSrc_Name) 但它不起作用。

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    不确定这是否是由于您发布的摘录所致,但您应始终关闭自动声明选项,并通过查看 DXL 手册或使用诸如“无证烫发名单”。 dataModuleVersion 上执行返回类型 Module。所以你已经拥有了你需要的东西。另一种选择是烫发bool open(ModName_ modRef)。请注意,烫发module 不返回Module,而是返回ModName_。 另外,除了bool isRead(Module m)bool isEdit(Module m)bool isShare(Module m)(!!) 当你真的想关闭之前打开的模块时,你可能需要检查bool unsaved(Module m)

    ModuleVersion mvSource = sourceVersion lr 
    Module modSrc_data = data mvSource 
    string modSrc_Name = fullName(source lr)
    
    if (null modSrc_data)
        print "read/edit modSrc_Name module and add module in the skip list" 
    else
    {
        print "the module is already open but maybe I don't open it myself"
        if isRead (modSrc_data) then print " - read"
        if isEdit (modSrc_data) then print " - edit"
        if isShare (modSrc_data) then print " - shared mode"
        if unsaved (modSrc_data) then print " - do not silently close me, otherwise the user might be infuriated"
    }
    

    【讨论】:

    • 感谢您的回答,modSrc_data 是我尝试的第一件事,但我犯了一个错误,因为它不起作用。现在它是。伟大的 !也感谢布尔函数。 modSrc_data 被正确地声明为模块,是的。对于我的文化,module 和 modename_ 有什么区别?
    • ModName_ 就像对模块的引用。它用于例如当您需要有关模块的一些信息,但实际上不需要或不想打开它时。 bool exists(ModName_ modRef) 是一个很好的使用示例。 Module 是实际已打开的模块的句柄,您可以使用例如遍历其中的所有对象
    • 但实际上我该如何使用它?例如,我有一个打开的模块 TOTO。让我们假设稍后在代码中我想检查 TOTO 是否打开。函数是 bool open(ModName_ modRef) 如何将作为模块的 TOTO 转换为 ModName_ 类型?这样我就可以在“打开”功能中使用 TOTO 了吗?
    • 以下 perms 返回一个 ModName_: ModName_ getTargetModule (Linkset) ModName_ target (Link) ModName_ module (ModuleVersion) ModName_ source (LinkRef) ModName_ source (ExternalLink) ModName_ module (string name) ModName_ source (Link ) ModName_ getModuleByRifID (Folder, string) ModName_ getModuleByRifID (Folder, string) ModName_ getModuleByRifID (Project, string) ModName_ getModuleByRifID (Project, string) ModName_ module (Module module) 所以,这是可能的:Item i for i in current Folder do { print fullName i"-" ModName_ mn = module(fullName i) print open (mn) "\n" }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多