Aplicativo no TSD e comunicação com 1C: Enterprise 8.3 através do serviço HTTP. Parte 2 (implementação da API no lado 1C)

1. A escolha do método de troca. Descrição da API.

2. Implementação da API ao lado de 1C.


3. Aplicação no TSD e comunicação com 1C: Enterprise 8.3 através do serviço HTTP. Parte 3 (BroadcastReceiver. Obtendo dados)

Existem muitos manuais sobre como criar um serviço HTTP na Internet. Portanto, descreverei imediatamente a implementação. Nosso serviço consiste em três padrões de URL:

  • Diretórios - / v1 / catalogs / {Diretório} / {Ação}
  • Documentos - / v1 / documents / {Document} / {Action}
  • Serviços - / v1 / services / {Ação}


Para não inflar o artigo, considere o exemplo com o livro de referência "Nomenclatura". 1C não nos permite ter caminhos diferentes para os métodos HTTP. Portanto, o padrão da URL será (/ v1 / catalogs / wares / {Action}, para o qual dois métodos HTTP GET, POST são definidos. Em outros padrões, também usaremos GET, POST.
  • / v1 - nos permitirá suportar várias opções de API no futuro. Poderemos adicionar o modelo de URL v_V2_Directories e, consequentemente, o caminho para começar com / v2
  • / catalogs / wares / - catalogs integra todos os diretórios. Esta é a parte estática do caminho. wares está em conformidade com o Diretório de Nomenclatura. 1C colocará "mercadorias" nos parâmetros de URL. Note-se que nós mesmos criamos maneiras. E então também pensamos em como processá-los em 1C
  • {Ação} - aqui passaremos o que queremos obter do 1C. Por exemplo, getByParam ou getAll


Do ponto de vista do Retrofit, o baseUrl será semelhante a "http://192.168.0.1/unf/hs/inntsd/v1/" que:

  • 192.168.0.1 - Servidor em que o serviço HTTP é publicado
  • / unf - nome do banco de dados 1C
  • / hs - parte estática para serviços HTTP
  • / inntsd é a URL raiz de todo o serviço. Ligue como quisermos


Considere o procedimento para receber uma solicitação.

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


Existem muitas dicas ruins neste exemplo. Por exemplo, Nome do Diretório, Ação precisa ser convertido em uma enumeração ou em um novo diretório com correspondências. Mas como é elegante implementar no suplemento, ainda não decidi.

Vamos analisar a solicitação getByParam . Endereço completo: / v1 / catalogs / wares / getByParam? Prop = byCode & Comparação = similar & searchString = 239

Descubra em qual diretório estamos trabalhando.
  ()  . = ""   = ();  . = ""   = ()   = (100, "    " + .); ;  ;  


Obtenha o método de solicitação. E verificamos que todos os parâmetros estão anexados ao método. Aqui deve notar-se uma verificação profunda que não. Desde que eu estou escrevendo para 1C e Android.
  ()  . = ""   = ..("prop");  = ..("comparison");  = ..("searchString");  ( = )  ( = )  ( = )   = (103, "     /      ");  ; ;  = (, , );  = (0, ""); .("payload", );  . = ""   = ();  = (0, ""); .("payload", );   = ("102", "     " + .); ;  ;  


Se tudo estiver bem. Preparamos os dados para a resposta.
  (, , )  =  ;  = "  | .  , | .  , | .  , | .  , | ..   | | .   | |  . |  {}";  = "";  () = ("byCode")   = ".";  () = ("byArticle")   = ".";  () = ("byName")   = "."; ;  () = ("equally")   =  + " = &";  () = ("similarly")   =  + "  &"; ;  = (, "{}", ); . = ;  () = ("similarly")   = "%" +  + "%"; ; .("", );  = .().();  = .();  =  ;       .( ("code,article, name, fullName, unit", ., ., ., ., .)); ;  =  ; .("quantity", ); .("wares", );  ;  


E, finalmente, unimos tudo. Colocamos isso no JSON e enviamos a resposta.
  = (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(, , );  = .();  ;  


E nós damos tudo ao cliente.
  = (200, )  ; 


Independentemente do que obtivemos do 1C. Nós sempre tentamos responder corretamente.
  (, )  =  ;  =  (); .("code", ); .("description", ); .("result", ); .("payload",  );  ;  


Só isso. Todos os outros métodos são implementados de maneira semelhante. Faça perguntas, terei prazer em responder.

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


All Articles