Aplikasi pada TSD dan komunikasi dengan 1C: Enterprise 8.3 melalui HTTP-Service. Bagian 1.1 (Penjelasan terperinci dari API)

Bagian ini muncul setelah saya memulai implementasi penuh. Setelah operasi tempur, ada kebutuhan untuk mengubah struktur pertukaran data. Ternyata sangat sulit untuk memperkenalkan TSD ke dalam pekerjaan. "1C platform mobile" dipilih sebagai perangkat lunak, sebagai Kotlin sangat sulit. Pada bagian ini, saya akan berbicara tentang bagaimana pertukaran diterapkan pada awalnya, dan memberikan kode pada contoh satu direktori baik di sisi server dan di sisi klien.

1. Deskripsi umum dari algoritma pertukaran.


Di sisi server, pertukaran paket dengan perubahan log otomatis digunakan. Praktek telah menunjukkan bahwa ini adalah cara paling murah dalam hal pemrograman. Di sisi TSD, di setiap direktori, dokumen, alat peraga ditambahkan , di register alat peraga dengan nama yang sama ditambahkan .

Pertukaran itu sendiri sekarang dibagi menjadi dua tahap.

  1. Kami menerima data baru, kami memperbaiki tanda pembaruan;
  2. Kami mengirim konfirmasi bahwa data telah diterima. Jika jawabannya ya, kami menghapus tanda pembaruan;

Skema seperti itu muncul setelah TSD mulai meninggalkan area jangkauan WiFi. Seringkali ternyata datanya datang, tetapi responsnya tidak terkirim.

Untuk memfasilitasi masuknya TSD ke dalam operasi, sebuah direktori dengan nilai yang telah ditentukan telah muncul, untuk masing-masing ( ).

2. Seperti yang telah diterapkan sebelumnya.


Permintaan diprakarsai oleh TSD. Setiap 15 detik ada permintaan untuk data baru, untuk setiap direktori, dokumen, daftar. Data dikumpulkan dalam kumpulan 100 elemen. Yang memberlakukan keterbatasannya. Jika Anda menyelesaikan pendaftaran untuk seluruh simpul, maka data dimuat sekitar 30 menit. Karena dalam implementasi saat ini, tidak ada mekanisme untuk memberitahukan TSD tentang keberadaan paket lain.

Sepotong kode 1C pada TSD
 () 
	
	.();
	.();

	.();
	.();
			
	.();
	.();
	
	.();
	.();
	
	.();
	.();


Setelah jumlah direktori menjadi lebih dari lima, gambar sedih muncul: Setiap aksi di sisi server adalah sama. Permintaan data berbeda. Tetapi memperbaiki perubahan untuk direktori adalah satu dan sama. Mari kita lihat contoh OKEY. Singkatnya, kalau begitu

  • Kami menyiapkan koneksi, mengambil semua konstanta.
  • Kami sedang mempersiapkan permintaan. Setiap direktori terletak pada rutenya sendiri. Dan kemudian perintah dengan parameter berikut. sesuatu seperti ini:
    localhost/ws/okeis/getNew&node=.
  • Siapkan struktur respons
  • Kami mendapatkan respons dan mengisi struktur tergantung pada kode respons HTTP.
  • Jika berhasil, gunakan JSON dalam struktur 1C.
  • Kami memulai transaksi. Kami memperbaiki perubahan dalam direktori. Melakukan transaksi
  • Kami menyebut fungsi melakukan perubahan di sisi server
  • Dan sekarang fiksasinya persis sama di sisi server

Awalnya, setiap direktori memiliki prosedur perbaikan sendiri, sekarang terlihat seperti ini.

Banyak kode 1C

	
 () 
HTTP = .HTTP();
	HTTP = .HTTP("okeis", "getAll?node="+(..()));
	
	 = HTTP.(HTTP);
	
	 =  ;
	.("", .);
	.("", .());

	 . = 200 
		 = .;
		 = .JSON();
		  .("") 
			();
			 = ;
			    .okeis 
				 = .code;
				 = .name;
				 = .fullName;
				 = .internationalReduction;
				
				 = ..();
				
				 () 
					 = .();
				
					 = ..();
				;
				
				. = ;
				. = ;
				. = ;
				. = ;
				. = ;
				
				
					.();
				
					 = ;
					;
				;
				
			;
			
			   
				();
			
				();
			;
		;			
	;




 get()
	
	 .URL.("") = "getAll" 
		
		(0,"  ");
		
		 = ..("node");
		
		 = ();
		 = HTTP(200, );
		
		(0,"  ");
		 ;
	;

	 = HTTP(400,  (",", , " "));
	 ;




 () 
	
	 =  ;
	. = "
	               |	.  
	               |
	               |	.  
	               |
	               |	.";
	
	 = .();
	 = .();
	
	 =  ;
	
	 .() 
		.( ("code", ..));
	;
	
	 =  ;
	.("okeis", );
	
	
	HTTP = .HTTP();
	HTTP = .HTTP("okeis", "dataObtained?node="+(..()));
	
	 = .();
	
	HTTP.();
	
	 = HTTP.(HTTP);
	
	 . = 200 
		();
		 = ;
				
		      
			 = ..(.code).();
			. = ;
			
				.();
			
				 = ;
				;
			;
				
		;
		
		   
			();
		
			();
		;
		
	;
	



 post()
	
	 = .URL.("");

	  = "dataObtained" 
		
		 = ..("node");
		 = ..("nameStructure");

		 = .();
		 = JSON();
		
		 =  ("", , , );
		
		  
			 = HTTP(200,  ("code", 0));
		
			 = HTTP(400,  ("code", 100));
		;
		
		 ;
	;
	 
	 = HTTP(400,  (",", , " "));
	 ;



 (, , , )
	
	 = ();
	
	();
	 = ;
	    [] 
		
		 = [].(.code);
		
		 () 
			
				.(,);
			
				 = ;
				;
			;	
		;
	;
	
	  
		();
		 ;
	
		();
		 ;
	;
	
	


Artikel ini membahas implementasi dahi. Jangan lakukan ini, kecuali jika Anda perlu dengan cepat merakit prototipe, dan mengujinya dalam pertempuran.

Jika Anda menyukai artikel ini, di berikutnya saya akan memberi tahu Anda bagaimana artikel itu diterapkan sekarang.

All Articles