【问题标题】:Deletion of module columns/attribute not visible on a given View删除给定视图上不可见的模块列/属性
【发布时间】:2019-04-26 11:07:48
【问题描述】:

我的任务是创建 DXL 脚本。第一个问题是我以前从未使用过 DXL,尽管我对 DOORS 本身有多年经验。我一直在网上冲浪以寻求有关我的特定问题的指导。我也有一些样本 DXL 脚本供参考。

我的新客户要求对于给定模块的每个视图(其中有许多视图),要生成反映每个视图的新“简化”模块。

“减少”是指这些新模块不包含该视图实际不需要的任何内容,即列、属性等。这些新模块将只有一个视图。

因此,在我看来,前进的方向是复制单个主模块,每个视图一个,重命名这些副本以反映给定的主模块/所需视图,在给定的副本模块中选择所需的视图然后删除该视图不需要的所有内容,即可用的列、属性等。

如果我具备所需的 DXL 知识,这将很简单,我正在努力尽快掌握这些知识。

如果可能的话,这个脚本必须是通用的,并且能够在任何主模块副本上工作,以生成反映特定视图的关联“简化”模块。

客户打算定期使用脚本进行视图存档(我知道,这就是他们想要的方式)。

澄清

鉴于我最初的问题中的以下文字,我认为需要澄清一下:

如果可能的话,这个脚本必须是通用的,并且能够在任何主模块副本上工作,以生成反映特定视图的关联“简化”模块。

因此,假设主模块有十个视图,在 DXL 脚本之外,我将复制主模块十次,重命名每个副本以反映十个视图中的每一个。除非你知道不同,否则这十个副本中的每一个都将反映与主模块中相同的“绝对数字”,所以没有问题吗?

因此,从复制的第一个模块开始,每个模块的名称都反映了它最终将代表的视图,它的视图将从它可用的十个视图中设置,与它的标题匹配。

然后将针对第一个副本模块运行单个通用 DXL 脚本,目的是删除该视图实际上不需要的所有内容,即属性、列等。脚本中是否需要某种清除命令上述删除的项目?

然后,单个通用 DXL 脚本将从该副本模块中删除所有视图。运行脚本时产生的日志也需要捕获,但我不确定是否应该在脚本内完成,如果可能的话,或者作为脚本外的单独手动任务。

然后将使用相同的通用脚本对剩余的九个复制模块重复上述(缩进)过程。目的是为我们留下十个副本模块,每个模块反映十个可能的视图之一,每个模块仅包含该视图所需的属性、列等。

【问题讨论】:

    标签: ibm-doors


    【解决方案1】:

    使用这种方法创建模块的镜像在 IMO 中并不容易。想想例如关于“绝对数”。如果原始模块包含数字 15(级别 1)、2000(级别 2)、1(级别 1),您将必须创建 2000 个对象,清除其中 1997 个并将它们移动到正确的位置。 https://www.ibm.com/developerworks/community/forums/html/topic?id=43862118-113d-4eac-b3f1-21d3b73959d1 有一个“重复”工具,它试图做到这一点,但正如那里所说,据说该脚本并非在所有情况下都能正常工作。

    所以,我宁愿使用“string clipCopy (Item i); string clipPaste(Folder folderRef)”的方法。应该更快,更不容易出错。但是:所有的 Out-Links 也会用这种方法复制,你可能必须在复制后删除它们,否则链接目标模块将有很多 In-Links。

    这个问题仍然不是那么容易解决,因为每个视图都可能有依赖于某些或其他属性的 DXL 列,并且它可能包含再次可能依赖于其他属性的 DXL 属性。我怀疑是否有一种方法可以“即时”分析 DXL 代码并找出可以删除哪些列。

    也许一种完全不同的方法是可行的:打开每个视图并创建一个到 Excel 的导出,这样您就可以摆脱任何动态依赖关系。然后将 excel 表重新导入到新的 DOORS 模块。你仍然会有“绝对数”的问题,但也许你可以做一个交易,你将有一个伪属性“原始绝对数”而忽略“新”“绝对数”'

    对于 DXL 初学者来说是一项艰巨的任务......

    更新:再想一想,也许您可​​能想结合这些方法

    • 与您的雇主同意,您将为绝对编号使用替代属性
    • 使用 Russel 建议的循环,在创建对象时请记住,对象可能必须在其前身或同级的“下方”或“之后”创建
    • 对于 DXL 属性,不要复制 DXL 代码,而是复制对象的实际当前值
    • 为 DXL 列创建伪属性 _ 并创建一个使用这些伪属性而不是原始值的新视图

    【讨论】:

    • 在原始帖子中添加了说明。
    • 罗伯特,是的,这或多或少是我理解的任务。总结一下:您有两种方法可以实现这一目标。使用剪贴板将模块复制/粘贴到新位置并在副本中,删除所有不必要或干扰的内容(外链接),或者从头开始重新构建模块,忽略副本中不需要的所有内容.在这两种方法中,您都很难找到不需要的内容,因为视图可能包含动态(即由 DXL 计算)值。
    • 也许最简单的方法是使用剪贴板复制模块 x 次(每个视图一次),并且在每个副本中只删除“其他”视图和输出链接,删除其他任何内容。这样,您至少有一点机会不会删除太多。但是您对原始模块没有优势。如果您的总体任务是创建模块的不可变版本,则最好使用报告或导出到 Excel。恕我直言,如果没有关于细节的进一步决定,该要求是不可行的。总体目标是什么,这些副本应该做什么?
    • 关于第一段的前半部分,即“...删除所有不必要或干扰(外链接)...”,从脚本中我如何确定特定视图不需要的所有内容。对我来说,这似乎是问题的主要症结所在,即找到每个这样的项目,然后删除每个找到的项目。
    • @Robert,是的,我也认为这是主要问题。对于这样的任务,我没有看到任何解决方案。您会在 Excel 中遇到同样的问题,要求您删除某个单元格的内容,但您永远无法知道此内容是否在工作表、工作簿、宏甚至另一个工作簿的某个公式中使用一些网络共享。你只能猜测。您的猜测很有可能是错误的。
    【解决方案2】:

    复制整个模块,然后删除不在该视图中的所有内容,这似乎比从每个特定视图中复制您需要的内容更糟糕。

    我将以下内容作为您的程序大纲:

    for view in main module do {
        for column in view do {
            Find attribute for each column and store (possibly in a skip list?)
            Store name of column
        }
        create new module
        create needed types / attributes in new module
        create new view in new module
    
        for object in main module {
            create object in new module
            for attribute in main module {
                check if attribute is in new module {
                    copy info from old object to new
                }
            }   
        }
    }
    

    这些 for X in y 循环中的每一个都应该在 DXL 参考手册中的某些 for 中。

    如果您需要更多帮助,请告诉我!

    【讨论】:

    • 在原始帖子中添加了说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2016-04-22
    • 2011-06-21
    相关资源
    最近更新 更多