1. Pilihan metode pertukaran. Deskripsi API.2. Implementasi API di sisi 1C.
3.
Aplikasi pada TSD dan komunikasi dengan 1C: Enterprise 8.3 melalui HTTP-Service. Bagian 3 (BroadcastReceiver. Mendapatkan Data)Ada banyak manual tentang cara membuat layanan HTTP di Internet. Karena itu, saya akan segera menggambarkan implementasinya. Layanan kami terdiri dari tiga pola URL:
- Direktori - / v1 / catalogs / {Directory} / {Action}
- Dokumen - / v1 / dokumen / {Dokumen} / {Aksi}
- Layanan - / v1 / layanan / {Aksi}
Agar tidak mengembang artikel, pertimbangkan contoh dengan buku referensi "Nomenklatur". 1C tidak memungkinkan kita untuk memiliki jalur yang berbeda untuk metode HTTP. Oleh karena itu, pola URL akan menjadi (/ v1 / catalogs / wares / {Action}, di mana dua metode HTTP DAPATKAN, POST didefinisikan. Dalam pola lain kita juga akan menggunakan GET, POST.
- / v1 - akan memungkinkan kami untuk mendukung beberapa opsi API di masa mendatang. Kami akan dapat menambahkan templat URL v_V2_Directories dan sesuai jalur untuk memulai dengan / v2
- / catalogs / wares / - katalog mengintegrasikan semua direktori. Ini adalah bagian yang statis. wares sesuai dengan Direktori Nomenklatur. 1C akan menempatkan "barang" dalam parameter URL. Perlu dicatat bahwa kita memiliki cara sendiri. Dan kemudian kita juga berpikir bagaimana memprosesnya sendiri di 1C
- {Aksi} - di sini kita akan melewati apa yang ingin kita dapatkan dari 1C. Misalnya getByParam atau getAll
Dari sudut pandang Retrofit, baseUrl akan terlihat seperti ini
"http://192.168.0.1/unf/hs/inntsd/v1/"
mana:
- 192.168.0.1 - Server tempat layanan HTTP diterbitkan
- / unf - 1C nama database
- / hs - bagian statis untuk layanan HTTP
- / inntsd adalah URL root untuk seluruh layanan. Sebut seperti yang kita inginkan
Pertimbangkan prosedur untuk menerima permintaan.
Get()
Ada banyak tips buruk dalam contoh ini. Misalnya,
Nama Direktori, Tindakan perlu dikonversi ke enumerasi atau direktori baru dengan kecocokan. Tapi seberapa elegan penerapannya dalam suplemen, saya belum memutuskan.
Mari kita
uraikan permintaan
getByParam . Alamat lengkap: / v1 / catalogs / wares / getByParam? Prop = byCode & perbandingan = sama & searchString = 239
Cari tahu di direktori mana kami bekerja.
() . = "" = (); . = "" = () = (100, " " + .); ; ;
Dapatkan metode permintaan. Dan kami memeriksa bahwa semua parameter terlampir pada metode ini. Di sini harus dicatat cek mendalam saya tidak. Karena saya menulis untuk 1C dan Android.
() . = "" = ..("prop"); = ..("comparison"); = ..("searchString"); ( = ) ( = ) ( = ) = (103, " / "); ; ; = (, , ); = (0, ""); .("payload", ); . = "" = (); = (0, ""); .("payload", ); = ("102", " " + .); ; ;
Jika semuanya baik-baik saja. Kami menyiapkan data untuk jawabannya.
(, , ) = ; = " | . , | . , | . , | . , | .. | | . | | . | {}"; = ""; () = ("byCode") = "."; () = ("byArticle") = "."; () = ("byName") = "."; ; () = ("equally") = + " = &"; () = ("similarly") = + " &"; ; = (, "{}", ); . = ; () = ("similarly") = "%" + + "%"; ; .("", ); = .().(); = .(); = ; .( ("code,article, name, fullName, unit", ., ., ., ., .)); ; = ; .("quantity", ); .("wares", ); ;
Dan akhirnya, kami menyatukan semuanya bersama. Kami memasukkan ini ke dalam JSON dan mengirimkan respons.
= (0, ""); .("payload", ); ; (, ) = (); HTTP = HTTP(); HTTP.["Content-Type"] = "application/json; charset=utf-8";
Dan kami memberikan semuanya kepada klien.
= (200, ) ;
Terlepas dari apa yang kami dapatkan dari 1C. Kami selalu berusaha menjawab dengan benar.
(, ) = ; = (); .("code", ); .("description", ); .("result", ); .("payload", ); ;
Itu saja. Semua metode lain diimplementasikan dengan cara yang serupa. Ajukan pertanyaan, saya akan dengan senang hati menjawab.