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

REST ile Sipariş oluşturmak

  Tiger/REST

docs.logo.com.tr adresinde tarif edilen şekilde sipariş oluşturmak istersneniz sipariş oluşmayacak "400 hatalı istek" hatası verecektir.

items: kısmını kaldırıp gönderdiğinizde sorun ortadan kalkacak ve siparişiniz oluşacaktır.

Denemedim ama diğer fiş türlerinin satırlarında da aynı şekilde olmalı. Umarım işinize yarar. İleride aramalarda çıkması ve aynı sorunla karşılaşan arkadaşlara zaman kazandırması amacıyla paylaşmak istedim.


Örnek: 

{
  "INTERNAL_REFERENCE": 11702,
  "NUMBER": "~",
  "DATE": "2017-08-10T14:37:00",
  "TIME": 102581337,
  "ARP_CODE": "120.001.0009",
  "CURRSEL_TOTAL": 1,
"TRANSACTIONS": [
            {
            "TYPE": 0,
            "MASTER_CODE": "152.001.0009,
            "QUANTITY": 5,
            "PRICE": 10,
            "VAT_RATE": 18,
            "UNIT_CODE": "ADET"
            }
            ]
}


REST Sipariş Fiş Oluşturmak Satırlar Fiş Satırları


ramazanonur

Merhaba,


Nerede böyle bir durum ile karşılaşıp bu fikre sahip oldunuz ? 


TRANSACTIONS altında items kullanarak sipariş aktarımı sağlayabiliyorum. Hatta sipariş PAYMENT_LIST aktarırken items kullanmadığım için 400 hatası alıyordum items ekleyerek aktarım sağlayabildim.


10/08/17 15:14


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


10/08/17 16:10


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

Ramazan Bey haklısınız.

items olması gerekiyor.

verdiği hata item'lardan birinin birim bilgisinin olmaması sebebiyle imiş.

Bunu da kayıtlara geçmesi için özellikle belirtiyorum. Orjinal bir forum yazışması oldu :)

Size de teşekkür etmem lazım.

Sipariş satırlarında hatalı birim varsa "Uzak sunucu hata döndürdü: (400) Hatalı İstek." hatası alıyorsunuz. 


10/08/17 16:23


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

Peki benim doğrudan TRANSACTIONS ile verdiğim sipariş neden hata vermedi? Onu da araştırdım. Zaten hatayı öyle buldum. Logodan bakınca sipariş var ama satırı yoktu. 

items'i görmezse item yok sayıyor demek ki. hata da vermiyor. 

Tekrar teşekkürler


10/08/17 16:25


ramazanonur

Merhaba,


1- Rest hatalı bilgi var ise tüm gönderimi iptal etmek yerine hatalı yeri yoksayarak işlem gerçekleştiriyor. Bunu da bir önceki yorumumda bahsettiğim PAYMENT_LIST aktarmaya çalışırken fark ettim.


Gönderdiğiniz json ile sunucudan dönen json veriyi karşılaştırdığınızda sizin ilettiğinizin geri dönmesi gerekir. Dönmüyor ise dönüş olmayan satırda bir sorun var demektir. Zaten videonuzda post işleminden sonra dönen jsonda TRANSACTIONS boş geldiğini gördüm.


2- Hatalı bir istek olunca "Uzak sunucu hata döndürdü: (400) Hatalı İstek."  uyarısını response kodu ve açıklamasında yazıyor sadece, bunlar header bilgileridir. Dönen veride response text tarafını alır yorumlarsanız orada muhtemelen hatanızı söylüyordur. Videodaki sample anladığım kadarıyla hata durumunda sadece header bilgisini döndürüyor.


3- Emin olmamak ile birlikte hatalı json verisini içeri aktarması olayını şuna yorumlayabilirim. Logo object rest service manager içerisinde diğer ayarlarda yer alan "Veri uyuşmazlığı olan nesnelerde hata verme" işaretli olduğu için olabilir.


10/08/17 16:37


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

400 Hatalı istek hatası bir web server hatası. Bu hatanın peşine açıklama eklenmesi mümkün olmayabilir.

Web server header hatalarında gövde yer alması alışık bir durum değil.


Bir sonraki örneğimde de birim doğru ama malzeme kullanımda değil. Yine 400 hatası verip kalıyor. Hatanın bir yerinde bir açıklama olsa bunca insanın vaktini almaya gerek kalmazdı. Böyle el yordamıyla aramaya devam.

KEndinizde denemek isterseniz üründe olmayan bir birim yazın. Veya ürünü kullanmdan kaldırıp ekleyin.

Belki de rest server sürümünde böyle bir hata vardır.


10/08/17 16:58


NaciO

Aslında bahsettiğiniz gibi REST Servis hatanın açıklamasını da JSON olarak dönüyor. Http Post yönteminizde WebException içerisinde içerik bilgisini alabilirsiniz. Buna Logo Objects'teki hata yakalama rutini gözüyle bakabilirsiniz. 

Bu forum sayfasında konuyla ilgili kod örneği bulunması açısından hatalarında yakalanabileceği HttpPost örneğini ekliyorum;


 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 header bilgisi 400 hatasını döndürecektir. içerik ise 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)"
 ]
 }
}


Eğer birden fazla hata mesajı varsa yukarıdaki örnekteki gibi her biri ayrı bir line olarak size dönecektir.


 


11/08/17 13:33


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

Teşekkürler hocam.

Türk filmlerindeki gibiyim şu anda: "Görüyorum ! Görüyorum !"

:)


12/08/17 16:12

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