Das Notes Forum

Domino 9 und frühere Versionen => ND8: Administration & Userprobleme => Thema gestartet von: tron55 am 17.08.11 - 17:18:07

Titel: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 17.08.11 - 17:18:07
Hallo,

wir haben eine Zeiterfassungsdatenbank in der alle 100 Mitarbeiter ihre Zeiten buchen.
Am Ende des Monats werden die Stunden zusammengerechnet und mit den sollstunden verglichen / Vertriebler nach Stundensatz bezahlt.

Die Agenten in der Datenbank wurden leider von einem ausgeschiedenen Administrator mit seinem persönlichem User signiert.
Als der Admin ausschied, wurde irgendwann sein User aus  dem Dominoverzeichnis gelöscht.
Nachfolgend wurden dann alle Agenten mit einem echten Administratoraccount zu signiert.

Die Datenbank funktioniert auch weiterhin, nur leider prüft kein Agent mehr ob Zeiten doppelt erfasst werden.

Ich bin mir nun nicht ganz sicher ob das schon nicht mehr funktioniert hat, als der Admin aus dem dominoverzeichnis gelöscht wurde oder erst als die Agenten neu signiert wurden.


Ich hänge mal an was meiner Meinung nach verantwortlich ist für die Prüfung eines Eintrages in der Zeiterfassung auf doppelposts.


Es gibt zeinen Agenten der heisst "Check"
der hat im hauptfenster diesen Code

Zitat
Option Public
Sub Initialize
   On Error Goto catch
   
   Dim s As New NotesSession
   Dim doc As NotesDocument
   Dim al As NotesLog
   Set al = New NotesLog("NotesLog")
   Call al.openAgentLog()
   
   
   Set doc = s.DocumentContext
   
   'is the timerecord valid?
   Call doc.removeItem("SaveOptions")
   Call doc.save( True, True)
   Print "["+doc.Database(0)+"/TimeChecksByUser/" + doc.UniversalID+"?OpenDocument]"
   
finally:
   Exit Sub
   
catch:
   Call al.logAction( "Error in SaveTimeCheck: " + Error$)
   Resume finally
End Sub

und im initialize

Zitat
Sub Initialize
   On Error Goto catch
   
   Dim s As New NotesSession
   Dim doc As NotesDocument
   Dim al As NotesLog
   Set al = New NotesLog("NotesLog")
   Call al.openAgentLog()
   
   
   Set doc = s.DocumentContext
   
   'is the timerecord valid?
   Call doc.removeItem("SaveOptions")
   Call doc.save( True, True)
   Print "["+doc.Database(0)+"/TimeChecksByUser/" + doc.UniversalID+"?OpenDocument]"
   
finally:
   Exit Sub
   
catch:
   Call al.logAction( "Error in SaveTimeCheck: " + Error$)
   Resume finally
End Sub

Da kann man ja jetzt eigentlich nicht so viel falsch machen.

Da der Code nicht angefasst wurde scheint es mir irgendwie logischer zu sein das dass ein administratives Problem ist,aber ich hab keinen Plan wo ich nach dem Fehler suchen soll.

Vorschläge?
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 17.08.11 - 17:34:54
Mike, der von Dir gepostete Code macht absolut nichts, was auf Doppelbuchungsprüfungen auch nur ansatzweise hindeutet.
Du müsstest also erstmal die wirkliche Stelle finden. Passiert das eigentlich ad hoc (meine Zeiterfassung überprüft bereits beim Abspeichern, ob es Überschneidungen gibt) oder periodisch mit Protokoll?
Passiert das bei allen Usern? Nur um abzusichern, dass hier nicht die ECL reinfunkt, was aber eher unwahrscheinlich wäre, insofern Ihr diese nicht permanent per Policy or whatever neu schreibt.

Für uns ist das also erstmal nur "Skispringen im Nebel" - sorry.

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 17.08.11 - 17:41:26
Hi Bernhard,

ok dann hab ich mich von der Kommentarzeile täuschen lassen.
Die Prüfung passiert normalerweise ad hoc.
Es passiert bei allen Usern.

Ja kein Problem, ich bin für jede Idee dankbar, weil ich hab aktuell keinen Schimmer warums nicht mehr geht   :'(

Ich such mal weiter.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Driri am 18.08.11 - 09:03:44
Zitat
Die Prüfung passiert normalerweise ad hoc.

Was heißt das ? Beim Speichern des Dokumentes ?

Das würde darauf hindeuten, daß der Code eher in einem Event der Maske hinterlegt ist. Zumindest würde ich dort mal nachschauen, wenn das nichts zeitgesteuertes ist.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 18.08.11 - 09:34:41
Zitat
Die Prüfung passiert normalerweise ad hoc.

Was heißt das ? Beim Speichern des Dokumentes ?

