Termin erzeugen

Termin erzeugen

Inhaltsverzeichnis:


Ausgangssituation

Sie möchten neue Aufgaben, Notizen, Termine oder Wiedervorlagen erzeugen

Lösung

Per API können Sie Aufgaben, Notizen, Termine oder Wiedervorlagen anlegen. Diese erscheinen auch in der ams.5 Vorlagenmappe.

Vorgehen

Für Ihre Vorlagemappe können Sie Aufgaben, Notizen, Termine oder Wiedervorlagen per API erzeugen.

  • Aufgaben/Notizen/Termine/Wiedervorlagen werden sehr ähnlich angelegt. Gesteuert wird der Unterschied über das Feld Kategorie. Teilweise werden ein paar Felder mehr gefüllt.

  • Das sind alles Datensätze in der Tabelle TERMIN

Termin/Aufgabe/Vorgang/Wiedervorlage/Kontaktnotiz/Process

  • Die Begrifflichkeiten sind leider nicht ganz einfach.

  • In AMS.5 gibt es den Datensatz „Termin“. Dieser kann von einer der Kategorien sein: Termin/Aufgabe/Vorgang/Wiedervorlage/Kontaktnotiz

  • In der assfinet cloud gibt es zusätzlich noch den Datensatz „Process“

  • An einem „Process“ hängt in der Regel ein „Termin“. Wenn man zu einem „Process“ eine Nachricht hochläd, so landet diese in AMS.5 an dem „Termin“ unter „Aktivität“. Siehe: KundeAktivitaetLesenErgaenzen()

