Anwendung auf TSD und Kommunikation mit 1C: Enterprise 8.3 über HTTP-Service. Teil 2 (API-Implementierung auf der 1C-Seite)

1. Die Wahl der Austauschmethode. API-Beschreibung.

2. Implementierung der API auf der Seite von 1C.


3. Anwendung auf TSD und Kommunikation mit 1C: Enterprise 8.3 über HTTP-Service. Teil 3 (BroadcastReceiver. Daten abrufen)

Es gibt viele Handbücher zum Erstellen eines HTTP-Dienstes im Internet. Daher werde ich die Implementierung sofort beschreiben. Unser Service besteht aus drei URL-Mustern:

  • Verzeichnisse - / v1 / kataloge / {Verzeichnis} / {Aktion}
  • Dokumente - / v1 / documents / {Document} / {Action}
  • Dienste - / v1 / services / {Aktion}


Um den Artikel nicht aufzublasen, betrachten Sie das Beispiel mit dem Nachschlagewerk "Nomenklatur". 1C erlaubt uns nicht, unterschiedliche Pfade für HTTP-Methoden zu haben. Daher lautet das URL-Muster (/ v1 / catalog / wares / {Action}, für das zwei HTTP-Methoden GET, POST definiert sind. In anderen Mustern verwenden wir auch GET, POST.
  • / v1 - ermöglicht es uns, in Zukunft mehrere API-Optionen zu unterstützen. Wir können die URL-Vorlage v_V2_Directories und dementsprechend den Pfad hinzufügen, der mit / v2 beginnen soll
  • / kataloge / wares / - kataloge integriert alle verzeichnisse. Dies ist der statische Teil des Weges. Waren entsprechen dem Nomenklaturverzeichnis. 1C fügt "Waren" in die URL- Parameter ein . Es sollte beachtet werden, dass wir selbst Wege finden. Und dann überlegen wir uns auch, wie wir sie in 1C selbst verarbeiten können
  • {Action} - hier übergeben wir, was wir von 1C erhalten möchten. Zum Beispiel getByParam oder getAll


Unter dem Gesichtspunkt der Nachrüstung sieht baseUrl ungefähr so ​​aus: "http://192.168.0.1/unf/hs/inntsd/v1/" wobei:

  • 192.168.0.1 - Server, auf dem der HTTP-Dienst veröffentlicht wird
  • / unf - 1C Datenbankname
  • / hs - statischer Teil für HTTP-Dienste
  • / inntsd ist die Stamm-URL für den gesamten Dienst. Rufen Sie an, wie wir wollen


Betrachten Sie das Verfahren zum Empfangen einer Anfrage.

  Get() //  .       Get   //Post  = (, "GET"); //middleware.      .  = ();     = ();  (, )   = (); //   {}  = (); //   {}  = (); //     URL.      .URL  =(); //      .     Firefox ,  Google Chrome   =  ; .("", ); .("", ); .("", ); .("", ); .("", );  ;   ()  = ..("Content-Type");  =  ; .("", ); //     "Content-Type","content-type", "Content-type"   =    = ..("content-type"); ;   =    = ..("ontent-type"); ;   =   .("", );  ; ;  ((), "multipart/form-data") > 0   = ();  ((), "application/json") > 0   = JSON();  .("", ); ;  ;  //      JSON    .     .  JSON(); JSON =  JSON;  = .(); JSON.();   = JSON(JSON,,"sampleDate",JSON.ISO); .("", );   =  ; .("", ); ; JSON.();  ;  


In diesem Beispiel gibt es viele schlechte Tipps. Beispielsweise muss Verzeichnisname, Aktion in eine Aufzählung oder ein neues Verzeichnis mit Übereinstimmungen konvertiert werden. Aber wie elegant es ist, in der Beilage umzusetzen, habe ich noch nicht entschieden.

Lassen Sie uns die getByParam- Anfrage analysieren . Vollständige Adresse: / v1 / kataloge / wares / getByParam? Prop = byCode & compare = ähnlich & searchString = 239

Finden Sie heraus, mit welchem ​​Verzeichnis wir arbeiten.
  ()  . = ""   = ();  . = ""   = ()   = (100, "    " + .); ;  ;  


Holen Sie sich die Anforderungsmethode. Und wir überprüfen, ob alle Parameter an die Methode angehängt sind. Hier sollte ein tiefer Check beachtet werden, den ich nicht mache. Da schreibe ich sowohl für 1C als auch für Android.
  ()  . = ""   = ..("prop");  = ..("comparison");  = ..("searchString");  ( = )  ( = )  ( = )   = (103, "     /      ");  ; ;  = (, , );  = (0, ""); .("payload", );  . = ""   = ();  = (0, ""); .("payload", );   = ("102", "     " + .); ;  ;  


Wenn alles in Ordnung ist. Wir bereiten die Daten für die Antwort vor.
  (, , )  =  ;  = "  | .  , | .  , | .  , | .  , | ..   | | .   | |  . |  {}";  = "";  () = ("byCode")   = ".";  () = ("byArticle")   = ".";  () = ("byName")   = "."; ;  () = ("equally")   =  + " = &";  () = ("similarly")   =  + "  &"; ;  = (, "{}", ); . = ;  () = ("similarly")   = "%" +  + "%"; ; .("", );  = .().();  = .();  =  ;       .( ("code,article, name, fullName, unit", ., ., ., ., .)); ;  =  ; .("quantity", ); .("wares", );  ;  


Und schließlich vereinen wir alles miteinander. Wir setzen dies in JSON und senden die Antwort.
  = (0, ""); .("payload", );  ;  (, )   = (); HTTP =  HTTP(); HTTP.["Content-Type"] = "application/json; charset=utf-8"; //   json UTF-8 // ToDo CORS //HTTP.["Access-Control-Allow-Origin"] = ; //HTTP.["Access-Control-Allow-Credentials"] = "true"; HTTP.();  HTTP;   () JSON =  JSON(, .,,,,,,,);  =  JSON; . = ; .(JSON);  =  JSON; . = JSON.; . = JSON.ISO; JSON(, , );  = .();  ;  


Und wir geben alles an den Kunden.
  = (200, )  ; 


Egal was wir von 1C bekommen haben. Wir versuchen immer richtig zu antworten.
  (, )  =  ;  =  (); .("code", ); .("description", ); .("result", ); .("payload",  );  ;  


Das ist alles. Alle anderen Methoden werden auf ähnliche Weise implementiert. Stellen Sie Fragen. Ich werde gerne antworten.

Source: https://habr.com/ru/post/de473546/


All Articles