Das würde darauf hindeuten, daß der Code eher in einem Event der Maske hinterlegt ist. Zumindest würde ich dort mal nachschauen, wenn das nichts zeitgesteuertes ist.

Genau das heisst es.
Guter Tipp da werde ich gleich mal suchen.

Trotzdem ist mir unverständlich warum das auf einmal nicht mehr funktionieren kann wenn sich doch am Code selbst nichts geändetr hat.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 26.08.11 - 11:41:40
Hi,

ok ich habe gesucht und gesucht aber ich finde kein einzige Event in der Maske , dass hier weiterhelfen könnte
Gibt es noch eine wahrscheinliche Möglichkeit?

Wie gesagt, es ist ja irgendwie seltsam das es nicht mehr geht, weil sich am Code selbst nichts geändert haben kann.

Kann ich irgendetwas tun damit wir den Fehler besser eingrenzen können?

PS: sorry ich weiß das ist etwas Blindflug...
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 26.08.11 - 12:06:47
In Frage kommen
- QuerySave (meist verwendet)
- PostRecalc (dessen wahren Stärken oft verkannt werden)
- QueryClose (selten, weil entweder ein sehr schräger Ort oder weil andere Umstände das Erzwingen).

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: WernerMo am 26.08.11 - 13:19:23
Hallo,

den Grund:
Trotzdem ist mir unverständlich warum das auf einmal nicht mehr funktionieren kann wenn sich doch am Code selbst nichts geändetr hat.

Wirst Du vermutlich finden, wenn Du den Code gefunden hast, evtl. geht der Code auf eine Ansicht (view) die aus irgend einem Grund nicht aktuell/schnell genug ist.

Gruß Werner
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 26.08.11 - 13:25:08
In Frage kommen
- QuerySave (meist verwendet)
- PostRecalc (dessen wahren Stärken oft verkannt werden)
- QueryClose (selten, weil entweder ein sehr schräger Ort oder weil andere Umstände das Erzwingen).

Bernhard

Treffer bei QuerySave. Danke !
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 26.08.11 - 13:27:23
Ok beim Debuggen fällt sofort auf das er die Eingabe so abprüft:


-> Check ob an dem X Tag etwas gebucht ist
-> check wann es gebucht wurde und ob es sich überschneidet mit $libraryeinträge für Tag X


Vorher konvertiert er allerdings den Datumsstring zu dd/mm/yy.
Suchen tut er aber nach einem dd.mm.yy

Natürlich findet er dann nichts .
Das ist ja komisch, aktiv umgestellt hat da nämlich keiner was.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 13:07:08
Ok, ich dachte ja ich hab das Problem gefixed, leider war dem nicht so.

Querysave lässt immernoch Doppeleinträge zu.
Am Code selbst wurde nichts geändert, deswegen kapiere ich es nicht.

Ich hatte ja mal gesagt das er den Datumstring falsch konvertiert, aber das kann ich irgendwie nicht mehr so wirklich nachstellen.

In der Maske gibt es wie schon mal festgellt , diesen code unter querysave

Zitat
Sub Querysave(Source As Notesuidocument, Continue As Variant)
     'Validation
   Const Button = 16
   Const Title = "Error!"
   Dim session As New NotesSession
   Dim doc As NotesDocument   
   Set doc = source.Document
   Dim dtuntil As NotesDateTime
   Dim dtday As NotesDateTime
   Dim itm As NotesItem
   
   Dim Fields(2) As String
   Dim msg(2) As String
   Dim ErrorField As String
   
   
     'Fields and errormessages for validation
   fields(0) = "ProjectSelection"
   msg(0) = "Please select a project!"
   fields(1) = "TimeReportDate"
   msg(1) = "Please enter a date!"
   fields(2) = "Criterion"
   msg(2) = "Please select a criterion!"
   
   For i=0 To Ubound(fields)
      If doc.GetItemValue(fields(i))(0) = "" Then
         Msgbox msg(i), button, title
         If ErrorField = "" Then ErrorField = fields(i)   'remember the first field, where an error occurred
         continue = False
      End If
   Next
   
   If ErrorField <> "" Then
      Call Source.GoToField(ErrorField)  'in case of an error goto Errorfield
      Continue = False
      Exit Sub
   End If
   
'set environment variables used when opening the form as default values   
   
   
   Set itm = doc.getFirstItem( "TimeReportHourEnd" )
   Set dtuntil = itm.DateTimeValue
   Set itm = doc.getFirstItem( "TimeReportDate")
   Set dtday = itm.DateTimeValue
   
   Call session.setEnvironmentVar( "TimeSheet_ProjectSelection", doc.ProjectSelection(0))   
   Call session.setEnvironmentVar( "TimeSheet_TimeReportDate", dtDay.DateOnly)
   Call session.setEnvironmentVar( "TimeSheet_TimeReportHourStart", doc.TimeReportHourStart(0))   
   Call session.setEnvironmentVar( "TimeSheet_TimeReportHourEnd", doc.TimeReportHourEnd(0))   
   Call session.setEnvironmentVar( "TimeSheet_Criterion", doc.Criterion(0))   
   
