Dynamics GP Web Service - возврат списка заказов на продажу по определенным критериям

Для веб-приложения мне нужно получить список или коллекцию всех SalesOrders, которые соответствуют следующим критериям:

  • Иметь WarehouseKey.ID, равный "test", "lucmo" или "Inno"
  • Строки, у которых величина QuantityToBackorder больше 0
  • Строки, у которых RequestedShipDate больше текущего дня.

Я успешно использовал эти два метода для извлечения документов, но не могу понять, как вернуть только те, которые соответствуют вышеуказанным критериям.

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

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

Пожалуйста помоги!

1 ответ

Решение

Краткий ответ: ваш запрос невозможен через GP Web Services. Даже ваш ключ хранилища не является приемлемым критерием для GetSalesOrderList. Чтобы сделать то, что вы хотите, вам нужно перейти на eConnect или прямой доступ к таблице. eConnect прошел долгий путь в.Net, если вы используете библиотеки Microsoft.Dynamics.GP.eConnect и Microsoft.Dynamics.GP.eConnect.Serialization (которые я настоятельно рекомендую). Даже в 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 имеет необходимые поля (LOCNCODE для warehouseIds, QTYBAOR для неупорядоченного количества и ReqShipDate для запрошенной даты отгрузки). Потяните SOPNUMBE и используйте их при вызове GetSalesOrderByKey.

И да, гибридные решения отчасти бесполезны, но я обнаружил, что вам действительно нужно адаптироваться, если вы собираетесь использовать GP Web Services для чего-либо, что связано с любой сложностью. Лично я изолирую свои библиотеки по типу доступа, а затем использую библиотеки, специфичные для любого процесса, который я использую, чтобы координировать их. Таким образом, у меня есть библиотеки Integration.GPWebServices, Integration.eConnect и Integration.Data, которые я использую практически везде, а затем мои отдельные библиотеки процессов координируются поверх них.

Другие вопросы по тегам