Die USTID mit JavaScript und Webforms automatisieren

Die EU wird aktuell (DSVGO oder GDPR) viel gescholten. Ein positiver Aspekt unserer Gemeinschaft ist, das der Handel zwischen Mitgliedsländern einfacher von statten geht, sofern man eine gültige USTID (Umsatzsteuer Identifikation) auf beiden Seiten besitzt. Lieferant kann so innergemeinschaftlich ohne den müßigen Vorsteuerabzug bzw. Einzug liefern.

Diese ID wird vom Finanzamt vergeben und muss tagesaktuell geprüft werden, wofür ein EU Portal genannt VIES kostenfrei, bereit steht. Es gibt dort auch einen Webservice mit gutem alten SOAP Ansatz. Etwas was man sich mit JavaScript nicht antun will, um die Client Validierung auszuführen.

Entsprechend beinhaltet die ASP.NET Lösung folgende Aufgaben

  • ASP.NET Formular zur Eingabe der ID
  • JavaScript Funktion für Lostfocus und Ajax Call
  • ASP.NET Service der den SOAP Call kapselt
  • JavaScript + Bootstrap um den Erfolg zu visualisieren

Web Service hinzufügen

Früher, da waren Webservices etwas sehr fixes und definierten die Verbindlichkeit (Contract) per Interface. Entsprechend lassen sich Proxy Klassen per Visual Studio –Add Service Reference- generieren, die als Zugriffsobjekte dienen. Dies allerdings nur wenn der Service per WSDL sich selbst beschreiben kann.

image

Im Visual Studio Web Projekt werden so Verzeichnisse und Dateien angelegt, von denen man die Finger lassen sollte. Der Wizard macht schon.

image

Ab in den Code. Mein Ziel ist ein Service der einen Service kapselt. Da wir nur true oder false auf die Frage “Ustid korrekt”, reicht es eine ASPX Webforms Seite anzulegen. Diese wird bis auf zwei Zeilen komplett geleert. Dies hat noch einen weiteren dramatischen Vorteil.

   1:  <%@ Page Language="VB" AutoEventWireup="false" CodeFile="CheckUstid.aspx.vb"
Inherits="CheckUstid" %>
   2:  <%@ OutputCache Duration="600" VaryByParam="ustid" %>

Wie der Kenner sehen kann, nutze ich hier Caching und reduziere damit die Requests zum EU Server dramatisch. In 600 Sekunden wird sich die Gültigkeit der USTID nicht ändern. Als Parameter wird der QueryString “ustid” übergeben.

Im VB.NET Codebehind wird das Service Objekt instanziiert, der QueryString ausgelesen und zerlegt und dann an den EU Service per checkVat weiter gereicht. Die Rückgabe ist dann eine Zeichenkette true oder false.

   1:  Private Sub cachy_CheckUstid_Load(sender As Object, e As EventArgs)
Handles Me.Load
   2:          Dim ws As New CheckVatServiceReference1.checkVatPortTypeClient
   3:          Dim ustid = Request.QueryString("ustid")
   4:          Dim isvalid As Boolean
   5:          Dim Name As String
   6:          Dim adresse As String
   7:          Dim land As String = Left(ustid, 2)
   8:          Dim id As String = ustid.Substring(2, ustid.Length - 2)
   9:          ws.checkVat(land, id, isvalid, Name, adresse)
  10:          Response.Write(isvalid)

Im HTML Teil der ASPX Seite kommt das Bootstrap Framework in der Version 3 zum Einsatz. Um im Erfolgsfalle die Box grün und im Fehlerfall rot umrandet zu bekommen, hilft das div ustidform. Das Lostfocus Event in JavaScript nennt sich onblur. Dies sollte ausgelöst werden, wenn der Benutzer das Eingabefeld verlässt. Das kann häufiger sein, als man denkt, z.B. wenn vom Browserfenster in ein anderes Programm gewechselt wird.

   1:   <div id="ustidform">
   2:        <label class="control-label col-md-1" 
for="ustid">USTID</label>
   3:           <div class="col-md-2">
   4:             <input class="form-control" id="ustid" 
placeholder="Ustid"
   5:                onblur="CheckUSTID(this);">
   6:          </div>
   7:   </div>

 

Nun kommt der Sadomaso Teil: JavaScript. Wenn man den Code klein hält, geht das gerade noch. Um die ID eines ASP.NET Steuerelements, wie die Textbox, aus JavaScript auch sicher ansteuern zu können, hilft das Attribut ClientIDMode="Static".  Was hier nicht nötig ist, weil nur pur HTML Input Element.
Der HTML Trick sind zwei CSS Klassen aus Bootstrap für Error und success. Diese werden dem DIV hinzugefügt, wenn der ASP.NET Webforms “Service” seine Antwort liefert. Das $ ist die Kurzform für die JQuery Bibliothek.

   1:  function CheckUSTID(input) {
   2:      $.ajax({
   3:          url: "checkustid.aspx",
   4:          data: { "ustid": input.value },
   5:              success: function (result) {
   6:                  if (result == 'False') {
   7:                      $('#ustidform').addClass("has-error");
   8:                      console.log("invalid ustid");
   9:                  }
  10:                  else {
  11:                      $('#ustidform').addClass("has-success");
  12:                      console.log("valid ustid");
  13:                  }
  14:               
  15:              }
  16:          });
  17:  }

War doch nicht so schlimm.

Benutzer tippt, verlässt das Feld mit Tab und tippt weiter und im Hintergrund findet die Prüfung statt, die im Erfolgsfall so aussieht

image

oder so

image

Dann muss die Rechnung mit MWst ausgestellt werden.

Kommentare sind geschlossen