2

对于 Web 应用程序,我需要获取满足以下条件的所有SalesOrders的列表或集合:

  • 有一个等于“test”、“lucmo”或“Inno”的WarehouseKey.ID
  • 具有QuantityToBackorder大于 0的
  • 具有RequestedShipDate大于当前日期的 行。

我已经成功地使用这两种方法来检索文档,但我无法弄清楚如何只返回满足上述条件的那些。

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

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

请帮忙!

4

1 回答 1

2

简短的回答:您无法通过 GP Web 服务进行查询。甚至您的仓库密钥也不是 GetSalesOrderList 的可接受标准。要做你想做的事,你需要使用 eConnect 或直接访问表。如果您使用 Microsoft.Dynamics.GP.eConnect 和 Microsoft.Dynamics.GP.eConnect.Serialization 库(我强烈推荐),eConnect 在 .Net 中已经取得了长足的进步。但是,即使在 eConnect 中,您也被困在基于文档标题而不是行项目值的查询中,因此直接表访问可能是您使其工作的唯一方法。

在 eConnect 中,您需要的关键部分是生成有效的 RQeConnectOutType。请注意“ForList = 1”部分。这很重要。因为我做了类似的事情,所以它可能开始是这样的(你需要试验 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 具有您需要的字段(仓库 ID 为 LOCNCODE,延期交货数量为 QTYBAOR,请求发货日期为 ReqShipDate)。拉出 SOPNUMBE 并在对 GetSalesOrderByKey 的调用中使用它们。

是的,混合解决方案有点糟糕,但我发现如果你打算将 GP Web 服务用于任何复杂的事情,你真的必须适应。就个人而言,我通过访问类型隔离我的库,然后使用特定于我正在使用的任何进程的库来协调它们。所以我有我几乎在任何地方都使用的 Integration.GPWebServices、Integration.eConnect 和 Integration.Data 库,然后我的各个流程库在这些库之上进行协调。

于 2011-06-23T17:02:35.177 回答