【问题标题】:checking an object in a nested link via dxl通过 dxl 检查嵌套链接中的对象
【发布时间】:2019-01-24 17:40:36
【问题描述】:

我有以下情况。 我想在模块 1 中计算,有多少对象在模块 3 的链接中具有链接。

示例:

模块 1 Obj1

模块 1 Obj2

模块 1 Obj3

模块 1 Obj4

模块 1 Obj5

在上述情况下,计数应返回 3。

是否可以通过 DXL 关注一个链接,然后再关注另一个链接? (不使用 Wizard 或 DXL 属性)

对我来说最重要的是:知道其他人是否这样做以及是否可以这样做。

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    请在具有传入链接的模块中尝试以下 DXL。运行代码前:

    1. 确保从相关模块打开“编辑 DXL”窗口
    2. 将分配给全局常量 STR_LINK_MOD_FULLNAME(第 17 行)的字符串值设置为您感兴趣的链接模块的完整路径名
    3. 将分配给全局常量 STR_SRC_MOD_FULLNAME(第 18 行)的字符串值设置为您感兴趣的链接的源正式模块(在您的示例中为模块 3)的完整路径名

    您无需更改任何其他内容即可使其正常工作。

    注意我没有考虑通过使用字符串“*”代替第 17 行中的特定链接模块名称来分析所有链接模块中的链接的含义(参见上面的第 2 点)。

    我也没有竭尽全力解释代码,尽管我已经尝试在 DOORS 和 DXL 需要它的地方做好自己的工作。如有任何关于我所做的事情的问题,请随时回复。

    亲切的问候,

    理查德

    //<CheckObjectInNestedLink.dxl>
    
    /*
     */
    
    ///////////////
    // Sanity check
    
    if (null (current Module))
    {
        print "ERROR: this script must be run from a Formal Module."
    }
    
    ///////////////////
    // Global Constants
    
    const string STR_LINK_MOD_FULLNAME = "/New Family Car Project/Admin/Satisfies" // the fullName of a single link module - results of using "*" have not been considered/tested
    const string STR_SRC_MOD_FULLNAME  = "/New Family Car Project/Architecture/Architectural Design" // The fullName of the desired source Formal Module
    
    
    ///////////////////
    // Global Variables
    
    Module modSource               = null
    Object objTarget               = null
    Object objSource               = null
    Link   lkIn                    = null
    Skip   skLinkedMods            = create()
    Skip   skObjsWithDesiredSource = create()
    
    int intNoOfLinked              = 0
    
    
    //////////////////////
    // Auxiliary Functions
    
    void closeSourceMods ()
    {
        Module srcMod
    
        for srcMod in skLinkedMods do
        {
            close(srcMod)
        }
    }
    
    void openSourceMods (Object objWithLinks)
    {
        ModName_ srcModRef
        Module   srcMod
    
        for srcModRef in (objWithLinks <- STR_LINK_MOD_FULLNAME) do
        {
            srcMod = read(fullName(srcModRef), false)
            put(skLinkedMods, srcMod, srcMod)
        }
    }
    
    void recurseFollowInLinks (Object objWithLinks)
    {
        openSourceMods(objWithLinks)
    
        for lkIn in objWithLinks <- STR_LINK_MOD_FULLNAME do
        {
                openSourceMods(objWithLinks)
                objSource = source(lkIn)
    
                string strSrcModName = fullName(module(objSource))
    
                if (strSrcModName == STR_SRC_MOD_FULLNAME)
                {
                    bool blNewEntry = put(skObjsWithDesiredSource, objTarget, objTarget)
    
                    if (blNewEntry)
                    {
                        intNoOfLinked++
                    }
                    //print "put(skObjsWithDesiredSource, " identifier(objTarget) ", " identifier(objTarget) ")\n"
                }
    
                recurseFollowInLinks(objSource)
        }
    }
    
    void checkObjectInNestedLink (Module modThis, string strSourceModuleFullname, string strLinkModuleFullName)
    {
        intNoOfLinked = 0
    
        for objTarget in modThis do
        {
            recurseFollowInLinks(objTarget)
        }
    
        print "The following " intNoOfLinked " objects have direct or indirect links of type " STR_LINK_MOD_FULLNAME " from formal module " STR_SRC_MOD_FULLNAME ":\n"
    
        for objTarget in skObjsWithDesiredSource do
        {
            print identifier(objTarget)
            print "\n"
        }
    }
    
    
    ///////////////
    // Main Program
    
    checkObjectInNestedLink ((current Module), STR_SRC_MOD_FULLNAME, STR_LINK_MOD_FULLNAME)
    
    closeSourceMods()
    delete(skLinkedMods)
    delete(skObjsWithDesiredSource)
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多