Avatar billede avest Nybegynder
06. februar 2003 - 13:59 Der er 7 kommentarer

Hindre sletning af parentdoc

Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Dim dc    As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim j        As Integer
    Set dc = Source.Documents
   
    For j = 1 To dc.Count
        Set doc = dc.GetNthDocument(j)
        If (doc.responses.count <> 0) Then
            Messagebox "HOV HOV"            Continue = False
        End If
    Next
End Sub

Ovenstående kode skulle gerne hindre at dokumenter med underdokumenter slettes. Det virker fint men hvis jeg så sletter det underliggende dokument. Melder den stadig at der er underliggende dokumenter.

Parent
  sub1  (slettes først)


Hvordan skal det ellers laves?
Avatar billede lars_resulture Nybegynder
06. februar 2003 - 14:08 #1
Jeg ville lave et view med alle db'ens docs, og hvor 1. kolonne indeholder @Text($Ref).
OK, så ville jeg i QueryDocumentDelete tage DocumentUniqueID fra doc'et, der er ved at blive slettet og så bruge det til at forsøge et opslag i det før omtalte view.
Ok, hvis det giver resultater, så findes der underdokumenter...
Hvis ikke, så ZAP !
Avatar billede cdelicht Nybegynder
06. februar 2003 - 14:47 #2
Hvis blot et dokument af de markerede ikke må slettes melder continue False. Prøv at slette et dokument nederst i hierakiet - så burde din kode da virke fint nok.
Alternativt, hvis du ønsker at alle af de markede dokument faktisk bliver slettet må du loop igennem din collection og fjerne markeingen fra alle dokumenter der har response, og når det er gjort så loope gennem de resterende og slette dem.
Avatar billede avest Nybegynder
06. februar 2003 - 16:12 #3
Min database indeholder 2 dokumenter

  Parent
    sub1

Jeg sletter nu sub1. Tilbage er

  Parent

Jeg forsøger nu at slette Parent, men den melder stadig at jeg er ved at slette et dokument med underdokumenter. Det er som om den ikke opdager at underdokumentet er væk.
Avatar billede jogii Nybegynder
06. februar 2003 - 23:41 #4
Hvad sker der når du går ud af databasen og ind igen og derefter prøver at slette?
Avatar billede avest Nybegynder
07. februar 2003 - 08:46 #5
Ingen ændring
Avatar billede jogii Nybegynder
07. februar 2003 - 09:59 #6
Det bedtyder med andre ord at Notes ikke vedligeholder en intern tabel over responses ved sletning. Eller kunne det være at der er andre response-dokumenter tilstede? Hvad sker der når du kører Responses igennem og udskriver værdier fra dokumenterne? For du så fejl?

En anden ting er at du bør undgå metoden .GetNthDocument. Lotus har indrømmet at metoden aldrig skulle være lavet. Hvis du har store dokumentsamlinger, så bliver den til sidst MEGET langsom. Brug hellere "Set doc = Coll.GetNextDocument( doc )" istedenfor.
Avatar billede cdelicht Nybegynder
07. februar 2003 - 10:18 #7
Det lyder underligt :-|
Lav en (tom) kopi af basen opret et par dokumenter, og kør processen igennem med debuggeren slået til.
Og jogii har ret....... "do as follows instead".... ;-)

Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
    Dim dc    As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim j        As Integer
   
    Set dc = Source.Documents
    Set doc = dc.GetFirstDocument
   
    While Not( doc Is Nothing )
        If (doc.responses.count = 0) Then
            Set doc = ddc.GetNextDocument (doc)
        Else
            Messagebox "HOV HOV"
            Continue = False
            Set doc = Nothing
        End If
    Wend
End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester