Termine erstellen per Skript (Appointment Objekt)

Hallo,

allen Forumsmitgliedern wünsche ich noch ein frohes neues Jahr!

Ich würder gerne per C# Skript Erinnerungen erstellen lassen, welche als Termin eingetragen werden. Wird z.B. ein Angebot verschickt so soll man nach zwei Wochen daran erinnert werden, um zum Beispiel den Kunden erneut zu kontaktieren.

In der Programmierer-Referenz habe ich dazu das Appointment Objekt gefunden. Mir fehlt jedoch ein Beispiel zum Vorgehen. Hat da jemand in C# schon einmal etwas erstellt, was er mir als Beispiel zu Verfügung stellen könnte?

Beste Grüße

Thomas

Hallo,

ich habe das leider nur in VB-Skript, das sollte sich aber doch übertragen lassen. Aus dem Stegreif hab ich mal das grundsätzliche Vorgehen zusammengestellt (wenn noch Fehler drin sind, bitte ich um einen Hinweis…)

' Erstellen der benötigten Objekte
Set oProject = cRM.CurrentProject
Set oActiveView = oProject.ActiveViews.ActiveView
set oCurrentRecordSet = oActiveView.CurrentRecordSet
set oCurrentRecord= oCurrentRecordSet.CurrentRecord
Set otm = oProject.timemanager

' ggf Link auf aktuellen Datensatz zusammenbauen
sDSLink = 	CStr(oProject.ID) & "|" & _
			CStr(oActiveView.Name) & "|" & _
			CStr(oActiveView.Config.FamilyName) & "|" & _
			CStr("-Name der UNIQUEIDENTIFIER-Spalte-") & "|" & _
			CStr(oCurrentRecord.GetContentsByName("-Name der UNIQUEIDENTIFIER-Spalte-")) & "|" & _ 
			"Hier ein wenig Text um dem Link eine Semantik zu geben..."
			
Set oTermin = otm.Appointments.Add()		' neuen Termin erstellen

ApptSubject = "Betreff als String"
ApptBody = "Nachricht"
ApptLocation = "Ort, an dem der Termin stattfindet"

With oTermin
	.Subject ApptSubject
	.AllDayEvent false
	.Reminder true
	.Body ApptBody
	.Start DatumBeginn
	.End   DatumEnde
	.Location ApptLocation
	.Importance 4							' 1-5
	.Categories.Add ("Kategorie")			' muss in der Terminansicht-Konfigurieren-Kategorien vordefiniert werden
	.Private False
	.ReminderMinutesBeforeStart 15
	.User 									' Login-Name
	.Attendees.Add ("Kategorie oder Login")
	.HostDatabase sDSLink					' Link anhängen
End With


oTermin.Save()


' Ansicht aktualisieren
otm.UpdateViews
oActiveView.Update

' Aufräumen
Set oTermin = Nothing
Set otm = Nothing
set oCurrentRecord= Nothing
set oCurrentRecordSet = Nothing
Set oActiveView = Nothing
Set oProject = Nothing

Ich hoffe, das macht das grundsätzliche Vorgehen klar.

Gruß
Wolfgang

2 „Gefällt mir“

Beim dritten Lesen fällt mir auf:

ich würde eher noch ein

Dim oInputForm  : Set oInputForm = oView.CurrentInputForm(2)

einfügen und anstatt

oActiveView.Update

oInputForm.Update

aufrufen.
Dann bleibt die Position im Recordset erhalten.

Gruß
Wolfgang

Vielen Dank Wolfgang! Damit bin ich schon einen Schritt weiter. Was nocht nicht funktioniert ist das Vergeben der Kategorien und Teilnehmer. Da gab es in VB wohl einen Bug, welcher behoben wurde. In C# habe ich dieselben Probleme. Mein Code lautet:

oTermin.Categories.Add("Intern");
oTermin.Attendees.Add(cRM.CurrentProject.CurrentUser.ToString());

Vielleicht habe ich da ja auch einen Denkfehler.

Das Hinzufügen von Attendees zum Termin hat für mich auch nicht funktioniert - es gibt für die Add-Methode derzeit keine Überladungen, die das Hinzufügen von Informationen ermöglichen. Ich habe dies intern entsprechend weitergeleitet.

Wenn Sie möchten, öffnen Sie gerne einen Support-Case über unser Support-Portal, sodass ich Ihnen Module und weitere Informationen bereitstellen kann, sobald das Problem behoben wurde.

Categories hinzufügen hat für mich aber wunderbar funktioniert. Anbei mein Beispielscript:

            // Erstellen der benötigten Objekte
            Project currentProject = cRM.CurrentProject;
            combit.cRM.COM.View activeView = currentProject.ActiveViews.ActiveView;
            RecordSet currentRecordSet = activeView.CurrentRecordSet;
            Record currentRecord = currentRecordSet.CurrentRecord;
            TimeManager timeManager = currentProject.TimeManager;

            // Ggf. Link auf aktuellen Datensatz zusammenbauen
            string hostDatabase = currentProject.ID + "|" + activeView.Name + "|" + activeView.Config.FamilyName + "|" + activeView.Config.PrimaryKeyFldName + "|" + currentRecord.GetContentsByName(activeView.Config.PrimaryKeyFldName) + "|" + currentRecord.GetRecordRefDescription();

            Appointment appointment = timeManager.Appointments.Add();
            appointment.Subject = "Betreff";
            appointment.Body = "Nachricht";
            appointment.Location = "Ort";
            appointment.Start = System.DateTime.Now;
            appointment.End = System.DateTime.Now.AddMinutes(15);
            appointment.Importance = 4;
            appointment.Reminder = true;
            appointment.ReminderMinutesBeforeStart = 60;
            appointment.User = currentProject.Users.CurrentUser.LoginName;
            appointment.HostDatabase = hostDatabase;

            appointment.Categories.Add("Meeting");

            // appointment.Attendees.Add("LisaFrisch");

            appointment.Save();

Guten Morgen,

ich verstehe meinen Fehler auch nicht. In der SDK war alles so beschrieben, wie Sie es in Ihrem Beispiel gezeigt haben. Ich habe einen Screenshot angefertigt mit der Fehlermeldung. Vielleicht erkenennen Sie, was ich falsch mache:

Ich benutze Visual Studio 2022 Version 17.1.0

Huch, das konnte bei mir auch nur funktionieren, weil ich schon mit einer Vorabversion des cRM 11.007 unterwegs bin :sweat:

Da macht es umso mehr Sinn, dass Sie über das Support-Portal auf mich zukommen, dann würde ich Ihnen ein entsprechendes Modulpaket schnüren, wenn auch die Attendees.Add()-Methode korrekt funktioniert, sodass Sie diese und die Categories entsprechend nutzen können :slight_smile:

1 „Gefällt mir“

Hallo, Thomas,

ich sehe gerade

oTermin.Attendees.Add(cRM.CurrentProject.CurrentUser.ToString());

Ich weiß nicht, was das Objekt CurrentUser mit der Methode ToString liefert. Aber das Objekt hat in den Properties den LoginName,… aus denen sich ein passender Attendee zusammenbasteln läßt.

Gruß
Wolfgang

Das ist richtig, aber das Problem ist, dass bei C# Scripting (im Gegensatz zu VBScript) diese „Add“ Methode (fälschlicherweise) keinen String Parameter erwartet. Wir kümmern uns.

Hallo zusammen,

ich habe zwischenzeitlich einen Fix für die fehlende Überladung der Methode Attendees.Add() aus unserer Entwicklungsabteilung erhalten und konnte einen erfolgreichen Test zur Neuanlage eines Termin mit unterschiedlichen Teilnehmern durchführen.

Dieser Fix wird im nächsten Service Pack enthalten sein. Wenn eine Vorabversion benötigt wird, kommen Sie gerne im Rahmen eines Support-Cases auf mich zu, dann schicke ich Ihnen die benötigten Module gerne zu.

PS: Ein genauer Zeitpunkt für das nächste Service Pack des cRM11 steht noch nicht fest. Gerne können Sie sich aber durch unseren RSS-Feed auf der Download-Seite informieren lassen, sobald das Service Pack veröffentlicht wurde:

https://www.combit.net/service-packs/

Vielen Dank für die Info!