1

我喜欢 dxl 脚本,它可以让我列出死链接,即列出指向已删除对象的链接。

我试过门里是否有任何选项,但找不到。

你能帮忙吗?

谢谢

4

3 回答 3

2

我一直在调查这个问题很长时间,但我无法确定这个问题的原因,IBM 也没有。标准做法应该是始终在 softDeleting 对象之前删除外链,并确保当用户在共享编辑中打开一个模块并锁定一个部分,同时进行对象修改或链接修改时,不要使用管理删除锁定功能。这样做将有助于消除这个问题,但不能完全消除,因为它发生了分配,我无法完全复制这个问题。

查找死链接的最佳方法是使用 targetAbsNo 和 sourceAbsNo 并检查源/目标对象是否匹配 AbsNo 和模块。如果您尝试将外链目标设置为一个对象,DOORS 将忽略此对象并且它不会找到 DeadLink IE(Object targetobj = target(lnk))。

如果尚未清除对象,您仍然可以使用源对象上的链接分析向导删除死链接,使用死链接创建指向对象的新链接,然后删除此链接并保存更改。如果带有死链接的对象已被清除,那么您就不走运了,我还没有找到一种方法来删除与不存在的对象之间的此类链接。此外,您还想知道带有死链接的未删除对象,这样就不会被软删除/清除,并会产生指向不存在对象的外链问题。

我在脑后编写了这段代码,所以它没有经过测试,它不会工作,但你应该知道如何寻找死链接。object() 以及源模块和目标模块的命名不正确,我不记得确切用于打开目标模块的语法,我目前无法访问文档,我很抱歉。

将结果复制粘贴到 Excel 中,您将得到一个漂亮的电子表格。

Object objSrc 
Link lnkTargetLink
Module modMain = read("/Project/YourModule", true, true) 
modMain = current
filtering off
showDeletedObjects true
Buffer bufDeadObjects = create
bufDeadObjects = "Error\tSource Object\tTarget Module\tTarget Object\n"
for objSrc in modMain do {
    for lnkTargetLink in all(objSrc -> "*") do {
         Module targetMod = target module lnkTargetLink //Incorrect syntax
         int intTargetAbs = targetAbsNo lnkTargetLink 
         showDeletedObjects (true)
         filtering off
         Object objTarget = object(intTargetAbs, targetMod) 
         if(null objTarget) {
               bufDeadObjects += "Target Object Does not Exist\t"sourceAbsNo lnkTargetLink "\t" fullName targetMod "\t" intTargetAbs"\n"
         } else {
               Link lnkSourceLink
               bool boolFoundLink = false
               for lnkSourceLink in all(objTarget <- "*") do {
                    if(sourceAbsNo lnkSourceLink != intTargetAbs) continue
                    Module modSourceMod =  source module lnkSourceLink //Incorrect syntax
                    if(fullName modSourceMod != fullName targetMod ) continue
                    boolFoundLink = true
               }
               if(!boolFoundLink and isDeleted(objTarget)) {
                    bufDeadObjects += "DeadInlink on a Deleted Object\t"sourceAbsNo lnkTargetLink "\t" fullName targetMod "\t" intTargetAbs"\n"
               } else if (boolFoundLink and isDeleted(objTarget)){
                    bufDeadObjects += "Outlink to a Deleted Object\t"sourceAbsNo lnkTargetLink "\t" fullName targetMod "\t" intTargetAbs"\n"
               } else {
                    bufDeadObjects += "DeadOutlink\t"sourceAbsNo lnkTargetLink "\t" fullName targetMod "\t" intTargetAbs"\n"
               }
         }
    }
}
print stringOf (bufDeadObjects)
于 2015-01-01T04:26:44.627 回答
0

我没有运行以下代码,这不是最有效的,但它会让你开始:

Link lnk ; for lnk in all obj->"*" do
{
    ModuleVersion targetmv = targetVersion(lnk)
    Module targetmod = load(mv,false)
    Object targetobj = target(lnk)
    if((null targetobj) || (isDeleted targetobj)) { /*dead link*/ }
    close(targetmod)
    delete(targetmv)
}
于 2014-10-02T09:12:58.927 回答
0

Edit > Purge all将清除/删除所有已删除的对象,包括所有死链接!

请注意,在此操作之后无法取消删除。

于 2015-05-06T12:24:03.180 回答