2014-10-08 2 views
0

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

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(); 
      } 
} 

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

+0

У вас есть какие-либо ошибки? Или это просто ничего не делает? – Gabriel

+0

Нет Это не так. Но данные не могут вставляться в базу данных –

+0

Я могу обнаружить несколько проблем с этим кодом, однако он корректно работает в 4.2 и вставляется заказ. Прежде всего, вы должны заменить DateTime.Now на DateTime.Today. – Gabriel

ответ

0

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

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(); 
+0

Я пробовал это, но все равно ничего не происходит. Когда я отлаживаю, я нашел OrderNbr для нового заказа, но после этого в базу данных ничего не добавлено. –

+0

У вас есть настройка для заказа клиента? – Ken

+0

Да, я сделал настройку на экране заказа клиента, добавив новое поле для SOLine –

0

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

+0

Как это должно решить проблему? Также обратите внимание, что Actions.PressSave() - это рекомендуемый способ сохранения, а не Psrsist() – Gabriel

+0

Я согласен. PressSave - лучший вариант. Но, похоже, ОП столкнулся с таким подходом. У меня была аналогичная проблема при работе с действиями, связанными с CRM. Я был вынужден вызвать метод Персиста. Затем вызывается Refresh в основном представлении активности, чтобы я мог видеть новую активность, которая была сохранена. –