我喜欢使用dxl脚本,它允许我列出死链接,即列出导致删除对象的链接。
我试过,如果门里有任何选项,但找不到它。
你能帮忙吗?
由于
答案 0 :(得分:2)
我一直在调查这个问题很长一段时间,我无法确定这个问题的原因,IBM也没有。标准做法应该是在softDeleting对象之前始终删除outlinks,并且当用户在进行对象修改或链接修改时在部分编辑中打开一个带有锁的模块时,确保不使用adminisitrative remove lock函数。这样做有助于消除这个问题但不完全是因为它发生了分配,我无法完全复制这个问题。
查找Deadlinks的最佳方法是使用targetAbsNo和sourceAbsNo,并检查源/目标对象是否有传入/传出匹配的AbsNo和模块。如果您尝试将outlink目标设置为对象,DOORS将忽略此对象,它将找不到DeadLink I.E(Object targetobj = target(lnk))。
如果尚未清除对象,您仍然可以使用源对象上的链接分析wizzard删除死链接,使用deadlink创建指向该对象的新链接,然后删除此链接并保存更改。如果已经清除了带有死链接的对象,那么你运气不好,我还没有找到一种方法来删除与不存在的对象之间的这种类型的链接。此外,您还需要知道带有死链接的未删除对象,这样就不会软删除/清除,并且会产生与不存在的对象外链的问题。
我从头脑中做了这个代码,所以它没有经过测试,也不会起作用,但你应该知道如何寻找DeadLinks。对象()和源和目标模块命名不正确,我不记得用于打开目标模块的语法,我现在无法访问文档,我很抱歉。
将结果复制粘贴到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)
答案 1 :(得分: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)
}
答案 2 :(得分:0)
Edit > Purge all
将清除/删除所有已删除的对象,包括所有已删除的链接!
观察此操作后无法删除。