{"id":55000294,"date":"2021-12-01T00:00:00","date_gmt":"2022-03-31T21:33:39","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=294"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Seminarverwaltung_IVb_Kunden_und_Seminare","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Seminarverwaltung_IVb_Kunden_und_Seminare\/","title":{"rendered":"Seminarverwaltung IVb: Kunden und Seminare"},"content":{"rendered":"<p><b>In diesem Teil der Artikelreihe zur Seminarverwaltung zeigen wir, wie Sie die Seminare verwalten. Dazu ben&ouml;tigen wir zwei Seiten &#8211; eine zur Anzeige der &Uuml;bersicht aller Seminare und eine zur Anzeige der Details eines einzelnen Seminars beziehungsweise zum Anlegen eines neuen Seminars. Dabei m&uuml;ssen wir noch eine kleine Anpassung am Entity Date Model durchf&uuml;hren, und au&szlig;erdem legen wir noch die Methoden im Hauptfenster an, mit denen Sie die beiden Seiten zur Anzeige und Bearbeitung der Seminare darstellen<\/b><\/p>\n<p>Wir haben diesen Artikel gegen&uuml;ber der urspr&uuml;nglichen Planung dreigeteilt. Den zweiten Teil finden Sie hier vor. Im ersten Teil namens <b>Seminarverwaltung IVa: Kunden und Seminare <\/b>(<b>www.datenbankentwickler.net\/273<\/b>) stellen wir die beiden Seiten zur Anzeige der &Uuml;bersicht und der Details der Kunden vor.<\/p>\n<p>Im dritten Teil zeigen wir unter dem Titel <b>Seminarverwaltung IVc: Kunden und Seminare <\/b>(<b>www.datenbankentwickler.net\/295<\/b>), wie Sie den Kunden Seminare zuordnen und umgekehrt.<\/p>\n<p>Im aktuellen Teil der Artikelreihe schauen wir uns die Seiten zur Darstellung der Seminare in der &Uuml;bersicht und in der Einzelansicht an. Die hier beschriebenen Seiten lauten:<\/p>\n<ul>\n<li><b>SeminareUebersicht.xaml<\/b>: Die &Uuml;bersichtsseite f&uuml;r die Seminare soll eine Liste aller Seminare anzeigen. Hier soll der Benutzer eine Suchfunktion vorfinden sowie Schaltfl&auml;chen zum Anlegen neuer Seminare und zum Bearbeiten oder L&ouml;schen von Seminaren.<\/li>\n<li><b>Seminardetails.xaml<\/b>: Die Detailseite eines Seminars zeigt neben den Details des Seminars auch eine Liste der Kunden an, die dieses Seminar gebucht haben. Sie k&ouml;nnen hier manuell Kunden hinzuf&uuml;gen oder aus der Liste der Teilnehmer entfernen. Au&szlig;erdem finden Sie hier Funktionen, um den Kunden Informationen zum Seminar zuzusenden &#8211; beispielsweise E-Mails mit dem Link zur Teams-Sitzung, in der das Seminar stattfindet, oder f&uuml;r die Aufzeichnung des Seminars.<\/li>\n<\/ul>\n<h2>&Auml;nderungen am Entity Data Model<\/h2>\n<p>Die Entit&auml;ten f&uuml;r die Seminare enthalten ein Datumsfeld. Damit dieses beim Speichern in der Datenbank korrekt verarbeitet werden kann, f&uuml;gen wir der Methode <b>OnModelCreating <\/b>eine Anweisung hinzu, welche den Datentyp f&uuml;r die Eigenschaft <b>Seminartermin <\/b>auf <b>datetime2 <\/b>festlegt:<\/p>\n<pre>Protected Overrides Sub OnModelCreating(modelBuilder<span style=\"color:blue;\"> As <\/span>DbModelBuilder)\r\n     MyBase.OnModelCreating(modelBuilder)\r\n     ...\r\n     modelBuilder.Entity(Of Seminar).        Property(Function(s) s.Seminartermin).HasColumnType(\"datetime2\").HasPrecision(0)\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Aufruf der Seminar&uuml;bersicht &uuml;ber das Ribbon<\/h2>\n<p>Im Artikel <b>Seminarverwaltung II: Ribbon und Frame <\/b>(<b>www.datenbankentwickler.net\/272<\/b>) haben wir bereits den Aufbau des Ribbons f&uuml;r diese Anwendung beschrieben. Was noch fehlt, sind die Ereignismethoden, die durch die Schaltfl&auml;chen <b>btnSeminaruebersicht <\/b>und <b>btnSeminaranlegen <\/b>ausgel&ouml;st werden. Mit diesen Schaltfl&auml;chen wollen wir die noch zu erstellenden Seiten <b>SeminareUebersicht <\/b>und <b>Seminardetails <\/b>aufrufen. Die Methode, die durch die Schaltfl&auml;che <b>btnSeminaruebersicht <\/b>ausgel&ouml;st werden soll, erstellt eine neue Seite auf Basis des <b>Page<\/b>-Elements <b>SeminareUebersicht <\/b>und &uuml;bergibt dieser einen Verweis auf das <b>Frame<\/b>-Objekt und auf den Datenbankkontext aus <b>dbContext<\/b>. Dann weist sie der Eigenschaft <b>Content <\/b>des <b>Frame<\/b>-Elements das neue <b>Page<\/b>-Element zu:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSeminaruebersicht_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>pgeSeminaruebersicht<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> SeminareUebersicht(fra, dbContext)\r\n     fra.Content = pgeSeminaruebersicht\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Aufruf der Seite zum Anlegen eines neuen Seminars &uuml;ber das Ribbon<\/h2>\n<p>&Auml;hnlich sieht der Aufruf f&uuml;r die Schaltfl&auml;che <b>btnSeminarAnlegen <\/b>aus:<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>btnSeminarAnlegen_Click(sender<span style=\"color:blue;\"> As Object<\/span>, e<span style=\"color:blue;\"> As <\/span>RoutedEventArgs)\r\n     <span style=\"color:blue;\">Dim <\/span>pgeSeminardetails<span style=\"color:blue;\"> As <\/span><span style=\"color:blue;\">New<\/span> Seminardetails(fra, dbContext)\r\n     fra.Content = pgeSeminardetails\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<h2>Validierung der Seminare bei der Eingabe<\/h2>\n<p>Bevor wir die Benutzeroberfl&auml;che und die Anwendungslogik f&uuml;r das Anlegen neuer Seminare und das Bearbeiten vorhandener Seminare kreieren, ben&ouml;tigen wir noch eine Klasse, welche die Validierungsregeln f&uuml;r die <b>Seminar<\/b>-Elemente enth&auml;lt. Daf&uuml;r legen wir eine Klasse namens <b>Seminar.vb <\/b>an, in der wir die Schnittstelle <b>IDataErrorInfo <\/b>implementieren. Diese enth&auml;lt die beiden Eigenschaften <b>Item <\/b>und <b>Error<\/b>. F&uuml;r die Eigenschaft <b>Item <\/b>hinterlegen wir die Validierungsregeln, die Eigenschaft Error brauchen wir nicht anzupassen.<\/p>\n<p>Die beiden Felder <b>Titel <\/b>und <b>Inhalt <\/b>d&uuml;rfen einfach nicht leer sein, was wir durch die Pr&uuml;fung des Inhalts dieser Felder mit <b>String.IsNullOrEmpty <\/b>pr&uuml;fen. Der Inhalt des Feldes <b>Preis<\/b> darf nicht leer sein und weder einen negativen noch einen nicht-numerischen Wert enthalten. Das Feld <b>Seminartermin <\/b>darf ebenfalls nicht leer sein und muss ein Datum enthalten:<\/p>\n<pre>Imports System.ComponentModel\r\n<span style=\"color:blue;\">Public Class<\/span> Seminar\r\n     Implements IDataErrorInfo\r\n     Default Public ReadOnly Property Item(columnName<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span> Implements IDataErrorInfo.Item\r\n         Get\r\n             <span style=\"color:blue;\">Dim <\/span>strErrorMessage<span style=\"color:blue;\"> As String<\/span> = \"\"\r\n             Select Case columnName\r\n                 <span style=\"color:blue;\">Case <\/span>\"Titel\"\r\n                     <span style=\"color:blue;\">If <\/span>(String.IsNullOrEmpty(Titel))<span style=\"color:blue;\"> Then<\/span>\r\n                         strErrorMessage = \"Bitte geben Sie einen Titel ein.\"\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Case <\/span>\"Inhalt\"\r\n                     <span style=\"color:blue;\">If <\/span>(String.IsNullOrEmpty(Inhalt))<span style=\"color:blue;\"> Then<\/span>\r\n                         strErrorMessage = \"Bitte geben Sie einen Inhalt ein.\"\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Case <\/span>\"Preis\"\r\n                     <span style=\"color:blue;\">If <\/span>(Preis &lt; 0 Or String.IsNullOrEmpty(Preis))<span style=\"color:blue;\"> Then<\/span>\r\n                         strErrorMessage = \"Bitte geben Sie einen Preis ein.\"\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n                 <span style=\"color:blue;\">Case <\/span>\"Seminartermin\"\r\n                     <span style=\"color:blue;\">If <\/span>(String.IsNullOrEmpty(Seminartermin) Or <span style=\"color:blue;\">Not<\/span> IsDate(Seminartermin))<span style=\"color:blue;\"> Then<\/span>\r\n                         strErrorMessage = \"Bitte geben Sie einen Seminartermin ein.\"\r\n                     <span style=\"color:blue;\">End If<\/span>\r\n             <span style=\"color:blue;\">End Select<\/span>\r\n             Return strErrorMessage\r\n         End Get\r\n     End Property\r\n     <span style=\"color:blue;\">Public <\/span>ReadOnly Property [Error]<span style=\"color:blue;\"> As String<\/span> Implements IDataErrorInfo.Error\r\n         Get\r\n             ''Throw <span style=\"color:blue;\">New<\/span> NotImplementedException()\r\n         End Get\r\n     End Property\r\n<span style=\"color:blue;\">End Class<\/span><\/pre>\n<h2>Detailseite zum Anlegen und Bearbeiten von Seminaren<\/h2>\n<p>Damit gehen wir gleich &uuml;ber zu der Seite, mit der wir neue Seminare anlegen und vorhandene Seminare bearbeiten wollen. Im Teil mit den <b>Resources <\/b>f&uuml;r das <b>Page<\/b>-Element definieren wir wieder einige allgemeine Eigenschaften f&uuml;r die Steuerelemente wie <b>Margin <\/b>und <b>Padding<\/b> f&uuml;r die Elemente <b>DatePicker <\/b>und <b>Button<\/b>. F&uuml;r das Element <b>TextBox <\/b>legen wir au&szlig;erdem noch einen Wert f&uuml;r das Attribut <b>Validation.ErrorTemplate <\/b>fest, mit dem wir das Aussehen der <b>TextBox<\/b>-Elemente f&uuml;r den Fall definieren, dass der Inhalt nicht erfolgreich validiert werden konnte. Diese Teile finden Sie im Beispielprojekt, wir haben sie an dieser Stelle aus Platzgr&uuml;nden ausgespart:<\/p>\n<pre>&lt;Page x:Class=\"Seminardetails\"... Title=\"Seminardetails\"&gt;\r\n     &lt;Page.Resources&gt;\r\n         ...<\/pre>\n<p>Ein weiteres <b>Style<\/b>-Element definiert die Regeln, nach denen <b>Button<\/b>-Elemente, die diese Regel aufnehmen, deaktiviert werden sollen. Diese Regeln richten sich nach der Validierung, genauer danach, ob die Validierung f&uuml;r ein bestimmtes Steuerelement fehlgeschlagen ist.<\/p>\n<pre>     &lt;Style x:Key=\"EnableOnValidation\" TargetType=\"{x:Type Button}\"&gt;\r\n         &lt;Style.Triggers&gt;\r\n             &lt;DataTrigger Binding=\"{Binding ElementName=txtTitel, Path=(Validation.HasError)}\" Value=\"True\"&gt;\r\n                 &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n             &lt;\/DataTrigger&gt;\r\n             &lt;DataTrigger Binding=\"{Binding ElementName=txtInhalt, Path=(Validation.HasError)}\" Value=\"True\"&gt;\r\n                 &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n             &lt;\/DataTrigger&gt;\r\n             &lt;DataTrigger Binding=\"{Binding ElementName=txtPreis, Path=(Validation.HasError)}\" Value=\"True\"&gt;\r\n                 &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n             &lt;\/DataTrigger&gt;\r\n             &lt;DataTrigger Binding=\"{Binding ElementName=txtSeminartermin, Path=(Validation.HasError)}\"                     Value=\"True\"&gt;\r\n                 &lt;Setter Property=\"IsEnabled\" Value=\"False\"&gt;&lt;\/Setter&gt;\r\n             &lt;\/DataTrigger&gt;\r\n         &lt;\/Style.Triggers&gt;\r\n     &lt;\/Style&gt;\r\n&lt;\/Page.Resources&gt;<\/pre>\n<p>Anschlie&szlig;end folgt die Definition f&uuml;r die <b>RowDefinition<\/b>&#8211; und die <b>ColumnDefinition<\/b>-Elemente f&uuml;r das <b>Grid<\/b> dieses <b>Page<\/b>-Elements, die wir hier ebenfalls nicht abbilden.<\/p>\n<h2>Steuerelemente der Seite Seminardetails.xaml<\/h2>\n<p>Interessanter wird es wieder bei der Definition der Steuerelemente der Seite <b>Seminardetails.xaml<\/b>, die wie in Bild 1 aussehen sollen. Hier finden wir zwei Spalten, von denen die erste jeweils das <b>Label<\/b>-Element aufnimmt und die zweite die eigentlichen gebundenen Steuerelemente.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2021_06\/pic_294_001.png\" alt=\"Entwurf der Seite zur Anzeige der Seminardetails\" width=\"674,627\" height=\"221,3062\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf der Seite zur Anzeige der Seminardetails<\/span><\/b><\/p>\n<p>Damit die Steuerelemente die Werte des jeweiligen Datensatzes beziehungsweise des jeweiligen Elements des Entity Data Models anzeigen, werden wir im Anschluss das Code behind-Modul mit einer Eigenschaft namens <b>AktuellesSeminar <\/b>f&uuml;llen, welches wir beim Anlegen eines neuen Seminars oder beim Bearbeiten eines vorhandenen Seminars jeweils mit dem entsprechenden Element f&uuml;llen.<\/p>\n<p>F&uuml;r die zu bindende Eigenschaft geben wir daher einen Ausdruck wie <b>{Binding -AktuellesSeminar.ID, Mode=TwoWay} <\/b>an &#8211; hier f&uuml;r das Binden an das Feld <b>ID<\/b>. F&uuml;r die Elemente mit Validierung definieren wir zus&auml;tzlich noch das Attribut <b>ValidatesOnDataErrors <\/b>wie in <b>{Binding AktuellesSeminar.Titel, Mode=TwoWay, ValidatesOnDataErrors=True}<\/b>.<\/p>\n<p>Die ID bilden wir in einem <b>TextBox<\/b>-Element ab, das wir mit dem Wert <b>False <\/b>f&uuml;r das Attribut <b>IsEnabled <\/b>f&uuml;r die Eingabe deaktivieren. Die Felder <b>Titel <\/b>und <b>Inhalt <\/b>werden jeweils mit <b>TextBox<\/b>-Elementen dargestellt, die &uuml;ber das Attribut <b>Text <\/b>an diese Felder gebunden sind.<\/p>\n<p>F&uuml;r das Feld <b>Preis <\/b>legen wir noch zur Anzeige des Wertes als W&auml;hrung noch ein spezielles Format fest, n&auml;mlich <b>StringFormat<\/b>: <b>{Binding -AktuellesSeminar.Preis, Mode=TwoWay, ValidatesOnDataErrors=True, StringFormat=C}<\/b>. <\/p>\n<p>Das Datum zeigen wir mit einem <b>DatePicker<\/b>-Steuerelement an, die im Feld <b>Seminartermin <\/b>enthaltene Uhrzeit liefern wir mit einer separaten TextBox, die wir ebenfalls an das Feld <b>Seminartermin <\/b>binden. Allerdings legen wir hier mit <b>StringFormat=&#8221;t&#8221; <\/b>fest, dass nur die Uhrzeit angezeigt wird.<\/p>\n<p>Die gebundenen Felder definieren wir insgesamt wie folgt:<\/p>\n<pre>     &lt;Grid&gt;\r\n         ...\r\n         &lt;Label Content=\"ID:\" Grid.Column=\"0\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtID\" Grid.Column=\"1\" HorizontalAlignment=\"Left\" Text=\"{Binding -AktuellesSeminar.ID, Mode=TwoWay}\" Width=\"50\" IsEnabled=\"False\" BorderBrush=\"Transparent\" \/&gt; \r\n         &lt;Label Content=\"Titel:\" Grid.Column=\"0\" Grid.Row=\"1\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtTitel\" Grid.Column=\"1\" Grid.Row=\"1\" HorizontalAlignment=\"Stretch\" -Text=\"{Binding AktuellesSeminar.Titel, Mode=TwoWay, ValidatesOnDataErrors=True}\" \/&gt;\r\n         &lt;Label Content=\"Inhalt:\" Grid.Row=\"2\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtInhalt\" Grid.Column=\"1\" Grid.Row=\"2\" HorizontalAlignment=\"Stretch\" -Text=\"{Binding AktuellesSeminar.Inhalt, Mode=TwoWay, ValidatesOnDataErrors=True}\" \/&gt;\r\n         &lt;Label Content=\"Preis:\" Grid.Row=\"3\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtPreis\" Grid.Column=\"1\" Grid.Row=\"3\" Width=\"100\" Text=\"{Binding -AktuellesSeminar.Preis, Mode=TwoWay, ValidatesOnDataErrors=True, StringFormat=C}\" \/&gt;\r\n         &lt;Label Content=\"Seminartermin:\" Grid.Row=\"4\" \/&gt;\r\n         &lt;DatePicker x:Name=\"dpSeminartermin\" Grid.Column=\"1\" Grid.Row=\"4\" Width=\"140\" -HorizontalAlignment=\"left\" SelectedDate=\"{Binding AktuellesSeminar.Seminartermin, Mode=TwoWay, ValidatesOnDataErrors=True, TargetNullValue=''''}\"&gt;&lt;\/DatePicker&gt;\r\n        &lt;Label Content=\"Uhrzeit:\" Grid.Row=\"5\" \/&gt;\r\n         &lt;TextBox x:Name=\"txtUhrzeit\" Grid.Column=\"1\" Grid.Row=\"5\" Width=\"140\" HorizontalAlignment=\"left\" Text=\"{Binding AktuellesSeminar.Seminartermin, Mode=TwoWay, ValidatesOnDataErrors=True, TargetNullValue='''', StringFormat=''t''}\"&gt;&lt;\/TextBox&gt;<\/pre>\n<h2>Schaltfl&auml;chen zum Speichern und zum Verwerfen eines Seminars<\/h2>\n<p>Damit fehlen noch die beiden Schaltfl&auml;chen, die wir in einem <b>StackPanel<\/b>-Element nebeneinander anordnen. Die Schaltfl&auml;che <b>btnSpeichern <\/b>soll nur aktiviert werden, wenn die in der weiter oben definierten statischen Ressource <b>EnableOnValidation<\/b> gestellten Bedingungen erf&uuml;llt sind.<\/p>\n<p>Deshalb legen wir im <b>Style<\/b>-Element der Schaltfl&auml;che mit dem <b>BasedOn <\/b>fest, das die dortigen Bedingungen f&uuml;r den Wert des Attributs <b>Enabled <\/b>gepr&uuml;ft werden sollen. Die beiden Schaltfl&auml;chen enthalten wiederum jeweils ein <b>StackPanel<\/b>-Element, welches nebeneinander das Icon und den Schaltfl&auml;chentext beinhaltet:<\/p>\n<pre>         &lt;StackPanel Orientation=\"Horizontal\" Grid.Row=\"6\" Grid.ColumnSpan=\"4\" &gt;\r\n             &lt;Button x:Name=\"btnSpeichern\" Click=\"btnSpeichern_Click\"&gt;\r\n                 &lt;Button.Style&gt;\r\n                     &lt;Style TargetType=\"{x:Type Button}\" BasedOn=\"{StaticResource EnableOnValidation}\"&gt;\r\n                         &lt;Style.Setters&gt;\r\n                             &lt;Setter Property=\"Margin\" Value=\"2\"&gt;&lt;\/Setter&gt;\r\n                         &lt;\/Style.Setters&gt;\r\n                     &lt;\/Style&gt;\r\n                 &lt;\/Button.Style&gt;\r\n                 &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n                     &lt;Image Source=\"images\/ok.png\" Width=\"24\" Height=\"24\"&gt;&lt;\/Image&gt;\r\n                     &lt;Label&gt;OK&lt;\/Label&gt;\r\n                 &lt;\/StackPanel&gt;\r\n             &lt;\/Button&gt;\r\n             &lt;Button x:Name=\"btnVerwerfen\" Click=\"btnVerwerfen_Click\"&gt;\r\n                 &lt;StackPanel Orientation=\"Horizontal\"&gt;\r\n                     &lt;Image Source=\"images\/delete.png\" Height=\"24\" Width=\"24\"&gt;&lt;\/Image&gt;\r\n                     &lt;Label&gt;Verwerfen&lt;\/Label&gt;\r\n                 &lt;\/StackPanel&gt;\r\n             &lt;\/Button&gt;\r\n         &lt;\/StackPanel&gt;\r\n     &lt;\/Grid&gt;\r\n&lt;\/Page&gt;<\/pre>\n<h2>Anwendungslogik in der Datei Seminarverwaltung.xaml.vb<\/h2>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000294\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000294?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000294\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Teil der Artikelreihe zur Seminarverwaltung zeigen wir, wie Sie die Seminare verwalten. Dazu ben&ouml;tigen wir zwei Seiten &#8211; eine zur Anzeige der &Uuml;bersicht aller Seminare und eine zur Anzeige der Details eines einzelnen Seminars beziehungsweise zum Anlegen eines neuen Seminars. Dabei m&uuml;ssen wir noch eine kleine Anpassung am Entity Date Model durchf&uuml;hren, und au&szlig;erdem legen wir noch die Methoden im Hauptfenster an, mit denen Sie die beiden Seiten zur Anzeige und Bearbeitung der Seminare darstellen<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[662021,66062021,44000027,44000004],"tags":[],"yst_prominent_words":[],"class_list":["post-55000294","post","type-post","status-publish","format-standard","hentry","category-662021","category-66062021","category-Excel_programmieren","category-Loesungen"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000294"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000294\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000294"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}