تطبيق على TSD والتواصل مع 1C: Enterprise 8.3 من خلال HTTP-Service. الجزء 2 (تطبيق API على الجانب 1C)

1. اختيار طريقة الصرف. وصف API.

2. تنفيذ API على جانب 1C.


3. تطبيق على TSD والتواصل مع 1C: Enterprise 8.3 من خلال HTTP-Service. الجزء 3 (BroadcastReceiver. الحصول على البيانات)

هناك الكثير من الأدلة حول كيفية إنشاء خدمة HTTP على الإنترنت. لذلك ، سوف أصف على الفور التنفيذ. تتكون خدمتنا من ثلاثة أنماط لعناوين URL:

  • الدلائل - / v1 / كتالوجات / {Directory} / {Action}
  • المستندات - / v1 / documents / {Document} / {Action}
  • خدمات - / v1 / services /


من أجل عدم تضخيم المقالة ، فكر في المثال مع كتاب مرجعي "التسمية". 1C لا يسمح لنا بأن يكون لدينا مسارات مختلفة لطرق HTTP ، لذلك سيكون نمط عنوان URL (/ v1 / catalogs / wares / {Action} ، حيث يتم تعريف طريقتين HTTP GET ، POST ، وفي الأنماط الأخرى ، سنستخدم أيضًا GET ، POST.
  • / v1 - سيسمح لنا بدعم العديد من خيارات API في المستقبل. سنكون قادرين على إضافة قالب URL v_V2_Directories وبالتالي وفقًا للمسار الذي يبدأ بـ / v2
  • / كتالوجات / الأواني / - كتالوجات يدمج جميع الدلائل. هذا هو الجزء الثابت من الطريق. التركيبات يتوافق مع دليل التسميات. 1C سوف يضع "التركيبات" في معلمات URL. تجدر الإشارة إلى أننا نأتي بطرق أنفسنا. ثم نفكر أيضًا في كيفية معالجتها في 1C بأنفسنا
  • {Action} - سنقوم هنا بتمرير ما نريد الحصول عليه من 1C. على سبيل المثال getByParam أو getAll


من وجهة نظر التحديثية ، ستبدو baseUrl مثل هذا "http://192.168.0.1/unf/hs/inntsd/v1/" حيث:

  • 192.168.0.1 - خادم يتم نشر خدمة HTTP فيه
  • / unf - اسم قاعدة البيانات 1C
  • / hs - جزء ثابت لخدمات HTTP
  • / inntsd هو عنوان URL الرئيسي للخدمة بالكامل. اتصل كما نريد


النظر في الإجراء لتلقي الطلب.

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


هناك العديد من النصائح السيئة في هذا المثال. على سبيل المثال ، يلزم تحويل اسم الدليل ، الإجراء إلى تعداد أو دليل جديد مع التطابقات. ولكن كيف هو أنيق لتنفيذ في الملحق ، لم أقرر بعد.

دعونا تحليل طلب getByParam . العنوان الكامل: / v1 / كتالوجات / التركيبات / getByParam؟ Prop = byCode & compar = similarly & searchString = 239

تعرف على الدليل الذي نعمل معه.
  ()  . = ""   = ();  . = ""   = ()   = (100, "    " + .); ;  ;  


الحصول على طريقة الطلب. ونتحقق من أن جميع المعلمات متصلة بالطريقة. هنا تجدر الإشارة إلى الاختيار العميق أنا لا. منذ أن أكتب لكل من 1C و Android.
  ()  . = ""   = ..("prop");  = ..("comparison");  = ..("searchString");  ( = )  ( = )  ( = )   = (103, "     /      ");  ; ;  = (, , );  = (0, ""); .("payload", );  . = ""   = ();  = (0, ""); .("payload", );   = ("102", "     " + .); ;  ;  


إذا كان كل شيء على ما يرام. نحن نستعد البيانات للإجابة.
  (, , )  =  ;  = "  | .  , | .  , | .  , | .  , | ..   | | .   | |  . |  {}";  = "";  () = ("byCode")   = ".";  () = ("byArticle")   = ".";  () = ("byName")   = "."; ;  () = ("equally")   =  + " = &";  () = ("similarly")   =  + "  &"; ;  = (, "{}", ); . = ;  () = ("similarly")   = "%" +  + "%"; ; .("", );  = .().();  = .();  =  ;       .( ("code,article, name, fullName, unit", ., ., ., ., .)); ;  =  ; .("quantity", ); .("wares", );  ;  


وأخيراً ، نوحّد كل شيء معًا. نضع هذا في JSON ونرسل الرد.
  = (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(, , );  = .();  ;  


ونحن نقدم كل شيء إلى العميل.
  = (200, )  ; 


بغض النظر عن ما حصلنا عليه من 1C. نحن نحاول دائما الإجابة بشكل صحيح.
  (, )  =  ;  =  (); .("code", ); .("description", ); .("result", ); .("payload",  );  ;  


هذا كل شيء. يتم تنفيذ جميع الطرق الأخرى بطريقة مماثلة. اطرح أسئلة ، سأكون سعيدًا بالإجابة.

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


All Articles