Проблема с удалением ссылки в исходном модуле DOORS

У меня проблема с удалением ссылок в исходном модуле, где я нахожусь в эксклюзивном моде редактирования. Эта проблема возникает ТОЛЬКО, когда я удаляю исходящую ссылку из целевого объекта и сохраняю целевой модуль. Прежде чем удалить ссылку из исходного объекта в исходном модуле, я убедился, что текущий модуль является исходным модулем. после запуска кода функция удаляет ссылку в исходном модуле, которую я вижу на другом экране, и останавливается на функции (строке) flushdeleting и выводит сообщение об ошибке, как показано ниже:
-r-e-dxl: (строка 1930) нельзя удалить объект: модуль должен быть открыт для монопольного редактирования.

Очень странный! У меня есть доступ для редактирования....что здесь происходит!!!!

Вот функция обратного вызова для кнопки удаления ссылки.

//******************************************************************************************
//  Delete link from DAR to PII
//******************************************************************************************
void DeletelinksDARtoPII() {


string darID, piiID = null
Object TrgObj, SrcObj, PIIobj
int srcAbsNo, tagtAbsNo
int QRValNotEmptyCnt = 0
Link lnkTotargetMod
bool foundtheLink = false
bool foundLinktoPII = false
bool accessOkay = true
bool darobjdeleted = false

    darID = get(UpdatePIIDARIDTextBox)
    piiID = get(UpdatePIIObjID )    

    //print (current Module)."Description" "*********\n"

    if(null(darID) or null(piiID )){

        ack "Could not find a link for the pii Object\n"
        return
    }

    darMod   = edit(DARMpath,false) 
    if (!isEdit(darMod)) {
        ack "Could not open the DAR module in exclusive access.\n Please try again or contact Database Manager:\n"
        return  
        accessOkay = false                       
    }
    
    piiMod   = edit(PIIMpath,false)  
    if(!isEdit(piiMod)){
        ack "Could not open the PII module in exclusive access.\n Please try again or contact Database Manager:\n"
        return
        accessOkay = false
    }   

        //print "srcID=" srcID "\n"
        srcAbsNo = FindAbsNo(darID)
        //print "before ...........srcAbsNo=" srcAbsNo "\n"
        SrcObj = object(srcAbsNo, darMod)
        int PIIAbsNo = FindAbsNo(piiID)
        //print"SrcObj=" identifier(SrcObj) "\n"
        for lnkTotargetMod in SrcObj -> DartoPiiLinkMpath do{

                trgModRCA=read(fullName(target(lnkTotargetMod)), false)
                PIIobj = target(lnkTotargetMod)
                foundLinktoPII = true   
                
        }
        current = darMod
        //print (current Module)."Description" "\n"
        print "foundLinktoPII=" foundLinktoPII "\n"
        if(foundLinktoPII){
                srcAbsNo = FindAbsNo(darID)
                //print "srcAbsNo=" srcAbsNo "\n"
                SrcObj = object(srcAbsNo, darMod)               
                darMod  = current
                current = SrcObj
                darMod   = edit(DARMpath,false)
                    //print"daridentifier= " identifier(SrcObj) "\n"
                    print"****cannot delete the link************\n"
                    print (current Module)."Description" "^^^^^^^^^^^^^^^\n"
                    SrcObj."PII Selection Status" = "Not Selected"
                    string lnkstat = canDelete(lnkTotargetMod)  
                    print lnkstat "********\n"
                    if(canDelete(lnkTotargetMod)){
                    delete lnkTotargetMod
                    flushDeletions
                    }
                    else{
                        //print lnkstat "\n"
                        print"****cannot delete the link************\n"
                    }
                    save(darMod)
                    refresh(darMod)
                    downgrade darMod 
                    Refresh_DARM_ListView
                    darobjdeleted = true        
        }

спасибо, ФЗ [email protected]


person Tanvir Faisal Zahidi    schedule 08.05.2021    source источник


Ответы (1)


Я не проверял код и не нашел конкретной ошибки, но, прочитав его, я нашел три места, которые выглядят немного подозрительно.

Во-первых, обратите внимание, что если SrcObj имеет ссылки на более чем один объект, lnkTotargetMod всегда будет указывать на последнюю из этих ссылок из-за вашего цикла for.

Затем, после установки lnkTotargetMod, вы повторно открываете darMod, это может сделать ссылку недействительной.

Наконец, вам лучше удалить строку downgrade darMod, которая может вызвать проблемы при удалении второй ссылки.

Достаточно ли у вас прав доступа к ссылке, чтобы удалить ее?
Установка текущего модуля и текущего объекта не требуется.

person Mike    schedule 08.05.2021