Autor Thema: You must specify a parent database  (Gelesen 2297 mal)

botschi

  • Gast
You must specify a parent database
« am: 15.02.05 - 10:57:37 »
Hallo,

wir haben ein Problem mit einem periodischem Agenten, vielleicht könnt ihr uns helfen.

Der Agent soll nachts laufen, Dokumente nach gewissen kriterien durchsuchen und Mails verschicken. Also nix besonders grosses mit komplizierten Methoden oder so. Leider läuft der Agent im Hintergrund nicht (manuell einwandfrei). In dem Agent-Log kann man sehen, dass der Agent abbricht mit dem Eintrag "You must specify a parent database".
In der Hilfe habe ich dazu nicht viel gefunden. Kann mir jemand die Meldung übersetzen? Oder hatte jemand schon einmal den selben Fehler?

Danke für Hilfe!

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: You must specify a parent database
« Antwort #1 am: 15.02.05 - 12:51:52 »
Hallo
Ohne Code lässt sich da nicht viel erraten....

Wie erstelltst Du das Mail?

Errorlogging wäre hier wohl auch ein Thema...

gruss

umi
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

botschi

  • Gast
Re: You must specify a parent database
« Antwort #2 am: 15.02.05 - 14:00:56 »
Ich würde ja gerne Errorlogging machen, aber ich kenne ja nicht mal die Zeile, die den Fehler verursacht. Mit dem Code kann es zwar zu tun haben, aber das ist nicht der erste und einzige periodische Agent, der ne Mail verschicken soll.

Ich kann nur mit dem Satz "You must specify a parent database" nix anfangen und hab mir eine kleine Starthilfe erhofft.

Wofür brauche ich eine "parent database"? Und wer braucht das?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: You must specify a parent database
« Antwort #3 am: 15.02.05 - 14:03:04 »
Ich würde ja gerne Errorlogging machen, aber ich kenne ja nicht mal die Zeile, die den Fehler verursacht.

Genau dafür ist ErrorLogging ja da ... Wie schon gesagt wurde: Ohne Code können wir nicht helfen.

Bernhard

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: You must specify a parent database
« Antwort #4 am: 15.02.05 - 14:05:00 »
Ich würde ja gerne Errorlogging machen, aber ich kenne ja nicht mal die Zeile,
Eben, dazu ist ja das Errorlogging da...

Frage: LS oder Formel?
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

botschi

  • Gast
Re: You must specify a parent database
« Antwort #5 am: 15.02.05 - 14:13:14 »
Der Code ist hier:

Sub Initialize
   
%REM
Dieser Agent schickt eine Mail an die Leute (und ihren direkten Vorgesetzten), dass in der vorletzten Woche nicht alle Stunden
verteilt wurden.
Das soll nachts und periodisch erfolgen, nicht auf Knopfdruck.
%END REM
   
   On Error Goto fehler
   Dim s As New NotesSession
   Dim db As NotesDatabase
   
   Dim doc As NotesDocument
   Dim nextdoc As NotesDocument
   Dim memo As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim text As String
   Dim text1 As String
   Dim text2 As String
   Dim endesatz As String
   
   Dim anrede As String
   Dim view As NotesView
   Dim datum As New NotesDateTime("")
   
   Set db = S.CurrentDatabase
   'Set memo = New NotesDocument( db )
   Set view = db.GetView("viwAnMAGestern")
   
   Set doc = view.GetFirstDocument
   ' NAB
   Set adressdb = s.GetDatabase(db.Server, "names.nsf")   
   Set adressview = adressdb.GetView("People")
   
   ' diese gruppe wird nicht über fehlende stunden benachrichtigt
   Call bearbeiter_aus_gruppe_auslesen(s, "int_zeit_db_Nutzer_optional", keine_mail)
   'Stop
   ' diese gruppe wird über fehlende stunden benachrichtigt
   Call bearbeiter_aus_gruppe_auslesen(s, "int_zeit_db_Nutzer", send_mail)
   ' adressbuchvariablen, um den direkten vorgesetzten zu ermitteln
   
   'Set adressview = adressdb.GetView("People")   
   
'######## variablen für suche nach arbeitszeit und aktivitäten #############
   Dim arbeitcoll As NotesDocumentCollection
   Dim aktcoll As NotesDocumentCollection
   Dim arbeitformel As String
   Dim aktformel As String
