Domino 9 und frühere Versionen > ND6: Entwicklung
Schulungskalender
flaite:
Ich persönlich bin ja nach wie vor der Meinung, dass es vielleicht für Anfänger einfacher ist, für die Anmeldungen als Antwort-Dokumente zu nehmen....
Aber gut.
1. Fehler:
Du behandelst das mit Frontend Klassen.
Nehme besser die Klasse NotesDocument (Backend-Klasse).
Ich nehme mal an das Feld "Teilnehmer" ist ein Mehrfachwerte-Feld.
Dann kannst du so etwa vorgehen (zum Beispiel)
(ich tippe das jetzt mal schnell runter ohne das auszuprobieren, also vorsicht).
--- Code: ---Dim teilnehmer() as String ' array wg. ()
Dim user as String
Dim userFound as Integer
teilnehmer = doc.getItemValue("Teilnehmer")
nameCurrentUser = session.username
userFound = false
forall userAngemeldet in Teilnehmer
if userAngemeldet = nameCurrentUser then userFound = true
end forall
if userFound = true then
msgBox "Das geht nicht. Sie sind bereits angemeldet"
else
msgbox "Ok. Sie dürfen teilnehmen. Aber gut aufpassen, ja :-)"
doc. save true, false
end if
--- Ende Code ---
TazDevil20:
Hallo,
hatte nur gedacht, da der Code inzwischen recht umfangreich ist ich nur diesen Teil poste. Hier aber mal der Komplette Code für den Button den der User drücken soll wenn er sich anmelden will (ist ein Agent und wird über "@Command([ToolsRunMacro];"Anmelden")" von dem Button angesteuert.
--- Code: ---Sub Initialize
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim dateRange As NotesDateRange
Dim dauer As Integer
'Für Mail
Dim EventName_mail As String
Dim vonDatum_mail As String
Dim bisDatum_mail As String
Dim doc_mail As NotesDocument
'Für Kalendereintrag
Dim tmpdate As String
Dim tmpdate2 As String
Dim datum_von As String
Dim datum_bis As String
Dim startDate As NotesDateTime
Dim endDate As NotesDateTime
Dim rtitem As NotesRichTextItem
'Teilnehmer prüfen
teilnhemer = doc.GetItemValue( "Teilnehmer" )
found = False
found = Arraygetindex(teilnehmer, session.UserName)
If found = True Then
Msgbox "Sie sind bereits angemeldet"
Else
'Teilnehmer hinzufügen
doc.Teilnehmer = doc.ArrayAppend("Teilnehmer", sesseion.UserName)
uidoc.Reload
'Teilnehmer neu berechnen
Dim total As Integer
total = 0
MA = doc.GetItemValue( "Teilnehmer" )
Forall m In MA
total = total + m
End Forall
Call doc.ReplaceItemValue( "Teilnehmer", total )
'Deklarationen
Set db = session.CurrentDatabase
Set uidoc = workspace.CurrentDocument
Set doc = New NotesDocument( db )
Set eventdoc = uidoc.Document
doc.Form = "newEvent"
datum_von = uidoc.FieldGetText( "vonDatum" )
datum_bis = uidoc.FieldGetText( "bisDatum" )
dauer = uidoc.FieldGetText( "Dauer" )
Set startDate = New NotesDateTime (datum_von)
Set endDate = New NotesDateTime(datum_bis)
rc = Evaluate (|@MailDbName|)
Set db = session.GetDatabase(rc(0), rc(1))
Set doc = db.CreateDocument
Set rtitem = doc.CreateRichTextItem("Body")
'setzt die Felder für den Kalendereintrag
doc.Form = "Appointment"
doc.Chair = session.UserName
doc.subject = uidoc.FieldGetText( "EventName")
doc.location = uidoc.FieldGetText("Ort")
Call rtitem.AppendText("Sehr geehrte/r ")
Call rtitem.AppendText(session.CommonUserName)
Call rtitem.AppendText(",")
Call rtitem.AddNewline(2)
Call rtitem.AppendText("mit folgender Verknüpfung können Sie die Daten dieses Seminares öffnen: ")
Call rtitem.AddTab(1)
Call rtitem.AppendDocLink(eventdoc, "Verknüpfung zum Seminar")
doc.AppointmentType="2"
Call Doc.ReplaceItemValue("_ViewIcon",26)
Call Doc.ReplaceItemValue("$Alarm",1)
Call Doc.ReplaceItemValue("$AlarmOffset",-1440)
Call Doc.ReplaceItemValue("$AlarmDescription",uidoc.FieldGetText( "EventName") + " - " + uidoc.FieldGetText( "Ort"))
Set dateRange = session.CreateDateRange
tmpDate = datum_von + " 04:00:00"
Set ndt_datum_von = New NotesDateTime(tmpDate)
Set ndt_datum_bis = New NotesDateTime(datum_bis + " 23:59:59")
Dim ndt_CalendarDateTime As Variant
Redim ndt_CalendarDateTime(0)
ndt_CalendarDateTime(0) = ndt_datum_von.LSLocalTime
Call ndt_datum_von.AdjustDay(1)
i = 0
While ndt_datum_bis.TimeDifference(ndt_datum_von) > 0
Redim Preserve ndt_CalendarDateTime(Ubound(ndt_CalendarDateTime) + 1)
ndt_CalendarDateTime(Ubound(ndt_CalendarDateTime)) = ndt_datum_von.LSLocalTime
Call ndt_datum_von.AdjustDay(1)
Wend
doc.CalendarDateTime = ndt_CalendarDateTime
doc.CalendarDateTime = ndt_CalendarDateTime
Set dateRange.StartDateTime = startDate
Set dateRange.EndDateTime = endDate
Set doc.TimeRange = dateRange
doc.Duration = dauer
doc.SequenceNum = 1
doc.OrgTable = "P0"
'Weitere Felder für den Kalendereintrag
Set doc.StartDateTime = New NotesDateTime (tmpDate)
Set doc.StartDate = New NotesDateTime (tmpDate)
Set doc.StartDate_2 = New NotesDateTime (tmpDate)
Set doc.EndDateTime = New NotesDateTime (datum_bis + " 23:59:59")
Set doc.EndDate = New NotesDateTime (datum_bis + " 23:59:59")
Set doc.EndDate_2 = New NotesDateTime (datum_bis + " 23:59:59")
Set doc.tmpStartTime_local = New NotesDateTime (LSLocalTime)
uidoc.EditMode = True
tmpTeilnehmer = uidoc.FieldGetText("Teilnehmer")
Call uidoc.FieldSetText ( "Teilnehmer", tmpTeilnehmer & Chr$ (10) & session.UserName )
Messagebox "Danke für die Anmeldung. Sie werden in kürze eine Bestätigungsmail erhalten." ,, "Info"
'Dokument speichern
Call doc.ComputeWithForm(False,False)
Call doc.Save(True,False,True)
'Mail versenden
Set db_mail = session.CurrentDatabase
Set doc_mail = New NotesDocument( db )
Set rtitem_mail = doc_mail.CreateRichTextItem("Body")
Username=session.UserName
EventName_mail = uidoc.FieldGetText( "EventName")
vonDatum_mail = uidoc.FieldGetText( "vonDatum")
bisDatum_mail = uidoc.FieldGetText( "bisDatum")
DocID_mail = uidoc.FieldGetText( "DocID")
doc_mail.Form = "Memo"
doc_mail.From = "EventPlaner"
doc_mail.SendTo = Username
doc_mail.Subject = "Bestätigung der Anmeldung für: " + uidoc.FieldGetText( "EventName")
Call rtitem.AppendText("Sehr geehrte/r ")
Call rtitem.AppendText(session.CommonUserName)
Call rtitem.AppendText(",")
Call rtitem_mail.AddNewline(2)
Call rtitem_mail.AppendText("Sie haben sich für folgende Schulung angemeldet:")
Call rtitem_mail.AddNewline(2)
Call rtitem_mail.AppendText("Schulung: ")
Call rtitem_mail.AddTab(1)
Call rtitem_mail.AppendText(EventName_mail)
Call rtitem_mail.AddNewline(1)
Call rtitem_mail.AppendText("Datum: ")
Call rtitem_mail.AddTab(2)
Call rtitem_mail.AppendText(vonDatum_mail)
Call rtitem_mail.AppendText(" - ")
Call rtitem_mail.AppendText(bisDatum_mail)
Call rtitem_mail.AddNewline(2)
Call rtitem_mail.AppendText("Der Termin wurde automatisch in Ihren Kalender eingetragen. Für weiter Informationen über diese Schulung klicken Sie doppelt auf den Eintrag in Ihrem Kalender.")
Call doc_mail.Send( False )
Call uidoc.Close
End If
End Sub
--- Ende Code ---
Hoffe ich habe in etwa es so gemacht wie Ihr gemeint hattet. Allerdings bricht mir Notes immer mit der Fehlermeldung "Object variable not set" ab. Dies geschiet an der ersten Zeile bei "Teilnehmer prüfen".
@kennwort
Ich habe es mit deinem Code mal versucht, jedoch bekomme ich immer die Fehlermeldung "Illegal reference to array or list: TEILNEHMER" beim speichern in der Zeile teilnehmer = doc.getItemValue("Teilnehmer"). Die Fehlermeldung bezieht sich auf "teilnehmer" vor dem =.
Mir würde es im gleichen Dokument einfach besser gefallen, als dass ich noch ein Antwortdokument nehmen würde. Und so kann ich auch was über LS lernen.
Ich hoffe Ihr könnt mir sagen, warum ich immer diese blöde Fehlermeldung mit "Object variable not set" bekomme.
koehlerbv:
Jo, Michael - it works as designed. Du hast zu dem Zeitpunkt, zu dem Du auf das Objekt doc zugreifst, dieses noch gar nicht instantiiert. Daher ist natürlich die "object variable not set".
Du brauchst vorher ein Konstrukt wie
Dim uidocCurrent as NotesUIDocument
Dim docCurrent as NotesDocument
Set uidocCurrent = workspace.CurrentDocument
Set docCurrent = uidocCurrent.Document
Beachte bitte die neuen Objekte -Du verwendest ja "doc" später in einem ganz anderen Zusammenhang (für ein anderes Objekt).
Auf weitere "issues" habe ich jetzt nicht geachtet - Du musst ja erstmal dieses Problem lösen.
HTH,
Bernhard
TazDevil20:
Hallo,
so langsam wird das ganze was... ;D
Bin jetzt so weit, dass ich den Termin im pers. Kalender wieder löschen möchte. Habe bisher folgenden Code:
--- Code: ---Sub Initialize
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
uidoc.EditMode = True
'Teilnehmer suchen und entfernen
Dim teilnehmer() As String
Dim x As Integer
x=0
Forall m In doc.Teilnehmer
Redim Preserve teilnehmer(x)
If m <> session.UserName Then
teilnehmer(x) = m
x = x +1
End If
End Forall
doc.Teilnehmer = teilnehmer
'Kalendereintrag löschen
Set eventdoc = uidoc.Document
eventid = uidoc.FieldGetText( "DocID" )
rc = Evaluate (|@MailDbName|)
Set db = session.GetDatabase(rc(0), rc(1))
'Dokument speichern
Call doc.ComputeWithForm(False,False)
Call doc.Save(True,False,True)
uidoc.Save
Messagebox "Sie wurden wieder abgemeldet." ,, "Info"
uidoc.close
End Sub
--- Ende Code ---
Ich weiß nur nicht, wie ich den Eintrag beim User finden soll. Ich habe inzwischen herausgefunden, wie ich an die Datenbank des Users komme. Aber wie kann ich dort jetzt etwas suchen? Habe in dem Kalendereintrag die DocID hinterlegt (eventid).
Dies ist übrigens wieder ein Button.
Ansonsten habe ich jetzt schon fast alles was ich will. Sollten nurnoch kleinigkeiten sein.
@Bernhard
Das war nur ein Fehler in dem Script. ;D Hatte bestimmt noch 100 mehr. Habs aber selbst hinbekommen *schulterklopf* :P
rmann:
kleiner hinweis in eigener Sache. Die Anwendung EasyTrain von mir dient zur Umfangreichen Schulungsverwaltung. Was derzeit nicht enthalten ist, ist das die Anmeldebestätigung bei dem Teilnehmer im pers. Kalender eingetragen wird. Die deutsche Version wird in ca. 4-6 wochen fertig, die engl. ist bei einem weltweiten Unternehmen bereits im Einsatz um damit ca. 1.000 Teilnehmer pro Jahr zu schulen.
Kleiner tipp aus der Doku. Beim ersten Start einer neuen DB erscheint eine Fehlermeldung da die System Konfiguration noch nicht erfolgte - einfach OK und zur Systemkonfiguration wechseln
Gruß
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln