【问题标题】:Is there a DXL API to get the reference count of opened modules?是否有 DXL API 来获取打开模块的引用计数?
【发布时间】:2013-02-01 12:56:22
【问题描述】:

DOORS 8.3 的“管理打开的模块”对话框列出了所有打开的模块、它们的模式(如果可见)等以及引用的数量。我想使用该引用计数来确定我的脚本是否可以安全地关闭模块并避免在当前使用时关闭。我不确定“参考”列到底显示了什么。我在互联网上的帮助或相应信息中没有找到它的描述。有人知道是否有一些未记录的 DXL API 可以让我访问这些信息吗?

编辑:我找到了函数refcount_,它返回一个整数。但是我不知道返回值是什么意思。

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    看起来引用是指当前引用该模块的打开模块的数量。例如:当您打开具有链接的模块时,DOORS 还会在后台打开链接使用的所有链接模块。因此,如果我通过 LINKMOD_A 打开包含链接的文档,LINKMOD_A 将显示 1 个参考。如果我随后打开另一个具有通过相同 LINKMOD_A 链接的文档,则引用数将增加到 2。我没有看到正式模块上的引用数高于 1。在你的一些模块上试试这个,看看你什么时候在一个链接模块上得到多个引用,然后对那个链接模块运行你的 refcount_ 函数,看看你是否得到相同的数字。我不确定这是否是您正在寻找的功能,但它肯定是可能的。祝你好运!

    【讨论】:

    • 阅读您的答案让我觉得这个“参考”信息不是我要寻找的。不过谢谢你的回答。
    【解决方案2】:

    我假设你的脚本正在打开模块,所以你需要做的就是先检查它是否已经打开。

    string sModuleFullName = "/Some/Module/Path"
    Module oModule = module(sModuleFullName)
    bool bClose = null(oModule)
    if(null(oModule)) {
    oModule = read(sModuleFullName, true,true)
    }
    
    // do stuff
    
    if(bClose) {
    close(oModule)
    }
    

    编辑: 关闭由触发器、属性或布局 dxl 打开的模块的替代方法

    // Save currently open Modules to a Skip
    Skip oOpenModulesSkip = createString()
    Module oModule
    for oModule in database do {
        put(oOpenModulesSkip, fullName(oModule), fullName(oModule))
    }
    
    // do stuff
    
    // Close Modules not in the Skip
    for oModule in database do {
        if(!find(oOpenModulesSkip, fullName(oModule))) {
            close(oModule, false)
        }
    }
    delete(oOpenModulesSkip)
    

    【讨论】:

    • 这或多或少是我已经使用的方法。但我想有一种更好的方法来优化模块的读取和关闭。例如。由于布局或属性 DXL 将隐式打开的模块。我的脚本对这个模块一无所知。
    • 直到今天我还没有找到更好的解决方案。因此我接受它作为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多