Kişi bilgileri gizlidir. Logo çalışanları görebilir.

Rest servisten dönen cevapların belli bir standart hale getirilmesi mümkün mü?

  Tiger/REST Diğer

Rest servisten dönen cevapların belli bir standart hale getirilmesi mümkün mü?

örneğin ;

Logoya daha öncesinde gönderilmiş bir sipariş tekrar göndermek istediğimiz alınan cevap :

{

"Message": "The request is invalid.",

"ModelState": {

"OtherError": [

"Kayıt veritabanına aktarılamadı."

],

"DBError": [

"23000 : Cannot insert duplicate key row in object 'dbo.LG_999_01_ORFICHE' with unique index 'I999_01_ORFICHE_I2'. The duplicate key value is (1, TEST11)."

]

}

}

Logoda ürün kartında birim “SET” olarak tanımlı bir ürünün biz “ADET” olarak gönderdiğimiz alınan cevap:

{

"Message": "The request is invalid.",

"ModelState": {

"ValError0": [

"Birim setine ait ADET kodlu birim bulunamadı.(001.01.04.004)[1]"

]

}

}

Logoda olmayan ve doğru şekilde aktarılan bir bir siparişte gelen cevap:

{

"INTERNAL_REFERENCE": 22,

"NUMBER": "TEST15",

"DATE": "2021-02-19T00:00:00",

"TIME": 102581337,

"ARP_CODE": "120.01.3004",

"CURRSEL_TOTAL": 1,

"TRANSACTIONS": {

"items": [

{

"INTERNAL_REFERENCE": 17,

"TYPE": 0,

"MASTER_CODE": "001.01.04.004",

"ORDFICHEREF": 22,

"QUANTITY": 5.0,

"PRICE": 10.0,

"VAT_RATE": 18.0,

"UNIT_CODE": "SET",

"GUID": "2977A644-7E0E-42A2-AC42-4FD23AA40A1C"

},

{

"INTERNAL_REFERENCE": 18,

"TYPE": 0,

"MASTER_CODE": "001.01.04.004",

"ORDFICHEREF": 22,

"QUANTITY": 1.0,

"PRICE": 20.0,

"VAT_RATE": 18.0,

"UNIT_CODE": "SET",

"GUID": "2977A644-7E0E-42A2-AC42-4FD23AA40A15"

}

]

}

}

Yukarıda da görüleceği gibi aynı servis gönderilen adımlarda farklı içeriklerle cevaplar alınmakta fakat bunu flex üzerinde başarılı bir şekilde logoya sipariş aktarılmıştır gibi uyarılar yazmamız gerekir son kullanıcılara için anlaşılır olması için bu adımda bizlere yardımcı olur musunuz?

Bu konu hakkında daha önceden yapmış olduğumuz Logo Go entegrasyonunda sizlere bir örnek üzerinde paylaşayım sizlere nasıl bir şey beklediğimiz anlatmış olurum

<?xml version="1.0" encoding="ISO-8859-9"?>

<reslt>

<OrderFicheInsertResults>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00088</ficheno>

<err>7</err>

<errordesc>6178006486 vergi numaralı cari hesap ve 120.2.07.1570 kodlu cari hesap Logo da mevcuttur.</errordesc>

</OrderFicheInsertResult>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00088</ficheno>

<err>1</err>

<errordesc>SIP 20-00088 numaralı sipariş fişi Logo da mevcuttur.</errordesc>

</OrderFicheInsertResult>

</OrderFicheInsertResults>

</reslt>

<?xml version="1.0" encoding="ISO-8859-9"?>

<reslt>

<OrderFicheInsertResults>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00089</ficheno>

<err>7</err>

<errordesc>6178006486 vergi numaralı cari hesap ve 120.2.07.1570 kodlu cari hesap Logo da mevcuttur.</errordesc>

</OrderFicheInsertResult>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00089</ficheno>

<err>0</err>

<errordesc>Sipariş Logoya aktarılmıştır.</errordesc>

</OrderFicheInsertResult>

</OrderFicheInsertResults>

</reslt>

<?xml version="1.0" encoding="ISO-8859-9"?>

<reslt>

<OrderFicheInsertResults>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00090</ficheno>

<err>7</err>

<errordesc>6178006486 vergi numaralı cari hesap ve 120.2.07.1570 kodlu cari hesap Logo da mevcuttur.</errordesc>

</OrderFicheInsertResult>

<OrderFicheInsertResult>

<id>1</id>

<ficheno>SIP 20-00090</ficheno>

<err>5</err>

<errordesc>SIP 20-00090 numaralı siparişteki 'arte ihtiyaç 2' kodlu malzemeye ait 'SET' kodlu birim Logo da bulunamadı.</errordesc>

</OrderFicheInsertResult>

</OrderFicheInsertResults>

</reslt>

Yukarıda da Görüleceği gibi rest servis json data dönüyor örneğimde ise xml bu konuda sıkıntı yok yine json data dönebilirsiniz fakat “errordesc” tagı içerisinde hata yada işlem başarılıysa da okunaklı ve anlaşılır bir cevap gelmektedir sizden isteğimde bu şekilde hata her ne olursa olsun tek bir tag içerisinde okunaklı bir cevap alabilmemiz mümkün müdür ki ben kullanıcımı buna göre yönlendireyim ve gerekli adımları atmasını sağlayayım .




Kişi bilgileri gizlidir. Logo çalışanları görebilir.

Merhaba,


Logo Objects REST Servis, gelen talepleri karşıladıktan sonra, arka planda aktarımlarını Logo Objects' i kullanarak yapar.

Logo Objects ile yapılan aktarımlarda ise sıklıkla kullanılan, Uyarlama Araçları Ekibi olarak bizim de çözüm ortaklarımıza önerdiğimiz bir hata rutini vardır.

Post işlemi sonrasında herhangi bir hata oluşursa XML katmanı ve veri tabanı katmanı kontrol edilir. 

 public static void ErrorControl(UnityObjects.Data doData)
 {
 if (doData.ErrorCode != 0)
 {
 MessageBox.Show(doData.ErrorCode.ToString() + " : "
 + doData.ErrorDesc.ToString() + "\n"
 + doData.DBErrorDesc.ToString());
 }
 else
 {
 string txt = "XML Errors \n";
 for (int i = 0; i < doData.ValidateErrors.Count; i++)
 {
 txt = txt + doData.ValidateErrors[i].ID.ToString() + " : " 
 + doData.ValidateErrors[i].Error.ToString() + "\n";
 }
 MessageBox.Show(txt);
 }
 }


Logo Objects REST Servis' te aynı hata yakalama rutinini kullanarak, gelen taleplere karşılık, JSON formatında uygun yanıtı döner.


Kayıt başarılı ise, INTERNAL_REFERENCE alanında oluşan kaydın referans bilgisi ile JSON değer döner.

Kayıt bir şekilde gerçekleşmedi ise, XML katmanı ve veri tabanı katmanından dönen yanıtları size yine JSON formatında döner.


HTTP Post yönteminizde, WebException içerisinde içerik bilgisini alabilirsiniz. Buna Logo Objects' teki hata yakalama rutini gözüyle bakabilirsiniz. 


Örnek kod bloğu;

public static string HttpPost(string url, string param, string accessToken)
 {
 string result = null;

 try
 {
 HttpWebRequest req = WebRequest.Create(new Uri(url)) as HttpWebRequest;
 req.Method = "POST";
 req.ContentType = "application/json";
 req.Accept = "application/json";
 req.Headers.Add("Authorization", "Bearer " + accessToken);

 byte[] formData = UTF8Encoding.UTF8.GetBytes(param.ToString());
 req.ContentLength = formData.Length;

 using (Stream post = req.GetRequestStream())
 {
 post.Write(formData, 0, formData.Length);
 }

 using (HttpWebResponse resp = req.GetResponse() as HttpWebResponse)
 {
 StreamReader reader = new StreamReader(resp.GetResponseStream());
 result = reader.ReadToEnd();
 }
 }
 catch (WebException webEx)
 {
 var response = ((HttpWebResponse)webEx.Response);
 StreamReader content = new StreamReader(response.GetResponseStream());
 result = content.ReadToEnd();
 }
 catch (Exception ex)
 {
 result = ex.Message.ToString();
 }
 return result;
 }


Örneğin; olmayan bir malzeme ile sipariş kaydetmeye çalıştığınızda, başlık bilgisi 400 hatasını döndürecektir. İçerik kısmında ise şu JSON olacaktır;


{
 "Message": "The request is invalid.",
 "ModelState": {
 "ValError0": [
 "OLMAYAN.MALZEME kodlu malzeme bulunamadı.[1]"
 ],
 "ValError1": [
 "Kullanım dışı malzemeler bulunuyor.(OLMAYAN.MALZEME)"
 ]
 }
}


İşlem başarılı ise; HTTP durum kodu 200 (OK) değeri ile yanıt döner. Dönen yanıttan referans bilgisini alıp, ek işlemler yapmayı tercih edebilirsiniz yahut direkt işlem başarılı yanıtını uygulamanız üzerinden dönebilirsiniz.


İşlem başarılı değil ise -yukarıdaki örnekte olduğu gibi-; HTTP durum kodu 400 (BadRequest) değeri ile yanıt döner. Örnek kod bloğundaki yöntem ile JSON formatta dönen kullanıcı dostu mesajları yakalayıp, ardından ayrıştırıp (parse edip), akabinde isterseniz son kullanıcıya sunabilirsiniz.



02/04/21 20:57

Cevap vermek için giriş yapmanız gerekmektedir.