Application sur TSD et communication avec 1C: Enterprise 8.3 via HTTP-Service. Partie 2 (implémentation de l'API du côté 1C)

1. Le choix de la méthode d'échange. Description de l'API.

2. Implémentation de l'API côté 1C.


3. Application sur TSD et communication avec 1C: Enterprise 8.3 via HTTP-Service. Partie 3 (BroadcastReceiver. Obtention de données)

Il existe de nombreux manuels sur la façon de créer un service HTTP sur Internet. Par conséquent, je décrirai immédiatement la mise en œuvre. Notre service se compose de trois modèles d'URL:

  • Répertoires - / v1 / catalogues / {Répertoire} / {Action}
  • Documents - / v1 / documents / {Document} / {Action}
  • Services - / v1 / services / {Action}


Afin de ne pas gonfler l'article, considérons l'exemple avec le livre de référence "Nomenclature". 1C ne nous permet pas d'avoir des chemins différents pour les méthodes HTTP. Par conséquent, le modèle d'URL sera (/ v1 / catalogs / wares / {Action}, pour lequel deux méthodes HTTP GET, POST sont définies. Dans d'autres modèles, nous utiliserons également GET, POST.
  • / v1 - nous permettra de prendre en charge plusieurs options d'API à l'avenir. Nous pourrons ajouter le modèle d'URL v_V2_Directories et en conséquence le chemin pour commencer avec / v2
  • / catalogs / wares / - catalogs intègre tous les répertoires. C'est la partie statique du chemin. les marchandises sont conformes au répertoire de la nomenclature. 1C mettra des "marchandises" dans les paramètres d' URL. Il convient de noter que nous trouvons nous-mêmes des moyens. Et puis nous pensons aussi comment les traiter nous-mêmes en 1C
  • {Action} - ici nous passerons ce que nous voulons obtenir de 1C. Par exemple getByParam ou getAll


Du point de vue Retrofit, baseUrl ressemblera à quelque chose comme ceci "http://192.168.0.1/unf/hs/inntsd/v1/" où:

  • 192.168.0.1 - Serveur sur lequel le service HTTP est publié
  • / unf - nom de la base de données 1C
  • / hs - partie statique pour les services HTTP
  • / inntsd est l'URL racine de l'ensemble du service. Appelez comme nous voulons


Considérez la procédure de réception d'une demande.

  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.();  ;  


Il y a beaucoup de mauvais conseils dans cet exemple. Par exemple, Nom du répertoire, Action doit être converti en une énumération ou un nouveau répertoire avec des correspondances. Mais combien il est élégant de mettre en œuvre dans le supplément, je n'ai pas encore décidé.

Analysons la demande getByParam . Adresse complète: / v1 / catalogues / wares / getByParam? Prop = byCode & comparison = similairement & searchString = 239

Découvrez avec quel répertoire nous travaillons.
  ()  . = ""   = ();  . = ""   = ()   = (100, "    " + .); ;  ;  


Obtenez la méthode de demande. Et nous vérifions que tous les paramètres sont attachés à la méthode. Ici, il convient de noter une vérification approfondie que je ne fais pas. Depuis que j'écris pour 1C et Android.
  ()  . = ""   = ..("prop");  = ..("comparison");  = ..("searchString");  ( = )  ( = )  ( = )   = (103, "     /      ");  ; ;  = (, , );  = (0, ""); .("payload", );  . = ""   = ();  = (0, ""); .("payload", );   = ("102", "     " + .); ;  ;  


Si tout va bien. Nous préparons les données pour la réponse.
  (, , )  =  ;  = "  | .  , | .  , | .  , | .  , | ..   | | .   | |  . |  {}";  = "";  () = ("byCode")   = ".";  () = ("byArticle")   = ".";  () = ("byName")   = "."; ;  () = ("equally")   =  + " = &";  () = ("similarly")   =  + "  &"; ;  = (, "{}", ); . = ;  () = ("similarly")   = "%" +  + "%"; ; .("", );  = .().();  = .();  =  ;       .( ("code,article, name, fullName, unit", ., ., ., ., .)); ;  =  ; .("quantity", ); .("wares", );  ;  


Et enfin, nous unissons tout ensemble. Nous mettons cela dans JSON et envoyons la réponse.
  = (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(, , );  = .();  ;  


Et nous donnons tout cela au client.
  = (200, )  ; 


Indépendamment de ce que nous avons obtenu de 1C. Nous essayons toujours de répondre correctement.
  (, )  =  ;  =  (); .("code", ); .("description", ); .("result", ); .("payload",  );  ;  


C’est tout. Toutes les autres méthodes sont implémentées de manière similaire. Posez des questions, je me ferai un plaisir d'y répondre.

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


All Articles