Termin erzeugen
Inhaltsverzeichnis:
- 1 Ausgangssituation
- 2 Lösung
- 3 Vorgehen
- 4 Anhang
- 4.1 Verweise
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:
Anhang
Verweise
Mitarbeiterzugriff über AccessMode https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1451294773/API+anmelden+Entwicklungsphase+und+Produktionsphase#API-Mitarbeiterzugriff-%C3%BCber-AccessMode
BearerToken ermitteln GetBearerToken() https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#BearerToken-ermitteln
Meine Konstanten ForeignTable/LinkAdresseKeyArt Neue-AmsNr https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Meine-Konstanten
Klasse KundeModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-KundeModel
Klasse VertragModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-VertragModel
Klasse VertragSparteModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-VertragSparteModel
Klasse SchadenModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-SchadenModel
Klasse AdressModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-AdresseModel
Klasse BriefModel https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-BriefModel
GetKunde, GetVertrag, GetVertragKunde, GetVertragSparten, GetSchaden, GetSchadenVertrag,
Klasse AmsTransferContext https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#Klasse-AmsTransferContext
SearchObject https://assfinet.atlassian.net/wiki/spaces/KNOW/pages/1460994132/Verweise#SearchObject
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.