Allgemeines zum Hochladen

  • für die API wird über OAuth2 ein BearerToken (mit scope: drive) ermittelt über ClientId+ClientSecret und Benutzername+Passwort. Dieses Token ist 30 Minuten gültig, und sollte in der Zeit wiederverwendet werden.
    Nach den 30 Minuten kann man sich über das RefreshToken ein aktuelles Token holen. Aber dann muss man das ursprüngliche Token auch mit Scope: offline_access%20drive geholt haben.

  • Termin/Aufgabe/Wiedervorlage/Kontaktnotiz werden in der gleichen Datenbanktabelle „Termine“ gespeichert und unterscheiden sich hauptsächlich durch die Kategorie:

    • Termine werden als Termin gespeichert mit Kategorie=“Termin“

    • Aufgaben werden als Termin gespeichert mit Kategorie=“Aufgabe“

    • Wiedervorlage werden als Termin gespeichert mit Kategorie=“Wiedervorlage“

    • Kontaktnotiz werden als Termin gespeichert mit Kategorie=“Kontaktnotiz“

    • Vorgänge werden als Termin gespeichert mit Kategorie=“Vorgang“

  • Insert und Update von Datensätzen ist der gleiche API-Aufruf. Wenn der Wert im Feld-‚Id‘ in der Datenbank bekannt ist, wird ein Update gemacht. Ansonsten ein Insert

  • Es muss immer der komplette Datensatz übertragen werden. Es reicht nicht aus, nur geänderte Felder zu übertragen. Nicht übergebene Felder werden in der Datenbank auf leer gesetzt

  • Leere Felder werden normalerweise nicht übertragen. Dadurch werden weniger Daten übertragen. Wenn man ein Feld (welches vorher gefüllt war) per Update auf leer setzen möchte, muss man beim AmsTransferContextOptions das Feld SendNulls=true setzen

  • Bei einem Termin muss auch immer ein LinkObjekt erzeugt werden, welches zum Beispiel den Kunden mit dem Termin verlinkt

  • Die markierten Zwangsfelder müssen gefüllt werden

  • assfinet Cloud und AMS.5 sind unterschiedliche Datenbanksysteme. Das bedeutet beim Erzeugen von Datensätzen per API:

    • wenn ein neuer Kunde und ein neuer Termin (oder ein neuer Vertrag/Schaden//Aufgabe) angelegt werden, so müssen diese Datensätze in einem 'gemeinsamen' TRANSFER übertragen werden. Ansonsten geht die Verknüpfung zwischen dem Kunden-Termin verloren

    • Wenn man einen Termin (oder ein neuer Schaden/Termin/Aufgabe) zu einem bestehenden Kunden per API anlegt, so muss mit dem Kunden-Datensatz bereits eine Replikation durchlaufen worden sein, damit beide Datenbanken die gleiche Feldkennung-Amsidnr haben. Dieses wird in den Beispielen geprüft mit der Testkennung auf z.B. "Kd-" und "Vt-"

Einen Termin/Aufgabe nach assfinet Cloud hochladen

  • mit ClientId + ClientSecret und der Kombination aus Name + Passwort über "oauth/token" einen Bearer-Token holen (noch gültige Token nicht erneut holen)

  • in der Struktur-AmsTransferContext den neuen Termin (oder mehrere) mit seinem Vertrag hinzufügen

  • diese Daten läd man nun als JSON-String mitsamt Bearer-Token an "/api/v1/Ams/Transfer" hoch

  • Beispiel in C# :

Termin zum Vertrag neu hochladen

// mit ClientId und ClientSecret und Username+Passwort anmelden und einen Termin zum Vertrag neu hochladen public static async Task ApiTerminVertragUpload() { HttpClient httpClient = new HttpClient(); Uri baseUriAuth, baseUriApi; string userName, passwort, license; GetServerUrl(out baseUriAuth, out baseUriApi, out userName, out passwort, out license); // meine Servereinstellungen (bearerToken, bearerExpireTimeUTC, refreshToken) = await GetBearerToken(httpClient, baseUriAuth, userName, passwort, bearerToken, bearerExpireTimeUTC, refreshToken, license); // Bearer-Token ermitteln, und Ablaufzeit des BearerToken, und RefreshToken string guid = "2936E523-4D79-4668-9D80-xxxxx"; // meinen Vater - Datensatz über die Guid lesen. Hier Vertrag.Id eintragen bool adminAccessMode = true; //darf ich alle Verträge lesen? //der Kunde+Vertrag zum Termin/Aufgabe muss gelesen werden, damit alles gemeinsam im Transfer enthalten ist: var myVertrag = await GetVertrag(httpClient, bearerToken, baseUriApi, guid, adminAccessMode); //den Vertrag lesen var myKunde = await GetVertragKunde(httpClient, bearerToken, baseUriApi, myVertrag.Id.ToString(), adminAccessMode); //den Kunden zum Vertrag lesen if (myVertrag.Amsidnr.IndexOf(KundePreAmsidnr) >= 0 || myVertrag.Amsidnr.IndexOf(VertragPreAmsidnr) >= 0 || myVertrag.Amsidnr.IndexOf(SchadenPreAmsidnr) >= 0) throw new Exception("Fehler: Vater-Datensatz wurde noch nicht nach AMS.5 übertragen und ist per Replikation wieder zurück nach Collaboration synchronisiert worden"); var mySachbearbeiterUser = await GetSachbearbeiterUser(httpClient, bearerToken, baseUriApi, license); if (mySachbearbeiterUser is null ) { throw new Exception("Fehler: keinen Sachbearbeiter gefunden"); } var terminId = Guid.NewGuid(); var myTermin = new TerminModel { Id = terminId, Amsidnr = TerminPreAmsidnr + terminId, // Zwangsfeld, eindeutige interne Nummer. Erst mal vorläufige Nummer, wird später durch AMS.5 endgültig vergeben Alarmactive = false, Alarmstatus = true, Bearbeiter = "MeinFirma", Grund = "Aufgabe von API:" + DateTime.Now, Info = "Termin geändert:" + DateTime.Now, Kategorie = "Aufgabe", // "Aufgabe" oder "Termin" oder "Wiedervorlage" oder "Kontaktnotiz" oder "Vorgang" Art = "Vertrag", // hier: KEY zeigt auf einen 'Vertrag' ( oder 'Kunde' oder 'Schaden' oder 'Gesellschaft' oder 'Vermittler') Key = myVertrag.Amsidnr, AngelegtZeitpunkt = DateTime.Now, Angelegtvon = "Mustermann", Ort = "XXX", TerminFuer = mySachbearbeiterUser.Username, //welcher "Bearbeiter" ist für diesen Termin zuständig? (AMS.5-Username). License = myVertrag.license, // Lizen/Mandant z vom Vater-Datensatz Partner = myKunde.Name, // Name "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerEmail = myKunde.EmailGeschaeftlich ?? myKunde.EmailPrivat, // Email "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerAdrid = myKunde.Adrid, // Adresse "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird Gevo = "Angebot", // gültige Gevo.GevoBezeichnung, siehe auch /api/v1/BiproGevo?biproService=vertragsservice GevoId = 190014000, // gültige Gevo.GevoId Datum = DateTime.Now, Vorgangtyp = "ANGEBOT", Vorgangsart = "Vorgang" }; var linkId = Guid.NewGuid(); LinkObjectModel myLinkObject = new LinkObjectModel { Id = linkId, Amsidnr = LinkPreAmsidnr + linkId, // Zwangsfeld, meine eindeutige interne Link-Nummer SId = myVertrag.Amsidnr, SArt = LinkObjectArt.Vertrag, Key = myTermin.Amsidnr, KeyArt = LinkObjectArt.Termin, //ACHTUNG: Hier ENUM-Ziffer übergeben z.B. 5 Bearbeiter = "MeinFirma", License = myVertrag.license, // Lizenz/Mandant vom Vater-Datensatz }; AmsTransferContext myExport = new AmsTransferContext { Kunden = new List<KundeModel> { myKunde }, // Kunde zum Vertrag mit übergeben Vertraege = new List<VertragModel> { myVertrag }, Termine = new List<TerminModel> { myTermin }, LinkObjekte = new List<LinkObjectModel> { myLinkObject }, }; await GetTransferToken(httpClient, baseUriApi, bearerToken, License, myExport, ImportAction.iaNoKDVTUpdate, SendNulls:false); // Ihre Lizenz/Mandant eintragen und ImportFlags und TransferOptions in Parameter myExport als Rückgabewert zurückerhalten //neuen Termin hochladen: string apiPath = "/api/v1/Ams/Transfer"; var contenStr = Newtonsoft.Json.JsonConvert.SerializeObject(myExport, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var content = new StringContent(contenStr, System.Text.Encoding.UTF8, "application/json"); var requestUri = new Uri(baseUriApi, apiPath); var results2 = await httpClient.PostAsync(requestUri, content); var apiErgebnis = await results2.Content.ReadAsStringAsync(); if (results2.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler: " + apiErgebnis); var mySuccessResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<SuccessResponse>(apiErgebnis); if (mySuccessResponse == null || !mySuccessResponse.Success) throw new Exception("Fehler: nicht erfolgreich: "+ apiErgebnis); }

Termin zum Kunden neu hochladen

// einen Termin zum Kunden neu hochladen public static async Task ApiTerminKundeUpload(string kundeGuid, bool adminAccessMode = true) { HttpClient httpClient = new HttpClient(); Uri baseUriAuth, baseUriApi; string userName, passwort, license; GetServerUrl(out baseUriAuth, out baseUriApi, out userName, out passwort, out license); // meine Servereinstellungen (bearerToken, bearerExpireTimeUTC, refreshToken) = await GetBearerToken(httpClient, baseUriAuth, userName, passwort, bearerToken, bearerExpireTimeUTC, refreshToken, license); // Bearer-Token ermitteln, und Ablaufzeit des BearerToken, und RefreshToken //der Kunde zum Termin/Aufgabe muss gelesen werden, damit beides gemeinsam im Transfer enthalten ist: var myKunde = await GetKunde(httpClient, bearerToken, baseUriApi, kundeGuid, adminAccessMode); //den Kunde lesen if (mySachbearbeiterUser is null ) { throw new Exception("Fehler: keinen Sachbearbeiter gefunden"); } var terminId = Guid.NewGuid(); var myTermin = new TerminModel { Id = terminId, Amsidnr = TerminPreAmsidnr + terminId, // Zwangsfeld, meine eindeutige interne Termin-Nummer Alarmactive = false, Alarmstatus = true, Bearbeiter = "MeinFirma", Grund = "Vorgang von API:" + DateTime.Now, Info = "Termin geändert:" + DateTime.Now, //Kategorie = "Aufgabe", Kategorie = "Vorgang", TerminFuer = mySachbearbeiterUser.Username, //welcher "Bearbeiter" ist für diesen Termin zuständig? (AMS.5-Username) Art = "Kunde", Key = myKunde.Amsidnr, AngelegtZeitpunkt = DateTime.Now, Angelegtvon = "Mustermann", Ort = "XXX", S21_F1 = "xx S21_F1", S21_F12 = "XX S21_F12", InfoHtml = "https xxx", License = myVertrag.license, // Lizenz/Mandant vom Vater-Datensatz Partner = myKunde.Name, // Name "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerEmail = myKunde.EmailGeschaeftlich ?? myKunde.EmailPrivat, // Email "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerAdrid = myKunde.Adrid, // Adresse "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird Gevo = "Angebot", // gültige Gevo.GevoBezeichnung, siehe auch /api/v1/BiproGevo?biproService=vertragsservice GevoId = 190014000, // gültige Gevo.GevoId Datum = DateTime.Now, Vorgangtyp = "ANGEBOT", Vorgangsart = "Vorgang" }; var linkId = Guid.NewGuid(); LinkObjectModel myLinkObject = new LinkObjectModel { Id = linkId, Amsidnr = LinkPreAmsidnr + linkId, // Zwangsfeld, meine eindeutige interne Link-Nummer SId = myKunde.Amsidnr, SArt = LinkObjectArt.Kunde, Key = myTermin.Amsidnr, KeyArt = LinkObjectArt.Termin, //ACHTUNG: Hier ENUM-Ziffer übergeben z.B. 5 Bearbeiter = "MeinFirma", License = myVertrag.license, // Lizenz/Mandant vom Vater-Datensatz }; AmsTransferContext myExport = new AmsTransferContext { Kunden = new List<KundeModel> { myKunde}, Termine = new List<TerminModel> { myTermin }, LinkObjekte = new List<LinkObjectModel> { myLinkObject }, }; await GetTransferToken(httpClient, baseUriApi, bearerToken, License, myExport, ImportAction.iaNoKDVTUpdate, SendNulls:false); // Ihre Lizenz/Mandant eintragen und ImportFlags und TransferOptions in Parameter myExport als Rückgabewert zurückerhalten //neuen Termin hochladen: string apiPath = "/api/v1/Ams/Transfer"; var contenStr = Newtonsoft.Json.JsonConvert.SerializeObject(myExport, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var content = new StringContent(contenStr, System.Text.Encoding.UTF8, "application/json"); var requestUri = new Uri(baseUriApi, apiPath); var results2 = await httpClient.PostAsync(requestUri, content); var apiErgebnis = await results2.Content.ReadAsStringAsync(); if (results2.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler: " + apiErgebnis); var mySuccessResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<SuccessResponse>(apiErgebnis); if (mySuccessResponse == null || !mySuccessResponse.Success) throw new Exception("Fehler: nicht erfolgreich: " + apiErgebnis); }

neuer Termin und neuer Schaden hochladen

// einen neuen Schaden + neuer Termin zum Vertrag neu hochladen public static async Task<string> ApiNeuerSchadenNeuerTerminUpload(string vertragGuid, bool adminAccessMode = true) { HttpClient httpClient = new HttpClient(); Uri baseUriAuth, baseUriApi; string userName, passwort, license, gesellschaft, mandantAmsidnr, mandantVm1; GetServerUrl(out baseUriAuth, out baseUriApi, out userName, out passwort, out license, out gesellschaft, out mandantAmsidnr, out mandantVm1); // meine Servereinstellungen (bearerToken, bearerExpireTimeUTC, refreshToken) = await GetBearerToken(httpClient, baseUriAuth, userName, passwort, bearerToken, bearerExpireTimeUTC, refreshToken, license); // Bearer-Token ermitteln, und Ablaufzeit des BearerToken, und RefreshToken //der Vertrag zum Schaden muss gelesen werden, damit beides gemeinsam im Transfer enthalten ist: var myVertrag = await GetVertrag(httpClient, bearerToken, baseUriApi, vertragGuid, adminAccessMode); //den Vertrag lesen var myKunde = await GetVertragKunde(httpClient, bearerToken, baseUriApi, myVertrag.Id.ToString(), adminAccessMode); //den Kunden zum Vertrag lesen if (myKunde.Amsidnr.IndexOf(KundePreAmsidnr) >= 0 || myVertrag.Amsidnr.IndexOf(VertragPreAmsidnr) >= 0) throw new Exception("Fehler: der Vater-Datensatz wurde noch nicht nach AMS.5 übertragen und ist per Replikation wieder zurück nach assfinet Cloud synchronisiert worden"); var mySachbearbeiterUser = await GetSachbearbeiterUser(httpClient, bearerToken, baseUriApi, license); //der bekommt die Antwort auf eine Nachricht if (mySachbearbeiterUser is null) { throw new Exception("Fehler: keinen Sachbearbeiter gefunden"); } var schadenId = Guid.NewGuid(); var mySchaden = new SchadenModel { Id = schadenId, Amsidnr = SchadenPreAmsidnr + schadenId, // Zwangsfeld, meine eindeutige interne Schadennummer Key = myVertrag.Amsidnr, // Zwangsfeld, Vater - Datensatz, also zugehöriger Vertrag.Amsidnr NummerVU = "SNR-" + DateTime.Now.ToString("HHmmss"), // Schadennummer bei der Gesellschaft NummerVN = null, // Schadennummer beim Kunden NummerMakler = null, // Schadennummer beim Makler BearbeiterVU = "", BearbeiterVN = "", Meldungtag = DateTime.Now, //wann wurde gemeldet? SchadenZeitpunkt = DateTime.Now.AddDays(-3), //wann ist der Schaden passiert? Schadenhoehe = (decimal)6.50, Vorgang = "SCHADENTEXT 5 am " + DateTime.Now, Hergang = "HERGANGSTEXT 5 am " + DateTime.Now, Schadenort = "Unna", Risiko = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras XYZ123", Bearbeiter = "MeinBearbeiter", Anspruchsteller = null, ClaimSent = false, Gesellschaft = "VANDAL-A", Vermittlerkonto = "STANDARD", Zeichnungsjahr = 2022, License = myVertrag.License }; var terminId = Guid.NewGuid(); var myTermin = new TerminModel { Id = terminId, Amsidnr = TerminPreAmsidnr + terminId, // Zwangsfeld, meine eindeutige interne Termin-Nummer Alarmactive = false, Alarmstatus = true, Bearbeiter = "MeinFirma", Grund = "Vorgang von API:" + DateTime.Now, Info = "Termin geändert:" + DateTime.Now, Gevo = "Antragsversand", // gültige Gevo.GevoBezeichnung, siehe auch /api/v1/BiproGevo?biproService=vertragsservice GevoId = 100001000, // gültige Gevo.GevoId Vorgangtyp = "VERSICHERUNGSFALL-LEISTUNG", Kategorie = "Vorgang", TerminFuer = mySachbearbeiterUser.Username, //welcher "Bearbeiter" ist für diesen Termin zuständig? siehe AmsUsers.Username, (AMS.5-Username)-> nehme Schaden.Bearbeiter ? Art = "Schaden", Key = mySchaden.Amsidnr, AngelegtZeitpunkt = DateTime.Now, Angelegtvon = "Mustermann", Ort = "XXX", S21_F1 = "xx S21_F1", S21_F12 = "XX S21_F12", InfoHtml = "https xxx", License = myVertrag.License, //nehme License vom Vertrag Partner = myKunde.Name1 ?? myKunde.Name, // Name "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerEmail = myKunde.EmailGeschaeftlich ?? myKunde.EmailPrivat, // Email "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird PartnerAdrid = myKunde.Adrid // Adresse "Ansprechpartner" in Termin, welcher bei Email-Antwort als Empfänger genommen wird }; List<LinkObjectModel> myLinkObjecte = new List<LinkObjectModel> { }; var linkId1 = Guid.NewGuid(); myLinkObjecte.Add( new LinkObjectModel { Id = linkId1, Amsidnr = LinkPreAmsidnr + linkId1, // Zwangsfeld, meine eindeutige interne Link-Nummer SId = mySchaden.Amsidnr, SArt = LinkObjectArt.Schaden, // ACHTUNG: Hier ENUM-Ziffer übergeben z.B. 4 Key = myTermin.Amsidnr, KeyArt = LinkObjectArt.Termin, // ACHTUNG: Hier ENUM-Ziffer übergeben z.B. 5 Bearbeiter = "MeinFirma", License = myVertrag.License, //nehme License vom Vertrag }); AmsTransferContext myExport = new AmsTransferContext { Kunden = new List<KundeModel> { myKunde }, Vertraege = new List<VertragModel> { myVertrag }, Schaden = new List<SchadenModel> { mySchaden }, Termine = new List<TerminModel> { myTermin }, LinkObjekte = myLinkObjecte, }; await GetTransferToken(httpClient, baseUriApi, bearerToken, license, myExport, ImportAction.iaNoKDVTUpdate); // Ihre Lizenz/Mandant eintragen und ImportFlags und TransferOptions in Parameter myExport als Rückgabewert zurückerhalten //neuen Termin hochladen: var apiPath = "/api/v1/Ams/Transfer"; var contentStr = Newtonsoft.Json.JsonConvert.SerializeObject(myExport, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var content = new StringContent(contentStr, System.Text.Encoding.UTF8, "application/json"); var requestUri = new Uri(baseUriApi, apiPath); var results2 = await httpClient.PostAsync(requestUri, content); var apiErgebnis = await results2.Content.ReadAsStringAsync(); if (results2.StatusCode != HttpStatusCode.OK && results2.StatusCode != HttpStatusCode.NoContent) throw new Exception("Fehler: " + apiErgebnis); var mySuccessResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<SuccessResponse>(apiErgebnis); if (mySuccessResponse == null || !mySuccessResponse.Success) throw new Exception("Fehler: nicht erfolgreich: " + apiErgebnis); return myTermin.Id.ToString(); }

 

Sachbearbeiter zum User holen

//einen Sachbearbeiter zum User holen public static async Task<AmsUserModel> GetSachbearbeiterUser(HttpClient httpClient, string bearerToken, Uri baseUriApi, string license) { string apiPath = "/api/v1/Sachbearbeiter/User?license=" + license; var requestData = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(baseUriApi, apiPath), }; requestData.Headers.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var results = await httpClient.SendAsync(requestData); var apiErgebnis = await results.Content.ReadAsStringAsync(); //hole meine Sachbearbeiter if (results.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler. Keine Hauptfreischaltung am Benutzer? : " + apiErgebnis); var mySachbearbeiter = Newtonsoft.Json.JsonConvert.DeserializeObject<AmsUserModel>(apiErgebnis); return mySachbearbeiter; }

Termine lesen

  • mit ClientId + ClientSecret und der Kombination aus Name + Passwort über "oauth/token" einen Bearer-Token holen (noch gültige Token nicht erneut holen)

  • alle meine Termine können über "api/v1/Ams/Termin" abgefragt werden

  • JSON-String nach List<TerminModel>

  • Beispiel in C# :

// mit ClientId und ClientSecret und Username+Passwort anmelden und alle meine Termine lesen public static async Task ApiTermineLesen() { HttpClient httpClient = new HttpClient(); Uri baseUriAuth, baseUriApi; string userName, passwort, license; GetServerUrl(out baseUriAuth, out baseUriApi, out userName, out passwort, out license); // meine Servereinstellungen (bearerToken, bearerExpireTimeUTC, refreshToken) = await GetBearerToken(httpClient, baseUriAuth, userName, passwort, bearerToken, bearerExpireTimeUTC, refreshToken, license); // Bearer-Token ermitteln, und Ablaufzeit des BearerToken, und RefreshToken string apiPath = "api/v1/Ams/Termin"; //Beispiel: alle meine Termine abfragen var requestData = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(baseUriApi, apiPath), }; requestData.Headers.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var results = await httpClient.SendAsync(requestData); var apiErgebnis = await results.Content.ReadAsStringAsync(); //Ergebnis der API-Abfrage erhalten if (results.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler: " + apiErgebnis); var myTermineList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TerminModel>>(apiErgebnis); }

Einen Termin lesen und ändern

  • mit ClientId + ClientSecret und der Kombination aus Name + Passwort über "oauth/token" einen Bearer-Token holen (noch gültige Token nicht erneut holen)

  • einen Termin über "api/v1/Ams/Termin/{id}?accessMode=Mitarbeiter" abfragen

  • Bei Terminen ist der AccessMode wichtig.

    • "Mitarbeiter": alle Felder lesen, aber auch Termin-Berechtigung Sender+Empfänger beachten

    • "Admin" immer lesen

  • JSON-String nach Klasse-TerminModel

  • Schlagwörter/TAGS zum Termin werden in Feld-Schlagwoerter gespeichert ( | -getrennt)

  • gewünschte Felder ändern

  • diese geänderten Daten läd man nun als JSON-String mitsamt Bearer-Token an "/api/v1/Ams/Transfer" hoch

  • Beispiel in C# :

// mit ClientId und ClientSecret und Username+Passwort anmelden und einen Termin lesen und ändern public static async Task ApiTerminAendern() { HttpClient httpClient = new HttpClient(); Uri baseUriAuth, baseUriApi; string userName, passwort, license; GetServerUrl(out baseUriAuth, out baseUriApi, out userName, out passwort, out license); // meine Servereinstellungen (bearerToken, bearerExpireTimeUTC, refreshToken) = await GetBearerToken(httpClient, baseUriAuth, userName, passwort, bearerToken, bearerExpireTimeUTC, refreshToken, license); // Bearer-Token ermitteln, und Ablaufzeit des BearerToken, und RefreshToken string guid = "411CCAF3-D003-48C9-A829-xxxxx"; //welchen Termin lesen? Hier Termin.Id eintragen //mit MITARBEITER die Termin-Berechtigung Sender+Empfänger beachten, mit ADMIN alle Felder lesen und immer lesen: string apiPath = "/api/v1/Ams/Termin/" + guid + "?accessMode=Mitarbeiter"; //mit Mitarbeiter alle Felder lesen var requestData = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri(baseUriApi, apiPath), }; requestData.Headers.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var results = await httpClient.SendAsync(requestData); var apiErgebnis = await results.Content.ReadAsStringAsync(); //hole meinen Termin if (results.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler: " + apiErgebnis); var myTermin = Newtonsoft.Json.JsonConvert.DeserializeObject<TerminModel>(apiErgebnis); myTermin.Info = "Termin geändert:" + DateTime.Now; // Felder ändern myTermin.Kategorie = "Aufgabe"; myTermin.Art = "Vertrag"; AmsTransferContext myExport = new AmsTransferContext { Termine = new List<TerminModel> { myTermin }, }; await GetTransferToken(httpClient, baseUriApi, bearerToken, License, myExport, ImportAction.iaNoKDVTUpdate, SendNulls:false); // Ihre Lizenz/Mandant eintragen und ImportFlags und TransferOptions in Parameter myExport als Rückgabewert zurückerhalten //geänderte Werte wieder zurück schreiben: apiPath = "/api/v1/Ams/Transfer"; var contenStr = Newtonsoft.Json.JsonConvert.SerializeObject(myExport, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", String.Format("Bearer {0}", bearerToken)); var content = new StringContent(contenStr, System.Text.Encoding.UTF8, "application/json"); var requestUri = new Uri(baseUriApi, apiPath); var results2 = await httpClient.PostAsync(requestUri, content); apiErgebnis = await results2.Content.ReadAsStringAsync(); if (results2.StatusCode != HttpStatusCode.OK) throw new Exception("Fehler: " + apiErgebnis); var mySuccessResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<SuccessResponse>(apiErgebnis); if (mySuccessResponse == null || !mySuccessResponse.Success) throw new Exception("Fehler: nicht erfolgreich: "+ apiErgebnis); }

Termine zum Kunden/Vertrag/Schaden/Vermittler/Gesellschaft/ Adresse lesen

Die Termine können auch jeweils über ihre Zuordnung gelesen werden:

image-20251202-133353.png
image-20251202-133400.png
image-20251202-133405.png
image-20251202-133410.png
image-20251202-133415.png
image-20251202-133419.png

Anhang

Verweise


Noch Fragen? Ist etwas unklar geblieben?

Sollten Sie noch weitere Fragen zu diesem Thema haben, die in diesem Artikel nicht behandelt oder erklärt wurden, wenden Sie sich gerne über unser Kundenportal an unseren Support.