'is the timerecord valid?   
   If( isValidTimeRecord( doc ) = 1 ) Then
      continue = True
      Call doc.removeItem("SaveOptions")
   Else
      continue = False
   End If
   
   
End Sub


es gibt aber außerdem noch Webquerysave mit diesem Code
Zitat
@Command([ToolsRunMacro]; "(WebQuerySave)")

und in WebQuerySave steht dann

Zitat
Option Public
Use "TimeReport"
Sub Initialize
%REM
This agent is called before a time sheet document is saved
Checks if Time Report is correct and valid
Sets project role access if available
%END REM
   
   
   On Error Goto catch
   Dim s As New NotesSession
   Dim doc As NotesDocument
   Dim roleDoc As NotesDocument
   Dim check As Integer
   Dim al As NotesLog
   Set al = New NotesLog("NotesLog")
   Call al.openAgentLog()
   Set db = s.currentDatabase
   Set roleView = db.getView("(ProjectRoles)")
   
   Set doc = s.DocumentContext
   
   'is the timerecord valid?
   check =  isValidTimeRecord( doc )
   If( check = 1 ) Then
      Call doc.removeItem("SaveOptions")
      Set roleDoc = roleView.getDocumentByKey( doc.ProjectName(0), True)
      If( Not roleDoc Is Nothing) Then
         Set roleReaderItem = roleDoc.getFirstItem( "ReaderRoles")
         Set roleAuthorItem = roleDoc.getFirstItem( "AuthorRoles")
         
         Call doc.removeItem("ProjectReaders")
         Call roleReaderItem.copyItemToDocument( doc, "ProjectReaders")
         
         Call doc.removeItem("ProjectAuthors")
         Call roleAuthorItem.copyItemToDocument( doc, "ProjectAuthors")
         
      End If
      
      Call doc.save( True, True)
      Call al.logAction( "WebQuerySave:SaveAndCreateNew Valus is:" + doc.SaveAndCreateNew(0))
      
      If( doc.SaveAndCreateNew(0) = "1") Then
         Print "["+doc.Database(0)+"/TimeReport?OpenForm]"
      Else
         Print "["+doc.Database(0)+"/TimeReportsByDay/" + doc.UniversalID+"?OpenDocument]"
      End If
      Exit Sub
   Elseif( check = -1) Then
      'Time Report could not be saved. There is a time conflict with an existing time report.
      Print "["+doc.Database(0)+"/dlgErrorTimeConflict?OpenForm]"
   Elseif ( check = - 2) Then
      Print "["+doc.Database(0)+"/dlgErrorFrozen?OpenForm]"
   Elseif ( check = - 3) Then
      Print "["+doc.Database(0)+"/dlgError?OpenForm]"
   End If
   
finally:
   Exit Sub
   
catch:
   Call al.logAction( "Error in WebQuerySave: " + Error$)
   Resume finally
End Sub



Er tut weder das eine noch das andere. Was übersehe ich hier?

Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: ata am 19.09.11 - 13:12:54
... ich hab's nicht ganz verstanden, was du unter Doppeleinträgen verstehst. Deine Aussage "... weder das eine tut - noch das andere" hilft auch nicht weiter. Was genau passiert denn? Beim Web-Agent mal Print-Statements einbauen, damit man sieht wie der Code die Verzweigungen verarbeitet - das sollte ein erster Ansatz zum Debuggen sein...

Toni  ;)
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 13:29:52
Ok sorry.

Doppeleinträge sind einfach zweimal gebuchte zeiten, also zb 19.09 09:00 - 18:00 Uhr und 19.09 10:00 - 13:00 Uhr
Normalerweise sollte er dann sagen "ne ist nicht, die Zeit wurde schon erfasst"

Das hat auch immer funktioniert und nun aus heiterem Himmel nicht mehr.

Das mit dem Debuggen ist furchtbar mühsam weil ich das lange nicht mehr gemacht habe ;(
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: ata am 19.09.11 - 13:45:44
... bei Server-basierenden Agenten bleibt dir das aber nicht erspart - leider. Die Print- oder MsgBox-Statements findest du dann in der Log.nsf - oder du loggst über eine Notes-Log-DB dann hast du es komfortabler...

Plötzlich gibt es eigentlich nicht. Irgendetwas scheint geändert worden zu sein. Läuft die DB auf einem anderen Server? Ist ein Server als ausführend eingetragen? Wurde der Server umbenannt? Was sagt das Agent-Log - wann lief der Agent zum letzten Mal?...

Das wäre mal ein erster Ansatz - ansonsten debuggen...

Toni
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 14:01:45
Das einzige was ich anfangs vermutet hatte...

Ein ehemaliger Entwickler hatte ne Menge Agenten und Masken mit seinem User signiert und wurde vor einiger Zeit aus dem Domino Directory gelöscht.
Der Agent "Webquerysave" wird aber nun von der Gruppe Company Administrator ausgeführt (dort ist der Notes Admin drin) kann also eigentlich kein problem sein


@ Rest
Dann werde ich mal probieren ob ich das noch hinbekomme
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Driri am 19.09.11 - 15:37:26
Du solltest Dir mal in der Scriptbibliothek "TimeReport" die Funktion "isValidTimeRecord" anschauen. Dort wird vermutlich die Validierung bzw. die Suche nach Doppeleinträgen stattfinden.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 15:53:45
Zitat
Option Public
Option Declare


Function isValidTimeRecord( doc As NotesDocument ) As Integer
   On Error Goto catch
   
   Const Button = 16
   Const Title = "Error!"
   isValidTimeRecord = 1
   
   Dim tr As NotesDocument
   Dim startItem As NotesItem,  endeItem As NotesItem, dateItem As NotesItem
   Dim start As NotesDateTime, ende As NotesDateTime, reportDate As NotesDateTime
   Dim keys(1) As String   
   
   
   Set startItem = doc.getFirstItem("TimeReportHourStart")
   Set endeItem = doc.getFirstItem("TimeReportHourEnd")
   Set dateItem = doc.getFirstItem("TimeReportDate")
   
   Set start = startItem.DateTimeValue
   Set ende = endeItem.DateTimeValue
   Set reportDate = dateItem.DateTimeValue
   
   Dim coll As NotesDocumentCollection
   Dim userTimeReportsView As NotesView
   Dim db As NotesDatabase
   Dim key As String
   Set db = doc.ParentDatabase
   Set userTimeReportsView = db.getView("(UserTimeReports)")
   
   keys(0) = doc.TimeReportUser(0)
   keys(1) = reportDate.dateonly
   If( Instr(1, keys(1), ".") > 0 ) Then
      ' we need to convert into the format mm/dd/yyyy because it is used in the view
      keys(1) = Mid$( reportDate.DateOnly, 4, 2) + "/" + Mid$(reportDate.DateOnly, 1,2) + "/"  + Mid$(reportDate.DateOnly, 7,4)
   End If
   
'   Call logMsg( "1", "Inside isValidTimeRecord for " + keys(0) + " " + keys(1))
   Set coll = userTimeReportsView.getAllDocumentsByKey( keys, True )
   
   Dim timeFrom As NotesDateTime, timeUntil As NotesDateTime
   Dim chstartItem As NotesItem,  chendeItem As NotesItem
   Dim chstart As NotesDateTime, chende As NotesDateTime
   
   Set tr = coll.getFirstDocument()
   While ( Not tr Is Nothing And isValidTimeRecord)
      Set chstartItem = tr.getFirstItem("TimeReportHourStart")
      Set chendeItem = tr.getFirstItem("TimeReportHourEnd")
      
      Set chstart = chstartItem.DateTimeValue
      Set chende = chendeItem.DateTimeValue
      
      If( chStart.TimeDifference( ende ) >= 0  Or start.TimeDifference( chEnde) >= 0) Then
         'Everything is ok
         'if the work is overlapping at midnight, then it is necessary to stop at 00:00 and start a new entry at the next day
      Else
         If( tr.UniversalID <> doc.UniversalID) Then
            Msgbox "There is a time conflict with the activity "+tr.Subject(0) + " in project " + tr.ProjectName(0), button, title      
            isValidTimeRecord = -1
         End If
      End If
      
      Set tr = coll.getNextDocument(tr)
      
   Wend
   
'   Call logMsg( "1", "isValidTimeRecord has the value " + Cstr(isValidTimeRecord))
   
   If( isValidTimeRecord = 1 ) Then   
      Dim frozenView As NotesView
      Dim frozenDocs As NotesDocumentCollection
      Dim frozenDoc As NotesDocument
      Dim dtFreeze As NotesDateTime
      Dim dtTimeReport As NotesDateTime
      
      Set frozenView = db.GetView("(ActiveFrozenPeriods)")
      Set frozenDocs = frozenView.GetAllDocumentsByKey(doc.ProjectName(0), True)
      Set frozenDoc = frozenDocs.getFirstDocument()
      
      Stop
      
      While( Not frozenDoc Is  Nothing)
         If( frozenDoc.SubProjectSelection(0) <> "" ) Then
            If( doc.ProjectPartName(0) <> frozenDoc.SubProjectSelection(0)) Then Goto nextFrozen            
         End If
         
         If( frozenDoc.UserSelection(0) <> "" ) Then
            If( doc.TimeReportUser(0) <> frozenDoc.UserSelection(0)) Then Goto nextFrozen            
         End If
         
         Set dtFreeze = frozenDoc.GetFirstItem("FreezeDate").DateTimeValue
         Set dtTimeReport = doc.GetFirstItem("TimeReportDate").DateTimeValue
         
         If(  dtTimeReport.TimeDifference( dtFreeze)  <= 0  ) Then
            isValidTimeRecord = -2
            Msgbox "Time Record could not be saved. Period for this combination is already closed.", button, title      
         End If
         
nextFrozen:         
         Set frozenDoc = frozenDocs.GetNextDocument(frozenDoc)
      Wend
   End If
   
finally:
   Exit Function
   
catch:
   Msgbox Error$
   isValidTimeRecord = -3
   Resume finally
End Function


Function logMsg( nr As Integer, msg As String)
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   
   Set db = s.CurrentDatabase
   
   Set doc = New NotesDocument( db )
   doc.form = "GeneralLog"
   doc.msg = msg
   doc.nr = nr
   Call doc.save(True, True)
   
End Function

In meinem jugendlichen leichtsinn behaupte ich nun einfach mal :
Sieht doch eigentlich ok aus  :-:
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 16:47:04
1)Läuft die DB auf einem anderen Server?
2)Ist ein Server als ausführend eingetragen?
3)Wurde der Server umbenannt?
4)Was sagt das Agent-Log - wann lief der Agent zum letzten Mal?...

1)nein
2) nein vorher war niemand ausführend eingetragen nun ist Administrators dort eingetragen.
3)nein
4) angeblich lief webquerysave noch nie  ???
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Peter Klett am 19.09.11 - 16:47:41
Schau Dir mal die versteckte Ansicht an (STRG+SHIFT festhalten, mit der Maus Ansicht - Gehe zu... und dann die Ansicht "(UserTimeReports)" auswählen).

In welchem Format stehen die Datumsangaben? Vergleiche das mit dem Datumsformat, mit dem gesucht wird. Entgegen einem früheren Post von Dir sucht er nach dd/mm/yyyy und nicht nach dd/mm/yy. Da musst Du ganz genau sein. Zusätzlich solltest über Prints oder Msgbox ausgeben lassen, welchen Suchschlüssel er verwendet. Die Datumsformatierung ist "handgemacht" und muss nicht zwingend passen. Wenn das Datum zum Beispiel mit 19.9.2011 ausgegeben wird, reicht es nicht aus mit Mid zu arbeiten, wenn der Entwickler 19.09.2011 erwartet hat. Ich kann da nur den Befehl "Format" empfehlen, um Datum sauber in einen formatierten String umzuwandeln.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 17:01:07
Du hast "leider" vollkommen Recht, da ist es wieder.
Früher war das Format völlig ok, deswegen hat das auch geklappt.
Irgendwann macht er dann auf einmal wilde Punkte... wtf...

Wie kommt denn sowas und vor allen Dingen , wie stelle ich das am umkompliziertesten wieder um?
(das kann ja irgendwie nur ein Setting sein und kein Code)
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 19.09.11 - 17:19:50
So, wie das in der Ansicht steht, kannst Du nahezu einen darauf lassen, dass die Werte so wie in der Spalte auch im Dokument selbst drin stehen, Mike.

Du musst also alle Stellen suchen, in denen bei den Zeiteinträgen das Datum gespeichert werden könnte. Dabei wirst Du auch entdecken, ob da in Bezug auf das Format irgend ein Settings-Dokument herangezogen wird.

Aber egal wie: Die ganze Anwendung scheint doch ein wilder Verhau zu sein und als Nicht-Profi stehst Du auf eigentlich völlig verlorenen Posten.
Diese Stelle ist schon schräg: Die View verwendet ein Format (siehe Dein Codeauszug)
Zitat
we need to convert into the format mm/dd/yyyy because it is used in the view
Ins Dokument kann aber offensichtlich auch etwas anderes geschrieben werden.
Da scheint also nicht mal durchgängig der Datentyp Date/Time verwendet zu werden.

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 17:46:17
Oh mann da bekommt man ja Pickel.


Aber aufgeben ist keine Option ...  :P


Sieht auch ok aus, ich kapier es nicht.

TimeReportDate
Vorgabewert
Zitat
@If( TimeReportDateDefault =""; @Today; TimeReportDateDefault)

