簡答:您的查詢不可能通過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庫,這些庫幾乎在任何地方都使用,然後我的各個進程庫在這些庫上進行協調。
此外,eConnect可能需要使用LOCNCODE而不是WarehouseId。我還沒有使用,但是,所以我不能肯定地說... –
謝謝,雅各布。這給了我一些東西來看看。另一個問題,如果我想使用GetSalesOrderList返回所有的SalesOrders?由於SalesOrderCriteria是強制性的,我會使用什麼標準? – PercivalMcGullicuddy
只要不將標準添加到SalesOrderCriteria的任何屬性。雖然確實如此,但您可能需要包含TransactionState並只需提取未發佈的銷售訂單。或者,也可以使用Date標準在過去幾個月內提交訂單。 –