我喜欢 dxl 脚本,它可以让我列出死链接,即列出指向已删除对象的链接。
我试过门里是否有任何选项,但找不到。
你能帮忙吗?
谢谢
我一直在调查这个问题很长时间,但我无法确定这个问题的原因,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)
我没有运行以下代码,这不是最有效的,但它会让你开始:
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)
}
Edit > Purge all
将清除/删除所有已删除的对象,包括所有死链接!
请注意,在此操作之后无法取消删除。