'##################################################   
' schreibt die leute ohne mail in ein array
   Dim anzahl_keine_mail As Integer
   anzahl_keine_mail = 0
   Dim anzahl_keine_mail2 As Integer
   anzahl_keine_mail2 = 0
   
   Forall x In keine_mail
      anzahl_keine_mail = anzahl_keine_mail+1
   End Forall
   Redim array_ohne_mail(anzahl_keine_mail-1)
   
   ' array_ohne_mail beinhaltet die leute ohne mail in einem array
   Dim name_ohne_mail As NotesName
   Forall x In keine_mail
      Set name_ohne_mail = New NotesName (Listtag(x))
      array_ohne_mail(anzahl_keine_mail2)= name_ohne_mail.Common'Listtag(x)
      anzahl_keine_mail2 = anzahl_keine_mail2+1
   End Forall
'###################################################
   ' schreibt die leute mit mail in ein array
   Dim anzahl_mail As Integer
   anzahl_mail = 0
   Dim anzahl_mail2 As Integer
   anzahl_mail2 = 0
   
   Forall x In send_mail
      anzahl_mail = anzahl_mail+1
   End Forall
   anzahl_mail = anzahl_mail-1
   Redim array_mit_mail(anzahl_mail)
   
   ' array_mit_mail beinhaltet die leute mit mail in einem array
   Dim name_mail As NotesName
   Forall x In send_mail
      Set name_mail = New NotesName (Listtag(x))
      array_mit_mail(anzahl_mail2)= name_mail.Common'Listtag(x)
      anzahl_mail2 = anzahl_mail2+1
   End Forall
'###################################################   
   ' löscht alle leute ohne mail aus dem array mit mail
   Dim i As Long
   i = 0
   Redim array_mit_mail_gesamt(anzahl_mail-anzahl_keine_mail)
   
   Forall leute In array_mit_mail
      prüfmail = Arraygetindex(array_ohne_mail, leute)
      If Isnull(prüfmail) Then
         array_mit_mail_gesamt(i) = leute
         i = i+1
      End If
   End Forall
   Stop
'###################################################
   Dim monat As Integer
   monat = Month(Today)
   
   Dim arbeitdoc As NotesDocument
   Dim nextarbeitdoc As NotesDocument
   Dim aktdoc As NotesDocument
   Dim nextaktdoc As NotesDocument
'######## variablen für die stunden #############   
   Dim a_stunden As Double
   Dim v_stunden As Double
   Dim tmp_verteilt As Double   
'################################################   
   Dim startdate As NotesDateTime
   Dim enddate As NotesDateTime
   Dim strdate As String
   Dim tag As String
   Dim jahr As String
   
'######## views für arbcoll und aktcoll #########
   Dim arbeitview As NotesView
   Dim aktview As NotesView
   
   Set arbeitview = db.GetView("viwAZMADatum")
   Set aktview = db.GetView("viwAktNameNotNull")
'################################################      
   Dim formel As String
   
   Forall leut In array_mit_mail_gesamt
      Dim ma As String
      ma = leut
      Print leut
      tag = "1."
      jahr = Cstr(Year(Today))
      'Stop
      ' hier wird in zeit_db nach einem teamleiter gesucht
      ' wenn keiner gefunden wird, wird das Personendoc im NAB von unten nach oben durchsucht,
      'damit möglichst der nächste direkte vorgesetzte ermittelt wird
      formel = "@DbLookup("""":""NoCache"";"""";""viw_Teamliste"";"""+ma+""";""teamer"")"
      tmp_vorgesetzter = Evaluate(formel)
      If Not Isempty (tmp_vorgesetzter) Then
         vorgesetzter = tmp_vorgesetzter(0)   
      End If
      
      If vorgesetzter = "" Then
         Set adressdoc = adressview.getfirstdocument
         Do   
            Set notes_name = New NotesName(adressdoc.Fullname(0))
            Set nextadressdoc = adressview.GetNextDocument(adressdoc)
            If ma <> notes_name.Common Then
               Set adressdoc = nextadressdoc
            End If
         Loop Until ma = notes_name.Common 'adressdoc.Fullname(1)
         
         If adressdoc.HasItem( "Level6" ) Then
            vorgesetzter = adressdoc.Level6(0)
            Goto weiter
         End If
         If adressdoc.HasItem( "Level5" ) Then
            vorgesetzter = adressdoc.Level5 (0)
            Goto weiter
         End If
         If adressdoc.HasItem( "Level4" ) Then
            vorgesetzter = adressdoc.Level4(0)
            Goto weiter
         End If   
         If adressdoc.HasItem( "Level3" ) Then
            vorgesetzter = adressdoc.Level3(0)
            Goto weiter
         End If
         If adressdoc.HasItem( "Level2" ) Then
            vorgesetzter = adressdoc.Level2(0)
            Goto weiter
         End If
         If adressdoc.HasItem( "Level1" ) Then
            vorgesetzter = adressdoc.Level1(0)
            Goto weiter
         End If
         If adressdoc.HasItem( "Level0" ) Then
            vorgesetzter = adressdoc.Level0(0)
            Goto weiter
         End If
      End If
weiter:
      
      'collections sammeln
      Set startdate = New NotesDateTime(Today)
      Call startdate.AdjustDay(-14) ' 14 tage, da der agent immer montags läuft
                        ' und der agent so immer auf den montag der vorvorwoche kommt
      Set enddate = New NotesDateTime(startdate.DateOnly)
      'Call enddate.AdjustDay(6)
      Dim counter As Integer
      counter = 0
      
      Do
         ' kw berechnen für key
         Stop
         Dim kw As String
         Dim strdatum As String
         strdatum = Cstr(enddate.DateOnly)
         Dim wtag As String
         wtag = Wochentag(FormatDatum(strdatum))
         kw = Cstr(KW_bib(FormatDatum(strdatum) , 0))
         
         Dim kwlen As Integer
         kwlen = Len(kw)
         If kwlen < 2 Then
            kw = "0"+kw
         End If
         
         'arbeitformel = {Form = "frmAnwesenheit" & @date(Kalender) = @today}
         arbeitformel = leut + enddate.DateOnly
         Set arbeitcoll = arbeitview.GetAllDocumentsByKey(arbeitformel, True)
         
         aktformel = leut + kw 'Cstr(monat)
         Set aktcoll = aktview.GetAllDocumentsByKey(aktformel, True)
         
         If arbeitcoll.Count > 0 Then
            Set arbeitdoc = arbeitcoll.GetFirstDocument()
            Do
               a_stunden = a_stunden + arbeitdoc.Stunden(0)
               Set nextarbeitdoc = arbeitcoll.GetNextDocument(arbeitdoc)
               Set arbeitdoc = nextarbeitdoc
            Loop Until arbeitdoc Is Nothing
            
            If aktcoll.Count > 0 Then
               Set aktdoc = aktcoll.GetFirstDocument()
               Do
                  If aktdoc.Flag_montag(0) = enddate.DateOnly And aktdoc.f_Montag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Montag(0)
                  End If
                  If aktdoc.Flag_dienstag(0) = enddate.DateOnly And aktdoc.f_Dienstag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Dienstag(0)
                  End If
                  If aktdoc.Flag_mittwoch(0) = enddate.DateOnly And aktdoc.f_Mittwoch(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Mittwoch(0)
                  End If
                  If aktdoc.Flag_donnerstag(0) = enddate.DateOnly And aktdoc.f_Donnerstag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Donnerstag(0)
                  End If
                  If aktdoc.Flag_freitag(0) = enddate.DateOnly And aktdoc.f_Freitag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Freitag(0)
                  End If
                  If aktdoc.Flag_samstag(0) = enddate.DateOnly And aktdoc.f_Samstag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Samstag(0)
                  End If
                  If aktdoc.Flag_sonntag(0) = enddate.DateOnly And aktdoc.f_Sonntag(0) > 0 Then
                     v_stunden = v_stunden + aktdoc.f_Sonntag(0)
                  End If
                  
                  Set nextaktdoc = aktcoll.GetNextDocument(aktdoc)
                  Set aktdoc = nextaktdoc
               Loop Until aktdoc Is Nothing
            End If
         End If
'%ENDREM
'%REM
         'Stop
         If a_stunden <> v_stunden Then
'############# Mail an Nichtabmelder
            If memo Is Nothing Then
               Set memo = New NotesDocument( db )
               memo.form ="Memo"   
               memo.Subject = "Sie haben in zeit_db nicht alle Stunden innerhalb der Frist verteilt."' ("+vorgesetzter+ma+")"
               
               Set rtitem = New NotesRichTextitem(memo, "Body")
               anrede = "Hallo,"
               text = "bitte melden Sie der Verwaltung die offenen Stunden für die Tage:"
               Call rtitem.appendText(anrede)
               Call rtitem.AddNewLine( 2 )
               Call rtitem.appendText(text)
               Call rtitem.AddNewLine( 1 )
               
            End If
            text2 = "Am " & enddate.DateOnly & " fehlen noch "& a_stunden - v_stunden & " Stunden."
            
            Call rtitem.appendText(text2)
            Call rtitem.AddNewLine( 1 )
            
            'Call rtitem.AppendDocLink( doc, db.Title )
         End If
'%ENDREM
         Call enddate.AdjustDay( 1 )
         a_stunden = 0
         v_stunden = 0
      'Loop Until Month(enddate.DateOnly) <> Month(startdate.DateOnly)
         counter = counter+1
      Loop Until counter = 7
      If Not memo Is Nothing Then
         endesatz = "Diese Mail wurde automatisch von zeit_db erzeugt."
         Call rtitem.AddNewLine( 2 )
         Call rtitem.appendText(endesatz)
         Call rtitem.AddNewLine( 1 )
         memo.SendTo = ma
         memo.CopyTo = vorgesetzter
         memo.BlindCopyTo = "AdminMeldungen"
         Call memo.Send(False)
      End If
      Set memo = Nothing
      vorgesetzter = ""
      'Stop
   End Forall
TheEnd:
   Exit Sub
   
fehler:
   ' bei Fehler Mail an mich
   
   Set memo = New NotesDocument( db )
   memo.form ="Memo"
   memo.subject = "zeit_db: Offene Stunden vorige Woche"& Str(Erl) & Chr(10)  & Error   
   memo.SendTo = "AdminMeldungen"
   Call memo.send(False)
   ' Kontrollierter Abbruch:
   Goto TheEnd
   Exit Sub   
   
End Sub

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: You must specify a parent database
« Antwort #6 am: 15.02.05 - 14:18:50 »
Du hast ja schon ein Errorlogging da drin ( mit dem Mail )
da wäre folgendes noch sinnvoll:
memo.subject = "zeit_db: Offene Stunden vorige Woche"& Str(Erl) & Chr(10)  & Error  & chr(10) & { In Zeile: } & str(erl)

Damit hättest Du schon mal die Zeile. evtl. könntest du diesen Text auch via messagebox ausgeben, dann erscheint er im Log des Servers, falls das Mail nicht geschickt wird.
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Marinero Atlántico

  • Gast
Re: You must specify a parent database
« Antwort #7 am: 15.02.05 - 14:25:15 »
... oder schau einfach im NAB nach, ob es da eine Gruppe AdminMeldungen gibt. Lass dich da eintragen.
... oder sende die Mail im Errorhandler zusätzlich an dich.


@botschi: Ich würd sagen, dass in keiner halbwegs komplexen Plattform die Fehlermeldungen immer verständlich sind. Das gilt auch für Experten derselben Plattform.
Oft hängt die Bedeutung mehr vom Kontext des Fehlers ab als was gerade zufällig im Fehlertext steht.
Mir lesen auch des öfteren Leute die Fehlermeldungen, die sie sehen, vor und denken, mir würde das irgendwie extrem viel sagen. Das ist oft nicht der Fall.

Ich könnte mal zur allgemeinen Unterhaltung stacktraces des hochgelobten JBoss J2EE Servers posten  ;D

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: You must specify a parent database
« Antwort #8 am: 15.02.05 - 14:27:47 »
Nur zur Sicherheit: Hat Deine DB eine Vorgabeansicht und -maske ?

Bernhard

botschi

  • Gast
Re: You must specify a parent database
« Antwort #9 am: 15.02.05 - 14:33:42 »
Nein, keine Vorgabemaske und keine Vorgabeansicht

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: You must specify a parent database
« Antwort #10 am: 15.02.05 - 14:35:43 »
Dann dürfte das NotesDocument.Send in die Hose gehen.

Bernhard

botschi

  • Gast
Re: You must specify a parent database
« Antwort #11 am: 15.02.05 - 14:44:18 »
Ist das denn nur ein "hin und wieder Problem"? Es ist nicht der einizge periodische Agent, der eine Mail verschicken soll. Ich hab das jetzt mal geändert, das Ergebnis muss ich abwarten- werde es aber posten!

Danke erstmal!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz