1

私は、デッド インリンクを一覧表示できる dxl スクリプト、つまり、削除されたオブジェクトにつながるリンクを一覧表示するのが好きです。

ドアにオプションがあるかどうか試しましたが、見つかりませんでした。

これを手伝ってくれませんか。

ありがとう

4

3 に答える 3

2

私はこの問題を長い間調査してきましたが、この問題の原因を特定できず、IBM も特定できませんでした。標準的な方法として、オブジェクトをソフト削除する前に常にアウトリンクを削除し、オブジェクトの変更またはリンクの変更が行われている間、ユーザーが共有編集でモジュールを開いてセクションをロックしている間は、管理者によるロック解除機能を使用しないようにする必要があります。そうすることで、この問題を解消することができますが、完全にではありません。

デッドリンクを見つける最善の方法は、targetAbsNo と sourceAbsNo を使用して、ソース/ターゲット オブジェクトを調べて、AbsNo とモジュールが一致する着信/発信を確認することです。outlink ターゲットをオブジェクトに設定しようとすると、DOORS はこのオブジェクトを無視し、DeadLink IE (Object targetobj = target(lnk)) を見つけられません。

オブジェクトがパージされていない場合でも、ソース オブジェクトでリンク分析ウィザードを使用してデッドリンクを削除し、デッドリンクを含むオブジェクトへの新しいリンクを作成してから、このリンクを削除して変更を保存できます。デッドリンクのあるオブジェクトが削除された場合、運が悪いのですが、存在しないオブジェクトとの間でこのタイプのリンクを削除する方法が見つかりませんでした。また、削除されていないオブジェクトとデッドリンクを把握して、これが softDeleted/purge されず、存在しないオブジェクトへのアウトリンクで問題が発生しないようにする必要があります。

このコードは頭の片隅で作ったので、まだテストされておらず、動作しませんが、DeadLinks を探す方法を理解する必要があります。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 に答える