2011-06-23 68 views
1

Web應用程序的銷售訂單返回列表,我需要得到所有SalesOrders的滿足如下因素準則的列表或集合:Dynamics GP的Web服務 - 基於特定條件

  • 有一個WarehouseKey.ID等於 「測試」, 「lucmo」 或 「英諾」
  • 有無具有一個QuantityToBackorder大於0
  • 有無RequestedShipDate大於當前日期。

我已經成功地使用這兩種方法來檢索文檔,但我無法弄清楚如何返回符合上述條件的文檔。

http://msdn.microsoft.com/en-us/library/cc508527.aspx

http://msdn.microsoft.com/en-us/library/cc508537.aspx

請幫幫忙!

回答

1

簡答:您的查詢不可能通過GP Web服務。即使您的倉庫密鑰不是GetSalesOrderList的可接受標準。要做你想做的事,你需要下降到eConnect或直接表訪問。如果您使用Microsoft.Dynamics.GP.eConnect和Microsoft.Dynamics.GP.eConnect.Serialization庫(我強烈建議),eConnect在.NET中有很長的路要走。但即使在eConnect中,您仍然堅持基於文檔標題而不是行項目值進行查詢,因此直接表訪問可能是您使其工作的唯一方式。

在eConnect中,您需要的關鍵是生成有效的RQeConnectOutType。請注意「ForList = 1」部分。 That's important.既然我已經做了類似的東西,這裏就是它可能一開始就是(你需要用WhereClause的能力做實驗,我從來不是一個簡單的等於做更多):

private RQeConnectOutType getRequest(string warehouseId) 
{ 
    eConnectOut outDoc = new eConnectOut() 
    { 
     DOCTYPE = "Sales_Transaction", 
     OUTPUTTYPE = 1, 
     FORLIST = 1, 
     INDEX1FROM = "A001", 
     INDEX1TO = "Z001", 
     WhereClause = string.Format("WarehouseId = '{0}'", warehouseId) 
    }; 
    RQeConnectOutType outType = new RQeConnectOutType() 
    { 
     eConnectOut = outDoc 
    }; 
    return outType; 
} 

如果你不得不直接訪問表,我建議通過其中一個內置視圖。在這種情況下,它看起來像ReqSOLineView具有您需要的字段(LOCTIMODE爲warehouseIds,QTYBAOR爲延期交貨數量,ReqShipDate爲請求發貨日期)。拉SOPNUMBE並在調用GetSalesOrderByKey時使用它們。

是的,混合解決方案有點吸引人,但我發現如果你打算使用GP Web服務來處理任何複雜的事情,你就必須適應。就我個人而言,我通過訪問類型來分離我的庫,然後使用特定於我用來協調它們的任何進程的庫。所以我使用了Integration.GPWebServices,Integration.eConnect和Integration.Data庫,這些庫幾乎在任何地方都使用,然後我的各個進程庫在這些庫上進行協調。

+0

此外,eConnect可能需要使用LOCNCODE而不是WarehouseId。我還沒有使用,但是,所以我不能肯定地說... –

+0

謝謝,雅各布。這給了我一些東西來看看。另一個問題,如果我想使用GetSalesOrderList返回所有的SalesOrders?由於SalesOrderCriteria是強制性的,我會使用什麼標準? – PercivalMcGullicuddy

+0

只要不將標準添加到SalesOrderCriteria的任何屬性。雖然確實如此,但您可能需要包含TransactionState並只需提取未發佈的銷售訂單。或者,也可以使用Date標準在過去幾個月內提交訂單。 –