Вставить заказ на продажу по графику в Acumatica

Я пытаюсь вставить заказ на продажу через график. Мой код работает, но его нельзя вставить в базу данных. Это мой код для создания заказа на продажу. Я использую Acumatica 4.0

void genSO(string outletCD,string salesmanCD)
{
            Customer cus =
                PXSelect<Customer, Where<Customer.acctCD, Equal<Required<Customer.acctCD>>>>
                    .Select(this, outletCD);

            SalesPerson salesman=
                PXSelect<SalesPerson, Where<SalesPerson.salesPersonCD, Equal<Required<SalesPerson.salesPersonCD>>>>
                    .Select(this, salesmanCD);


            if (cus != null && cus.BAccountID != null )
            {

                SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
                SOOrder newOrder = graph.Document.Insert();
                newOrder.OrderType = "SO";
                newOrder.OrderDate=DateTime.Now;
                newOrder.RequestDate = DateTime.Now;
                newOrder.CustomerID = cus.BAccountID;

                graph.Document.Cache.RaiseFieldUpdated<SOOrder.customerID>(newOrder, null);
                newOrder.SalesPersonID = smNPP.SalesPersonID;
                graph.Document.Cache.RaiseFieldUpdated<SOOrder.salesPersonID>(newOrder, null);


                newOrder.Status = "N";
                graph.Document.Current = newOrder;

                graph.Document.Cache.Update(newOrder);
                graph.Actions.PressSave();
            }
}

Спасибо за вашу помощь.


person Simon Huynh    schedule 08.10.2014    source источник
comment
Вы получаете какую-нибудь ошибку? Или он просто ничего не делает?   -  person Gabriel    schedule 08.10.2014
comment
Нет это не так. Но данные не могут быть вставлены в базу данных   -  person Simon Huynh    schedule 09.10.2014
comment
Я могу обнаружить несколько проблем с этим кодом, однако он работает правильно в 4.2, и заказ вставлен. Прежде всего следует заменить DateTime.Now на DateTime.Today.   -  person Gabriel    schedule 09.10.2014
comment
Я заменил, но ничего не происходит   -  person Simon Huynh    schedule 09.10.2014


Ответы (2)


Попробуй это:

SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
SOOrder newOrder = (SOOrder)graph.Document.Cache.CreateInstance();
//Fill only keys.
newOrder.OrderType = "SO";    
newOrder = sograph.Document.Insert(newOrder);
//Apply automation step.
newOrder = PXCache<SOOrder>.CreateCopy(graph.Document.Search<SOOrder.orderNbr>(newOrder.OrderNbr));
newOrder.OrderDate=DateTime.Now;
newOrder.RequestDate = DateTime.Now;
newOrder.CustomerID = cus.BAccountID;
newOrder.SalesPersonID = smNPP.SalesPersonID;
graph.Document.Update(newOrder);
graph.Actions.PressSave();
person Ken    schedule 09.10.2014
comment
Я пробовал это, но все равно ничего не происходит. При отладке я нашел OrderNbr для нового заказа, но после этого в базу данных ничего не вставляется. - person Simon Huynh; 09.10.2014
comment
Есть ли у вас индивидуальная настройка для заказа на продажу? - person Ken; 09.10.2014
comment
Да, я сделал настройку на экране заказа на продажу, добавив новое поле для SOLine - person Simon Huynh; 09.10.2014
comment
Можно ли отменить публикацию и проверить? - person Ken; 09.10.2014
comment
Тоже делал, но все так же :( - person Simon Huynh; 09.10.2014
comment
Удалите последнюю строку PressSave () и добавьте перенаправление в новый созданный заказ на продажу, используя этот код: throw new PXRedirectRequiredException (graph,); Должен открыться экран с вашим новым заказом на продажу. Попробуй его спасти. Это работает? - person Ken; 09.10.2014
comment
Еще одна информация - Dang использует Acumatica 4.0. Выше код - это то, что я предложил Dang через Skype, и я подтвердил, что он работает на моей стороне (даже его оригинальная версия делает вставку порядка на моей стороне, по крайней мере, с 4.2). - person Gabriel; 09.10.2014
comment
Важно - не ставьте DateTime.Now в поля даты; в противном случае вы получите время в полях, которые не предназначены для хранения времени. Используйте DateTime.Today или позвольте системе по умолчанию :) - person Gabriel; 09.10.2014
comment
@Ken: да, когда вы открываете новое окно и сохраняете, все в порядке. - person Simon Huynh; 10.10.2014
comment
@ Габриэль: как я уже говорил, я пробовал много способов, но это все равно не работает. - person Simon Huynh; 10.10.2014

graph.Document.Insert (newOrder); graph.Persist ();

person Chris H    schedule 15.10.2014
comment
Как это должно решить проблему? Также обратите внимание, что рекомендуется использовать Actions.PressSave (), а не Psrsist (). - person Gabriel; 18.10.2014
comment
Я согласен, что PressSave - лучший вариант. Но похоже, что у OP были некоторые трудности с этим подходом. У меня была аналогичная проблема при работе с делами CRM. Я был вынужден вызвать метод Persist. Затем я вызвал «Обновить» в основном представлении действий, чтобы я мог увидеть новое действие, которое было сохранено. - person Chris H; 22.10.2014