Domino 9 und frühere Versionen > ND6: Entwicklung
1. Replizier-Speicherungskonflikt 2. Nicht alle Dokumente wurden repliziert
sja:
Hallo,
ob ich richtig verstehe, dass die Methode
removePermanently
löscht die Dokumente sofort aus der Datenbank.
Wenn in der Datenbank die Eigenschaft "Wiederherstellbare Löschungen zulassen" nicht aktiviert ist, werden die Dokumente aus der Datenbank mit der Methode
remove
auch sofort gelöscht, oder bleiben die noch eine Weile in der Datenbank, und wenn ja, dann wie lange?
Werden bei der Ausführung von compact alle soft deletion aus der Datenbank raus?
Vielen Dank schon mal im Voraus
Sofia
koehlerbv:
Sofia, es tut mir leid, das ich mich um Dein Problem nicht mehr kümmern konnte, aber momentan bi nich zeitlich extrem eingeschänkt. Und Dein Problem erfordert (und verdient) einigen Aufwand.
Du erwähnst jetzt SoftDeletions. Die können - gerade mit den von Dir beschriebenen Effekten - ein übles Problem hervorrufen.
Nochmals mit der Bitte um Entschuldigung für meine Nicht-Beteiligung an dieser so schwerwiegenden Fragestellung, aber an alle Mit-Macher: Richtet bitte mal das Augenmerk auf die Soft-Deletions. Ich habe da so eine Ahnung ... und leider nicht genug Zeit bis Sonntagabend für so ein ernsthaftes Problem.
Danke an alle Beteiligten,
Bernhard
sja:
Hallo
Bernhard, erst Mal vielen Dank für Deine Aufmerksamkeit.
Habe noch etwas in dem Ablauf diesen Funktionen in meinen Datenbanken entdeckt, was meiner Meinung nach, auf Soft-Deletions zeigen sollte.
Also, ich vorbereite eine abgespeckte Test-Version von meinen Datenbanken und dann melde mich.
Schöne Gruesse
Sofia
sja:
Hallo,
wie gesprochen sind hier die abgespeckte Test-Version von meinen Datenbanken:
1. "Proejekte“-> projekt.nsf (leer)
Die Felder
Feld = “AWNTitel“ in der Form = “projekt“
und
Feld = “projekt“ in der Form = “aufwand“ für
sind für die Identifizierung zwischen Projekt-Dokument und Aufwand-Dokumenten vorgesehen. D. h. es muss “AWNTitel“ = “projekt“ für das Projekt und dazu gehörige Aufwand-Dokumente
2. “Zeitaufwand“ -> aufwand.nsf (Agenten/Aktionen in der Db "Projekte“ sind für test\aufwand.nsf programmiert)
Form “aufwand“
enthält Beispiele Aufwand-Dokumente für drei Projekte mit Titel (Feld “projekt“):
Test1
Test2
Test3
Was sollte für Testen gemacht werden:
Wäre gut die Db “Zeitaufwand“ in dem Verzeichnis „test“ anlegen, sonst müssen die source für Agenten/Aktionen in der Db "Projekte“ korrigiert werden.
In der Db "Projekte“ (z.B. in der Ansicht “2.Projekte und Aufwand“) mit der Aktion "Projekt“ drei Projekte anlegen
In jedem Projekt in das Feld mit der Bezeichnung “Titel“ jeweils Test1, Test2, Test3 eintragen
In Db "Projekte“ sollte folgendes funktionieren
1.
Aktion “Agent starten“ in der Ansicht “2.Projekte und Aufwand“ (in der Produktions-Datenbank ist es periodischer Agent).
Der Agent lädt in der Db "Proejekte“ aus der Db “Zeitaufwand“ Aufwand-Dokumente
- alle, wenn das Projekt noch keine hat
- wenn das Projekt hat welche, dann werden alle Aufwand-Dokumente für das Projekt, die von aktuellem Datum 42 Tagen zurück liegen, gelöscht und aus der Db “Zeitaufwand“ alle Aufwand-Dokumente für letzten 42 Tagen in der Db "Projekte“ geladen werden
Dim s As NotesSession
'*************** Projekt ****************************************************
Dim db As NotesDatabase
Dim viewPYM As NotesView
Dim VEC As NotesViewEntryCollection
Dim ve As NotesViewEntry
Dim viewPymAWN As NotesView
Dim viewPymAWN6 As NotesView
Dim vecPymAWN As NotesViewEntryCollection
Dim vePymAWN As NotesViewEntry
Dim PymDoc As NotesDocument
Dim PymDocAWN As NotesDocument
Dim docTmp As NotesDocument
Dim tmpAWNTitel As String
Dim tmpAWNTitel_alt As String
Dim tmpIstWert As Single
Dim tmpSchaetzWert As Single
Dim tmpIstProzent As Single
Dim tmpIndikator As String
Dim dateTime As NotesDateTime
Dim searchFormulaPYM As String
Dim collection As NotesDocumentCollection
'*************** Zeitaufwand ************************************************
Dim dbAWN As NotesDatabase
Dim viewAWN As NotesView
Dim vecAWN As NotesViewEntryCollection
Dim veAWN As NotesViewEntry
Dim docAWN As NotesDocument
Dim tmpStunden As Single
Dim searchFormulaAWN As String
Dim collectionAWN As NotesDocumentCollection
Sub Initialize
Set s = New NotesSession
'*************** Projekte ****************************************************
Set db = s.CurrentDatabase
Set viewPYM =db.getview("tmpAWN_PYM")
Set viewPymAWN=db.getview("tmpAWN")
Set viewPymAWN6 =db.getview("tmpAWN6")
'*************** Aufwand ************************************************
Set dbAWN = s.GetDatabase( "", "test\aufwand.nsf" )
Set viewAWN =dbAWN.getview("awnPYM6")
'**************************************************************************
If Not(viewPYM.EntryCount = 0) Then
Set VEC = viewPYM.AllEntries
Set ve = VEC.GetFirstEntry()
Set PymDoc = ve.Document
While Not (ve Is Nothing)
Set PymDoc = ve.Document
'*****************Werte initialisieren ******************************************
'PymDoc.istProzent = tmpIstProzent
If Cstr(PymDoc.istProzent(0)) = "" Then
tmpIstProzent = 0
PymDoc.istProzent= 0
Else
tmpIstProzent = PymDoc.istProzent(0)
End If
If Cstr(PymDoc.Schaetzwert(0)) = "" Then
tmpSchaetzWert = 0
Else
tmpSchaetzWert = PymDoc.Schaetzwert(0)
End If
If Cstr(PymDoc.Istwert(0)) = "" Then
tmpIstWert = 0
Else
tmpIstWert = 8.5 * PymDoc.Istwert(0)
End If
'********************************************************************************
tmpAWNTitel = PymDoc.AWNTitel(0)
tmpAWNTitel_alt = PymDoc.AWNTitel_alt(0)
Messagebox tmpAWNTitel
If tmpAWNTitel_alt = "" Then
Call LoadAll(tmpAWNTitel)
Elseif tmpAWNTitel <> tmpAWNTitel_alt Then
Call RemoveAll(tmpAWNTitel_alt)
Call LoadAll(tmpAWNTitel)
Else
Call Remove6Wo(tmpAWNTitel)
Call Load6Wo(tmpAWNTitel)
End If
Call WerteBerechnung()
PymDoc.Istwert = tmpIstWert
PymDoc.istProzent = tmpIstProzent
PymDoc.Indikator = tmpIndikator
'PymDoc.AWNTitel_alt = tmpAWNTitel
Call PymDoc.Save( True, True )
Set ve = VEC.getNextEntry(ve)
Wend
End If
End Sub
Function LoadAll(AWNTitel As String)
'Kopieren alle Aufwand-Dokumente für das Projekt-Dokument aus der Db "Zeitaufwand" in die Db "Projekte"
searchFormula = |projekt = "| + AWNTitel +|"|
Set collectionAWN = dbAWN.Search(searchFormula, Nothing, 0)
Set docAWN = collectionAWN.GetFirstDocument
Messagebox "LoadAll " & collectionAWN.Count
If Not(collectionAWN.Count = 0) Then
tmpIstWert =0
While Not(docAWN Is Nothing)
'**********************************************************************************************
Set PymDocAWN = docAWN.CopyToDatabase( db )
'Call PymDocAWN.MakeResponse(PymDoc)
'Call PymDocAWN.ComputeWithForm(False, False)
Call PymDocAWN.Save(True, True)
'**********************************************************************************************
tmpStunden = docAWN.Stunden(0)
tmpIstWert = tmpIstWert +tmpStunden
'Messagebox Cstr(tmpIstWert)
Set docAWN = collectionAWN.GetNextDocument(docAWN)
Wend
PymDoc.AWNTitel_alt = tmpAWNTitel
PymDoc.awnFlag = "1"
Else
PymDoc.AWNTitel_alt = ""
End If
End Function
Function Load6Wo(AWNTitel As String)
'Kopieren Aufwand-Collection (letzten 6 Wochen) aus der Db "Zeitaufwand" in die Db "Projekte" für das Projekt-Dokument
Set vecAWN = viewAWN.GetAllEntriesByKey(AWNTitel, True)
Messagebox "Load6Wo " & vecAWN.Count
If Not(vecAWN.Count = 0) Then
Set veAWN = vecAWN.GetFirstEntry()
While Not(veAWN Is Nothing)
Set docAWN = veAWN.Document
'**********************************************************************************************
Set PymDocAWN = docAWN.CopyToDatabase( db )
'Call PymDocAWN.MakeResponse(PymDoc)
'Call PymDocAWN.ComputeWithForm(False, False)
Call PymDocAWN.Save(True, True)
'**********************************************************************************************
tmpStunden = docAWN.Stunden(0)
tmpIstWert = tmpIstWert +tmpStunden
Set veAWN = vecAWN.getNextEntry(veAWN)
Wend
PymDoc.AWNTitel_alt = tmpAWNTitel
End If
End Function
Function RemoveAll(AWNTitel As String)
'Löschen alle Aufwand-Dokumente für das Projekt-Dokument in der Db "Projekte"
tmpIstWert = 0
Set vecPymAWN = viewPymAWN.GetAllEntriesByKey(AWNTitel, True)
Messagebox "RemoveAll " & vecPymAWN.Count
If Not(vecPymAWN.Count = 0) Then
Set vePymAWN = vecPymAWN.GetFirstEntry()
While Not(vePymAWN Is Nothing)
Set PymDocAWN = vePymAWN.Document
Set docTmp = PymDocAWN
Set vePymAWN = vecPymAWN.getNextEntry(vePymAWN)
docTmp.Remove(True)
'docTmp.RemovePermanently(True)
Wend
PymDoc.awnFlag = ""
PymDoc.AWNTitel_alt = ""
End If
End Function
Function Remove6Wo(AWNTitel As String)
'Löschen Aufwand-Dokumente (letzten 6 Wochen) für das Projekt-Dokument in der Db "Projekte"
Set vecPymAWN = viewPymAWN6.GetAllEntriesByKey(AWNTitel, True)
Messagebox "Remove6Wo " & vecPymAWN.Count
If Not(vecPymAWN.Count = 0) Then
Set vePymAWN = vecPymAWN.GetFirstEntry()
While Not(vePymAWN Is Nothing)
Set PymDocAWN = vePymAWN.Document
tmpStunden = PymDocAWN.Stunden(0)
tmpIstWert = tmpIstWert - tmpStunden
Set docTmp = PymDocAWN
Set vePymAWN = vecPymAWN.getNextEntry(vePymAWN)
docTmp.Remove(True)
'docTmp.RemovePermanently(True)
Wend
End If
End Function
Function WerteBerechnung()
'Berechnung von Istwert und IstProzent in dem Projekt-Dokument
'@If(Schaetzwert = 0;@If(Istwert = 0; 0;100); (Istwert/ Schaetzwert *100))
'@If(istProzent > 100; "rot"; istProzent <= 75; "gruen"; "gelb")
tmpIstWert = tmpIstWert /8.5
If tmpSchaetzWert = 0 Then
If tmpIstWert = 0 Then
tmpIstProzent = 0
tmpIndikator = "gruen"
Else
tmpIstProzent = 100
tmpIndikator = "gelb"
End If
Else
tmpIstProzent = tmpIstWert *100/tmpSchaetzWert
If tmpIstProzent > 100 Then
tmpIndikator = "rot"
Elseif tmpIstProzent <= 75 Then
tmpIndikator = "gruen"
Else
tmpIndikator = "gelb"
End If
End If
End Function
2.
In dem Dokument “Projekt“
Button “Reset“
- löscht alle Aufwand-Dokumente für das Projekt
- aktualisiert die Aufwandschätzung für das Projekt
Button “Löschen und neu laden“
- löscht alle Aufwand-Dokumente für das Projekt
- lädt alle Aufwand-Dokumente für das Projekt aus der Db “Zeitaufwand“ neu
- aktualisiert die Aufwandschätzung für das Projekt
Problem-Beschreibung
TEST mit ComputeWithForm (bzw. auch wenn Aufwand-Dokumente als Response)
--- Zitat von: Semeaphoros am 22.06.05 - 18:02:56 ---Keine Probleme zu erwarten, habe keine Ahnung, wo Du das gelesen hast. Das Schlimmste, was passieren kann, ist, dass es keinen Nutzen hat.
--- Ende Zitat ---
Für alle gelöschte und neu geladenen Aufwand-Dokumenten entstehen bei der Replizierung Replizier- Speicherungskonflikte.
Wobei die Eigenschaft "Konfliktbehandl." in der Maske "aufwand" in der Db “Projekt“ ist auf "Konflikte nicht erstellen" gesetzt.
TEST ohne ComputeWithForm (Aufwand-Dokumente als Document)
Wenn Aufwand-Dokumente (z. B. mit dem Button “Reset“) aus der Replik, wo Agent laufen sollte, gelöscht werden und mit anderer Replik repliziert werden. Dann nach der Ausführung des Agnetes, die Aufwand-Dokumente werden zwar in der Replik geladen, aber replizieren sich nicht in der Replik, wo die schon ein Mal gelöscht waren.
Meiner Meinung nach, liegt es in Verbindung mit Soft Deletion.
Wobei die Eigenschaft "Wiederherstellbare Löschungen zulassen" nicht aktiviert ist.
Bei meinen Testen habe ich folgendes entdeckt:
Wie bekannt,
hat jedes Dokument in der Lotus Notes Datenbank eine eindeutige ID.
Wenn man repliziert ein Dokument, dann haben die Replik-Dokumente die gleiche ID und diese ID wird von Notes für die Replizierung benutzt.
Wenn man erstellt eine Kopie (z.B. per copy&paste) von einem Dokument, dann haben die Dokumente verschiedene ID und können nicht repliziert werden. Bei Testen habe ich fest gestellt, dass das gelöschte Dokument und per Script in Agent neu kopiertes Dokument haben absolut gleiche ID. ???
Meiner Meinung nach, genau da liegt das Problem. Ich stelle mir vor, dass Soft Deletion für diese ID in der Db noch vorhanden sind ???
Vielen Dank für jede Hilfe, Tip, Hinweis
Gruesse
Sofia
sja:
Hallo Zusammen,
werde sehr dankbar, wenn jemand sagt mir was dazu:
- ist das sehr komplizierte Fall und nur bezahlte Beratung helfen könnte
oder
- meine Fragen sind sehr dumm, um was dazu man sagen könnte
oder
- meine keine perfekte deutsche Sprache ist so schlecht, dass meine Fragen und Beschreibungen unverständlich und falsch sind. In diesem Fall versuche ich noch Mal formulieren:
Passiert das folgendes nur bei mir?
wenn man erstellt eine Kopie (z.B. per copy&paste) von einem Dokument, dann haben die Original und weitere Kopien verschiedene ID
aber
in einem Script mit CopyToDatabase() alle weitere Kopien haben die gleiche ID.
?
Oder es ist sonicht nur bei mir, sondern allgemein?
Wenn es ist so, dann ob ich richtig verstehe, dass es den Grund für folgendes ist:
- Replizier- Speicherungskonflikte in dem Fall mit ComputeWithForm
- Die Dokumente lassen sich nicht mehr replizieren, wenn die Löschungen schon ein Mal repliziert wurden.
Danke viel Mals schon im Voraus für jeden Antwort
Schöne Gruesse
Sofia
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln