2016-04-11 22 views
0

BağlamBir C# masaüstü uygulaması ve QuickBooks QBFC API kullanarak QuickBooks'ta içine satış veri aktarıyorum QuickBooks API

kullanarak tüm Satış Makbuzlar listelemek için nasıl.

Şirket dosyasındaki tüm Satış Makbuzları için Not değerlerinin bir listesini oluşturmam gerekiyor. Bunun nedeni, Memo'nun yeni bir Satış Makbuzu alınmadan önce çiftler için kontrol edilmesi gereken bir satış referansı içermesidir.

Sayı

Ben şu anda kullanıyorum kodudur:

IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0); 

ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq(); 

salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData); 
salesReceiptQuery.IncludeRetElementList.Add("Memo"); 

IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet); 

IResponseList responseList = responseMsgSet.ResponseList; 

for (int i = 0; i < responseList.Count; i++) 
{ 
    IResponse response = responseList.GetAt(i); 

    if (response.StatusCode == 0) 
    { 
     ExistingOrderIds.Add(response.Detail.ToString()); 
    } 
    else 
    { 
     Log.Error("While building OrderId list. Error returned when listing memos from QuickBooks Sales Receipts"); 
     Log.Error(response.StatusCode + " " + response.StatusMessage + " " + response.Detail); 
    } 
} 

Bu, yalnızca tek IResponseList öğesi ve response.detail.toString döndürür() "Sistem .__ comNesne" verir. Bu şirket dosyasında birkaç yüz Satış Makbuzu var.

Soru

yanlış burada ne yapıyorum?

+0

ne yani örneğin .. döngü 'IResponse yanıtı = responseList.GetAt (i) içinde bu çizgiyi olur;' eklediğiniz herhangi bir öğe alıyorsanız denildiğinde ExistingOrderIds.Add() yöntemine ..? – MethodMan

+0

Hata ayıklayıcı yanıtındaList.Count her zaman 1'dir. Response.StatusCode daha sonra sıfır verir ve "System .__ ComObject" değeriyle ExistingOrderIds öğesine tek bir öğe eklenir. – ifinlay

+0

Daha fazla bilgi - OSR’yi okumak daha iyi bir döngü için yanlış seviyeye sahip olabileceğimi düşünüyorum. IResponse bir "ISalesReceiptRet Objects Listesi" içerir. Ancak bunu okunabilir bir forma alamıyorum. – ifinlay

cevap

0

Tamam, sonunda bunu kırdım. Yanlış anlama, IResponseList üzerinde yinelemeniz. Aslında tek IResponseList, tüm Memo'larım ISalesReceiptRet nesneleri listesinde yer alıyor. Bu nedenle, iterasyonun ISalesReceiptRetList üzerinde gerçekleşmesi gerekir. QuickBooks OSR örnekleri bu konuda uzaktan açık değildir! aşağıdaki gibi Yani çalışma kodunuz: kod hata ayıklama sırasında

IMsgSetRequest requestMsgSet = qbSessionManager.CreateMsgSetRequest("UK", 13, 0); 

ISalesReceiptQuery salesReceiptQuery = requestMsgSet.AppendSalesReceiptQueryRq(); 

salesReceiptQuery.metaData.SetValue(ENmetaData.mdNoMetaData); 
salesReceiptQuery.IncludeRetElementList.Add("Memo"); 

IMsgSetResponse responseMsgSet = qbSessionManager.DoRequests(requestMsgSet); 

IResponse response = responseMsgSet.ResponseList.GetAt(0); 

ISalesReceiptRetList salesReceiptRetList = (ISalesReceiptRetList)response.Detail; 

for (int i = 0; i < salesReceiptRetList.Count; i++) 
{ 
    if (salesReceiptRetList.GetAt(i).Memo != null) 
    { 
     string memo = salesReceiptRetList.GetAt(i).Memo.GetValue(); 

     if (memo != string.Empty) 
     { 
      ExistingOrderIds.Add(memo); 
     } 
    } 
} 
+0

'ExistingOrderIds = salesReceiptRetList.Where (x => false == string.IsNullOrWhiteSpace (x.Memo)) 'ı seçin. (X => x.Memo.GetValue()) ToList()' muhtemelen varolanOrderIds'ı OrderMemos'a veya bir şey daha anlamlı hale getirir –

+0

Teşekkürler, bu temiz görünüyor. Maalesef "'ISalesReceiptRetList', 'Nerede' için bir tanım içermiyor. Yeniden adlandırma konusunda, bu parçacık bağlamında, Not alanı her zaman bir OrderId içerir. Siparişlerin alındığı sistem, QuickBooks Sale No (sinir bozucu!) – ifinlay

+0

tarafından barındırılmak üzere çok uzun olan OrderIds'e sahiptir. System.linq –

İlgili konular