在导致错误的自定义图表上执行插入

问题描述:

我正试图向数据库中的自定义表格插入新记录。这是通过SO图上的图形扩展来执行的。代码如下:在导致错误的自定义图表上执行插入

public PXAction<PX.Objects.SO.SOOrder> addToDatabase; 

    [PXButton(CommitChanges = true)] 
    [PXUIField(DisplayName = "Send to Manufacturing")]  
    protected void AddToDatabase() 
    { 
     try 
     { 
      Flow2 graphWO = PXGraph.CreateInstance<Flow2>(); 
      EMPWorkOrder wo = null; 
      foreach (PXResult<SOLine, InventoryItem> line in PXSelectJoin<SOLine, LeftJoinSingleTable<InventoryItem, On<InventoryItem.inventoryID, Equal<SOLine.inventoryID>>>, 
       Where<SOLine.orderNbr, Equal<Current<SOOrder.orderNbr>>>>.Select(Base, Base.Document.Current.OrderNbr)) 
      { 
       PXCache sender = Base.Transactions.Cache; 
       SOLine soLine = (SOLine)line; 
       InventoryItem item = (InventoryItem)line; 
       SOLineExt lineExt = sender.GetExtension<SOLineExt>(soLine); 
       if (lineExt.UsrisSentToManufacturing != true) 
       { 
        wo = new EMPWorkOrder(); 
        wo.Soid = Base.Document.Current.OrderNbr; 
        wo.ItemCD = item.InventoryCD; 
        wo.LineNbr = soLine.LineNbr; 
        wo.QtyReceived = 0; 
        wo.DateReceived = null; 
        wo.QtyComplete = 0; 
        wo.QtySentToInventory = 0; 
        wo.RouteId = "0"; 
        wo.KitId = -1; 
        wo.IsStarted = false; 
        wo.NoteID = Guid.NewGuid(); 

        graphWO.Document.Insert(wo); 
        graphWO.Actions.PressSave(); 
        graphWO.Clear(); 

       } 
      } 
      throw new PXException("Successfully moved to Manufacturing"); 
     } 
    } 

当执行代码,我收到的错误是:

Error#14: Inserting 'EMPWorkOrder' record raised one or more errors. Please review.

当我进入的痕迹,这是它给我的信息:

12/16/2016 1:44:23 PM Error: Error #14: Inserting 'EMPWorkOrder' record raised one or more errors. Please review.

at PX.Objects.SO.SOOrderEntry_Extension.AddToDatabase() at PX.Data.PXAction`1.<>c__DisplayClass3_0.<.ctor>b__0(PXAdapter adapter)

at PX.Data.PXAction`1.a(PXAdapter A_0)

at PX.Data.PXAction`1.d__31.MoveNext()

at PX.Data.PXAction`1.d__31.MoveNext()

at PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand(String viewName, >String[] sortcolumns, Boolean[] descendings, Object[] searches, Object[] >parameters, PXFilterRow[] filters, DataSourceSelectArguments arguments, >Boolean& closeWindowRequired, Int32& adapterStartRow, Int32& adapterTotalRows)

at PX.Web.UI.PXBaseDataSource.ExecuteSelect(String viewName, DataSourceSelectArguments arguments, PXDSSelectArguments pxarguments)

是否有任何理由让我的记录不会插入到我制作的自定义表格中?如果您需要任何其他信息来解决这个问题,请随时询问。

埃里克,你最有可能得到这个错误,因为一些空的字段或字段(没有赋值或赋值为空值)用PXDefaultAttribute装饰。在调试器下运行代码时,您应该通过最初抛出的异常的InnerException属性来访问更详细的异常。因为有两个为SOOrder DAC定义的关键字段:OrderType和OrderNbr,所以我还建议您在操作委托的开头在您的BQL查询的Where子句中添加SOLine.orderType字段

+0

鲁斯兰,你是对的。我确实错过了一个字段,并且忘记将Id字段设置为PXDBIdentity。在设置wo.ItemCD字段并将DAC中的ID字段更改为PXDBIdentity之后,当我尝试运行.PressSave()命令时,仍然收到相同的错误。 –

+0

Eric,你是否检查了最初抛出的异常的InnerException属性中存储了什么? 'PXUIFieldAttribute.GetErrors(wo)'也应该返回列出的错误。你也不应该给NoteID字段分配任何值。 – RuslanDev

+0

Ruslan,谢谢我会尝试PXUIFieldAttribute.GetErrors,如果我可以。现在,我无法让Visual Studio附加到我的浏览器,以便我可以调试。我不知道如何解决这个问题。我会让你知道结果,但可能不会有一点点。正在处理导致问题的另一部分代码。 –