Und der zweite Screenshot zeigt die Infoboxsettings
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 19.09.11 - 18:01:41
Aber was ist im Dokument gespeichert (nicht aus geöffnetem Dokument abfragen! Und wie ist die Ansichtsspalte definiert?
Wozu dient das Item TimeReportDateDefault und wie ist das definiert?

Wenn im Dokument immer Date/Time steht, in der Ansicht aber was alternierendes im Format, dann besteht da eine offensichtliche programmatische Diskrepanz.

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 18:43:26
-In den verschidenen Sichten wird das Datum immernoch als tt.mm.yyyy dargestellt.

-Das ist davon abhängig welche Ansicht ich frage -das ist leider nicht konsequent übernommen in jeder Ansicht.
Ich liste mal ein paar auf:

1) Standardansicht # Time Reports \ day # Programmiername: TimeReportDate #Stil: Allgemein # Beispiel: ---
(klingt schon mal nicht verkehrt...)

2) Ansicht UserTimeReports # Programmiername : $19 # Stil:  Datum/Zeit Beispiel: 09/19/2011 18:39:45

3)[Time Reports \ month # Programmiername: TimeReportDate #Stil: Allgemein#Beispiel: ---

usw...

Auf welche Sicht der sich vor dem formatieren konkret bezieht konnte ich halt noch nirgends rauslesen.

- TimeReportDateDefault ist ein Feld in der Maske das scheinbar das Defaulformat dort festlegt (screenshot)
Normalerweise würde ich vermuten dass das Ding nix mit dem problem zu tun hat weil es webclients bedienen will, auf der anderen  Seite hab ich den
Eindruck das "webquerysave" eh alles erledigt.

Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 19.09.11 - 18:54:20
Mike, Du hast keine meiner (wirklich) Fragen beantwortet ...

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 19:22:44
Ich probiers nochmal, aber die Formulierungen sind etwas weit gefasst.

Aber was ist im Dokument gespeichert

Im Dokument wird das  Datum in der Form mm/tt/yyyy gespeichert.
In der StandardAnsicht hingegen ist es dd.mm.yyyy.
Hoffe das hast du gemeint.


Und wie ist die Ansichtsspalte definiert?

Verstehe nicht so genau was du hier wissen willst, wenn nicht das Zeitformat und das ist wie schon beschrieben auf STIL:Allgemein eingestellt und
hat damit kein Anzeigeformat im Datumformat.

Wozu dient das Item TimeReportDateDefault und wie ist das definiert?

Kann ich nicht genau sagen, aber es taucht in der Formel auf die hinter dem Feld TimeReportDate liegt und zwar in dieser Form.

Zitat
@If( TimeReportDateDefault =""; @Today; TimeReportDateDefault)

und schlussendlich stellt man über TimeRepotDate ja das Datum ein.

Wenn wir uns wieder nicht verstanden haben  sach ich schonmal "sorry ich habs probiert"!  :-[




Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 19.09.11 - 19:28:14
Was steht in den Dokumenteigenschaften bei Datentyp? Nochmal: Öffne das Dokument nicht - schau Dir das aus der Ansicht heraus an.

Weiters: Wie ist die Datumsspalte formelmässig festgelegt? Da muss ja was stehen  ;)

Nochmals: Du kannst in der Ansicht durch Einstellungen des OS oder vom Domino was verbiegen, aber niemals so, dass da mal mm/dd/yyyy steht und mal dd.mm.yyyy. Zumindest nicht, wenn mit purem Notes Dates/Time gehandelt wird. Entweder oder ... Es muss an den Dokumenten selbst liegen.

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 22:37:45
Was steht in den Dokumenteigenschaften bei Datentyp? Nochmal: Öffne das Dokument nicht - schau Dir das aus der Ansicht heraus an.


ok nun hab ich's verstanden.

Ich hab mir einfach ein Dokument in der Standardansicht genommen, "rechtklick" + "Dokumenteneigenschaften" und heraus kam das was in screenshot 1+2+3 zu sehen ist .

Die Maske ist ok.
Der Datentyp TimeReportDate liefert ein "falsches" Datum , nämlich in dem Format das wohl für den Fehler verantwortlich ist. (dd.mm.yyyy)


Weiters: Wie ist die Datumsspalte formelmässig festgelegt? Da muss ja was stehen  ;)



Die Datumsspalte kann ich mir ja im Client nicht anschauen, sondern dazu gehe ich in den Designer, wieder in die Standardansicht "Time Reports \ day"
(mir ist noch unklar ob es egal ist welche Ansicht ich nehme oder ob das eine bestimmte sein muss)
Wenn ich dort in der entsprechenden Ansicht die Spalte "Date" anwähle. kann ich mir den Programmiernamen im letzten Reiter rauslesen: "TimeReportDate"

Den Kollegen kennen wir ja mittlerweile, also suche ich ihn in der Maske "TimeReport"

Das Ergebnis kannst du in Screenshot 4+5 sehen.

Gruß
Mike

