Как программно создать и подтвердить доставку заказа, используя всплывающее окно «ДОБАВИТЬ заказ»? - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь создать и подтвердить поставку программно для одного заказа. Но я застрял на том, как выбрать все строки, которые отображаются во всплывающем окне «Порядок добавления» для добавления SOLines на экране «Отгрузки». Любая помощь в этом?

 string operation = SOOperation.Issue;
        SOShipmentEntry shipmentGraph = PXGraph.CreateInstance<SOShipmentEntry>();

        BAccountR customer = null;
        INSite warehouse = null;
       PXResultset<SOOrder> objSOOrder = PXSelect<SOOrder, Where<SOOrder.customerRefNbr, Equal<Required<SOImportFilter.referenceID>>>>.Select(this, currentFilter.ReferenceID);
        foreach(SOOrder order in objSOOrder)
        {
            shipmentGraph.Clear();
            var shipment = shipmentGraph.Document.Insert();
            customer = (BAccountR)PXSelect<BAccountR,
            Where<BAccountR.bAccountID, Equal<Required<BAccountR.bAccountID>>>>
            .SelectSingleBound(shipmentGraph, new object[] { }, order.CustomerID);
            shipment.CustomerID = customer.BAccountID;
            shipment = shipmentGraph.Document.Update(shipment);
            warehouse = (INSite)PXSelect<INSite,
           Where<INSite.siteID, Equal<Required<INSite.siteID>>>>
           .SelectSingleBound(shipmentGraph, new object[] { }, "159");
            shipment.SiteID = warehouse.SiteID;
            shipment = shipmentGraph.Document.Update(shipment);
            var addorder = shipmentGraph.addsofilter.Insert();
            addorder.Operation = operation;
            addorder = shipmentGraph.addsofilter.Update(addorder);
            addorder.OrderType = order.OrderType;
            addorder = shipmentGraph.addsofilter.Update(addorder);
            addorder.OrderNbr = order.OrderNbr;
            addorder = shipmentGraph.addsofilter.Update(addorder);

            foreach (PXResult<SOShipmentPlan, SOLineSplit, SOLine> plan in 
                 shipmentGraph.soshipmentplan.Select())
            {
                SOShipmentPlan shipmentPlan = (SOShipmentPlan)plan;
                shipmentPlan.Selected = true;
                shipmentGraph.soshipmentplan.Update(plan);
                shipmentGraph.Actions.PressSave();

            }      

            shipmentGraph.Actions.PressSave();
        }   

1 Ответ

0 голосов
/ 30 августа 2018

Мне сложно понять функцию, которую вы пытаетесь реализовать из описания. Обычно для этого нужно автоматизировать действия CreateShipment и ConfirmShipment.

Возможно, вам придется обработать особый случай, если все, что блокирует вас, - это выбор данных из сетки внутри интеллектуальной панели «Добавить заказ»: enter image description here

Используя функцию проверки элемента, определите имя целевого объекта DataView, нажав на сетку: enter image description here

Используйте View Business Logic Source для поиска исходного кода DataView: enter image description here

Из исходного кода этого DataView мы видим, что он возвращает 3 DAC (SOShipmentPlan, SOLineSplit и SOLine):

PXSelectJoinOrderBy<SOShipmentPlan,
InnerJoin<SOLineSplit, On<SOLineSplit.planID, Equal<SOShipmentPlan.planID>>,
InnerJoin<SOLine, On<SOLine.orderType, Equal<SOLineSplit.orderType>, And<SOLine.orderNbr, Equal<SOLineSplit.orderNbr>, And<SOLine.lineNbr, Equal<SOLineSplit.lineNbr>>>>>>,
OrderBy<Asc<SOLine.sortOrder, Asc<SOLine.lineNbr, Asc<SOLineSplit.lineNbr>>>>> soshipmentplan;

Имея эту информацию, мы теперь можем перебирать DataView, используя метод Select:

foreach (PXResult<SOShipmentPlan, SOLineSplit, SOLine> plan in Base.soshipmentplan.Select())
{
    SOShipmentPlan shipmentPlan = (SOShipmentPlan)plan;
    SOLineSplit lineSplit = (SOLineSplit)plan;
    SOLine line = (SOLine)plan;
}

Я использовал элемент Base для ссылки на граф SOShipmentEntry, чтобы получить DataView. Это следует использовать, когда вы находитесь в контексте расширения графа SOShipmentEntry:

Base.soshipmentplan.Select()

Если у вас есть прямая ссылка на график SOShipmentEntry, вы можете использовать ее напрямую:

SOShipmentEntry shipmentEntry = PXGraph.CreateInstance<SOShipmentEntry>();
shipmentEntry.soshipmentplan.Select()

EDIT

Код для автоматизации диалога добавления заказа:

shipmentEntry.addsofilter.Current.OrderType = SOOrderTypeConstants.SalesOrder;
shipmentEntry.addsofilter.Current.OrderNbr = "000001";
shipmentEntry.addsofilter.Update(shipmentEntry.addsofilter.Current);

foreach (SOShipmentPlan line in shipmentEntry.soshipmentplan.Select())
{
    line.Selected = true;
    shipmentEntry.soshipmentplan.Update(line);
}

shipmentEntry.addSO.Press();
...