我喜欢使用dxl脚本,它可以让我列出无效的inlink,即列出指向已删除对象的链接。
我试过了,如果在门上有任何选择,但没有找到。
你能帮个忙吗。
谢谢
发布于 2015-01-01 12:26:45
我已经调查这个问题很长一段时间了,我还不能确定这个问题的原因,IBM也不能。标准做法应该是始终删除softDeleting对象之前的外部链接,并确保在进行对象修改或链接修改时,当用户在共享编辑中打开一个模块并锁定某个部分时,不要使用管理性删除锁定功能。这样做将有助于消除这个问题,但不是完全,因为它发生分配和我不能完全复制这个问题。
找到Deadlink的最好方法是使用targetAbsNo和sourceAbsNo,并检查源/目标对象中的传入/传出匹配的AbsNo和模块。如果您尝试将outlink目标设置为一个对象,DOORS将忽略此对象,并且它将找不到目标,即( object targetobj = DeadLink (Lnk))。
如果对象尚未清除,您仍然可以通过对源对象使用链接分析向导,创建到具有死链接的对象的新链接,然后删除此链接并保存更改,从而删除死链接。如果有死链的对象已经被清除了,我还没有找到一种方法来删除与不存在的对象的这种类型的链接。此外,您还需要知道具有死链接的未删除对象,以便这不会被softDeleted/purged,并与指向不存在的对象的外链产生问题。
我是凭空写出这段代码的,所以它没有经过测试,也不会工作,但你应该知道如何查找DeadLinks。object()以及Source和Target Module命名不正确,我不记得用于打开Target Modules的确切语法,并且我目前无法访问文档,抱歉。
将结果复制粘贴到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)发布于 2014-10-02 17:12:59
我没有运行以下代码,这并不是最有效的,但它可以帮助您入门:
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)
}发布于 2015-05-06 20:24:03
Edit > Purge all将清除/移除所有已删除的对象,包括它们的所有死链接!
请注意,执行此操作后,不能取消删除。
https://stackoverflow.com/questions/25896493
复制相似问题