Beim aufschreiben kam mir ein Gedanke..
Steht in dem Skript nicht sinngemäß " ich wandle dd.mm.yyyy zu mm/dd/yyyy um"
Wenn ich mir den Screenshot anschaue ist die Spalte aber schon mit mm/dd/yyyy definiert.
Wird deshalb vielleicht die Funktion die prüft erst gar nicht ausgeführt?
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 19.09.11 - 22:40:13
Screenshot 4+5
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: koehlerbv am 19.09.11 - 23:06:21
ok nun hab ich's verstanden.
Nö.

Ich hab mir einfach ein Dokument in der Standardansicht genommen, "rechtklick" + "Dokumenteneigenschaften" und heraus kam das was in screenshot 1+2+3 zu sehen ist .

Die Maske ist ok.
Der Datentyp TimeReportDate liefert ein "falsches" Datum , nämlich in dem Format das wohl für den Fehler verantwortlich ist. (dd.mm.yyyy)
Gewählte Ansicht ist okay, da die Maske (Form = ...) passt. Und Dein nächster Schluss ist falsch - TimeReportDate ist sauber als NotesDate/Time abgelegt! (Daraus kann man sich für Laufzeit und Ansicht was anderes basteln, aber es anders zu speichern, ist tödlich!)

Die Datumsspalte kann ich mir ja im Client nicht anschauen, sondern dazu gehe ich in den Designer, wieder in die Standardansicht "Time Reports \ day"
Falsch. Du hättest die Suchansicht des Agents nehmen sollen und dort zwei Dokumente anschauen, die eben unterschiedliche Datumsformate anzeigen. Sind die Dokumente dann im betreffenden Item wieder mit NotesDate/Time gefüllt? Und was steht in der Suchansicht in der betreffenden Spalte als Formel?

Beim aufschreiben kam mir ein Gedanke..
Steht in dem Skript nicht sinngemäß " ich wandle dd.mm.yyyy zu mm/dd/yyyy um"
Wenn ich mir den Screenshot anschaue ist die Spalte aber schon mit mm/dd/yyyy definiert.
Wird deshalb vielleicht die Funktion die prüft erst gar nicht ausgeführt?
Das ist komplett verkehrt und hat mit der Programmierung nichts zu tun.
Glaubst Du nicht, Du lehnst Dich mit dem Versuch, das ganze zu verstehen und im Produktivbetrieb eine Änderung herbeizuführen, ziemlich weit aus dem Fenster? Ich achte Dein Engagement wirklich, aber Du kannst mit Deinem derzeitigen Wissensstand m.E. eher etwas kaputt machen als nachhaltig (!) reparieren.

Bernhard
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 20.09.11 - 09:01:28
Achso falsch verstanden.
Dummerweise ist die Formel leer bzw ein "/" steht als Suchbegriff dort wenn ich den Agent in die Suche lade.

In der Ansicht UserTimeReports wird Dokument a dann dd.mm.yyyy dargestellt und dokument b mm/dd/yyyy
In beiden Items steht aber die NotesDate/Time im Item also mm/dd/yyyy.

@Rest
Das kann alles nicht so wild sein, weil dort niemand was mit Absicht geändert haben kann.
Wir sehen es halt einfach nur nicht momentan und sowas macht mich noch viel fuchsiger  ;D
Außerdem habe ich natürlich Backups.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Tode am 20.09.11 - 19:15:44
Sorry, ich lese hier schon ne Weile mit, und Bernhard hat wirklich ne ENGELSGEDULD... Ich wäre schon lange oben raus gegangen...

Könntest Du wenigstens mal VERSUCHEN, das zu machen, was er Dir sagt? Du vermutest und dokterst und versuchst die (vermeintlichen) Auswirkungen zu beheben, ohne die Ursache zu verstehen.

Ich fasse mal zusammen:

1. Die Ansicht, die der Agent verwendet ist scheinbar vollkommen OK, es sind die Daten, die Mist sind...
2. Scheinbar wurden früher Dokumente korrekt erstellt (Dein Screenshot: Das Feld ist DateTime, das passt so), aber nun werden -und da bin ich ziemlich sicher- Dokumente von irgend einem Client oder einer Funktion falsch erstellt. In den Eigenschaften dieser Dokumente wirst Du mit grosser Wahrscheinlichkeit sehen, dass da in den Feldeigenschaften als Datentyp "Text" steht...

Jetzt kannst Du versuchen, die Auswirkungen mit Hilfe einer Formel in der Ansicht zu korrigieren, ich sage "versuchen", weil Du da sicherlich nicht alle möglichen Auswirkungen berücksichtigt bekommst, und vermutlich nur 95% der Dokumente (oder weniger) erfasst (auch wenn es bei Deiner aktuellen Datenlage OK aussieht).

Oder Du behebst die Ursache... Und dazu brauchst Du
a) Die Möglichkeit analytisch an ein Problem ranzugehen
b) Die Fähigkeit, Anleitungen zu VERSTEHEN und vor allem zu BEFOLGEN
c) Verständnis des Codes, der das ganze produziert...

Ich erlaube mir jetzt kein Urteil, ob Du a, b, oder c besitzt, das musst Du selbst einschätzen....
Ich jedenfalls würde Dir empfehlen, jemanden zu Hilfe zu rufen...
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Peter Klett am 20.09.11 - 19:45:03
Hallo Tode,

Du irrst mit Deiner Annahme, dass die neuen (oder die alten) Dokumente falsch sind. Ich hätte auch darauf gewettet.

tron55 hat tatsächlich Deinen letzten Rat befolgt und jemanden um Hilfe gebeten. Ich habe mir also eine Kopie der Datenbank mit zwei Testdokumenten angesehen. Normalerweise würde ich nicht darüber schreiben, aber ich war auch recht verblüfft über das Ergebnis, so dass ich denke, dass ich mit meinen paar Zeilen keinen groben Fehler begehe.

Die Formel in der Datumsspalte lautete

@Text (Datumsfeld) (den Feldnamen habe ich schon wieder vergessen)

Warum die alten Dokumente in der Ansicht amerikanisch und die neuen deutsch ausgegeben wurden, kann ich nicht sagen. Vielleicht hatte die Ansicht einen Schlag weg. Ich vermute, dass zwischen den alten und den neuen Dokumenten eine Einstellung am Server geändert wurde, so dass die Umwandlung des Datums in Text vorher amerikanisch erfolgte, und später deutsch. Angeblich war die Ansicht heute früh einheitlich im Format, dann allerdings deutsch.

Vielleicht irre ich mich (dann bitte korrigieren), aber ich meine, dass Spalten, in denen mit DBLookup oder GetDocumentByKey gesucht wird, Text beinhalten müssen, weil es sonst nicht funktioniert. Daher ist es schon korrekt, das Datumsfeld in der Spalte in Text umzuwandeln.

Die Änderung bestand nun darin, nicht einfach @Text (Datumsfeld) zu nutzen, sondern das Datum hart in einen Text umzuwandeln, ohne dass Serversettings da reinspielen können. Gleiches gilt auch für die Suchroutine. Nun wird sowohl in der Spalte als auch in der Suchroutine der korrekt im Datumsformat abgelegte Feldinhalt immer in amerikanisches Format (mm/dd/yyyy) umgewandelt, unabhängig von Client- oder Servereinstellungen. Und schon funktioniert es.
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Tode am 20.09.11 - 20:41:38
Also: @Text( Datumsfeld ) ist natürlich ein Mega- Fehler... Da weiss ich ja nie, was am Ende rauskommt. Dass die Ansicht halb halb war... Nun das würde ich auf einen defekten Ansichts- Index schieben...

Aber es ist ja schön, dass mit Deiner Modification das alles wieder einheitlich ist...

Wenn ich sowas mache, drehe ich im übrigen die Anzeige immer so ist:
20110920

1. Saubere Sortierung
2. Unabhängig von . oder / als Trenner...

Aber ist natürlich Geschmackssache...
Da bin ich
Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: Peter Klett am 20.09.11 - 20:54:30
Hallo Tode,

da gebe ich Dir absolut recht, ich verwende sonst für solche Anlässe auch das textlich sortierbare Datumsformat ohne Trennzeichen. Das sehe ich auch noch nicht einmal als Geschmacksache, sondern als das sinnvollste Format, vollständig, sortierbar und minimale Datenmenge.

Hier ging es darum, möglichst den Urzustand wiederherzustellen, und der war amerikanisches Format. Vermutlich niemand weiß, wozu die Ansicht sonst noch benötigt wird, und eh man da eine Riesenbaustelle aufmacht ...

Titel: Re: Agent prüft keine Doppeleinträge mehr
Beitrag von: tron55 am 20.09.11 - 21:44:03
Hallo,
 
bin leider gerade erst nach Hause gekommen, daher poste ich erst jetzt.
Peter hat ja eigentlich alles beschrieben und mir sehr geholfen genau wie Bernhard auch, dafür vielen Dank.

Peter hat auf jeden Fall Recht; ich hatte auch vermutet das jemand das Serverformat auf deutsch geändert hat
(weshalb auch immer!) .

Die angesprochene verkorkste Formel im Datumsfeld + die kaputte Ansicht + die Änderung des amerikanischen Formats des Servers haben jeweils ihren Teil dazu getan das ich da jedenfalls nichts analytisch herleiten konnte.

Jetzt geht es auf jeden Fall.
Vielen Dank.

@Tode
Keine Ursache  ;)