【问题标题】:Acumatica - Custom Table and Screenacumatica - 自定义表和屏幕
【发布时间】:2018-11-29 23:32:42
【问题描述】:

我一直在尝试创建一个用于输入型号的新屏幕。我一直在关注文档,但我对如何处理 ID 和 CD 感到困惑。我认为这与IsKey 属性有关。我尝试将IsKey 添加到模型CD,但您无法插入任何新记录。我还尝试将 ID 设为 PXDBInt 而不是 PXDBIdentity,结果相同。

值得一提的是,这个错误只发生在插入新记录并且数据库中还没有记录的时候。这基本上是从头开始创建一个全屏,其中大多数文档使用已经创建的 SQL 表,我很确定我的格式是正确的。 ID 是一个自动递增的值,CD 将是保存的型号,您可以在系统中输入一个,因为 ID 只是自动递增的。以下是提供的所有代码和我得到的错误。

SQL 表:

CREATE TABLE [dbo].[ModelNumber](
    [modelID] [int] IDENTITY(1,1) NOT NULL,
    [modelCD] [nvarchar](50) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [modelID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

DAC:

using System;
using PX.Data;

namespace ModelCustom
{
  [Serializable]
  public class ModelNumber : IBqlTable
  {
    #region ModelID
    [PXDBIdentity(IsKey = true)]
    public virtual int? ModelID { get; set; }
    public abstract class modelID : IBqlField { }
    #endregion

    #region ModelCD
    [PXDBString(50, IsUnicode = true, InputMask = "")]
    [PXDefault]
    [PXUIField(DisplayName = "Model Number")]
    [PXSelector(typeof(Search<ModelNumber.modelCD>),
    typeof(ModelNumber.modelCD))]
    public virtual string ModelCD { get; set; }
    public abstract class modelCD : IBqlField { }
    #endregion
  }
}

图表:

using System;
using PX.Data;

namespace ModelCustom
{
  public class ModelNumberEntry : PXGraph<ModelNumberEntry, ModelNumber>
  {
    public PXSelect<ModelNumber> ModelNumbers;
    public PXSave<ModelNumber> Save;
public PXCancel<ModelNumber> Cancel;
public PXInsert<ModelNumber> Insert;
public PXCopyPasteAction<ModelNumber> CopyPaste;
public PXDelete<ModelNumber> Delete;
public PXFirst<ModelNumber> First;
public PXPrevious<ModelNumber> Previous;
public PXNext<ModelNumber> Next;
public PXLast<ModelNumber> Last;
  }
}

ASPX:

<%@ Page Language="C#" MasterPageFile="~/MasterPages/FormView.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="IN200099.aspx.cs" Inherits="Page_IN200099" Title="Untitled Page" %>
<%@ MasterType VirtualPath="~/MasterPages/FormView.master" %>

<asp:Content ID="cont1" ContentPlaceHolderID="phDS" Runat="Server">
  <px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%"
        TypeName="ModelCustom.ModelNumberEntry"
        PrimaryView="ModelNumbers"
        >
    <CallbackCommands>

    </CallbackCommands>
  </px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server">
  <px:PXFormView ID="form" runat="server" DataSourceID="ds" DataMember="ModelNumbers" Width="100%" AllowAutoHide="false">
    <Template>
      <px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartRow="True"></px:PXLayoutRule>
      <px:PXSelector runat="server" ID="CstPXSelector8" DataField="ModelCD" /></Template>
    <AutoSize Container="Window" Enabled="True" MinHeight="200" ></AutoSize>
  </px:PXFormView>
</asp:Content>

最后是错误:

Error: Inserting  'ModelNumber' record raised at least one error. Please review the errors. 

Error: 'Model Number' cannot be found in the system. 

   at PX.Data.PXUIFieldAttribute.CommandPreparing(PXCache sender, PXCommandPreparingEventArgs e) 
   at PX.Data.PXCache.OnCommandPreparing(String name, Object row, Object value, PXDBOperation operation, Type table, FieldDescription& description) 
   at PX.Data.PXCache`1.PersistInserted(Object row) 
   at PX.Data.PXCache`1.Persist(PXDBOperation operation) 
   at PX.Data.PXGraph.Persist(Type cacheType, PXDBOperation operation) 
   at PX.Data.PXGraph.Persist() 
   at PX.Data.PXSave`1.d__2.MoveNext() 
   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)

如有任何帮助,我将不胜感激。

【问题讨论】:

  • 以 InventoryItem DAC 为例,DB 中的 InventoryID 列是键,但在 DAC 上它使 InventoryCD 成为键字段。尝试将示例中的密钥放在 CD 字段上,而不是 ID 字段上。
  • 当我这样做时,如果我在 modelCD 上有 IsKey,我将无法插入记录,因为它不会调用保存按钮,所以它不会保存插入。
  • 如果您在该行输入您的键值和其他字段值,它不会启用保存吗?库存物品也一样...输入 CD 值(但没有可用的保存),直到您至少在另一个非关键字段中输入一个值。
  • 是的,我只有一个您输入的字段,没有其他内容,我添加了一个描述字段,然后它将保存到数据库中。所以我想我将不得不以这个作为答案。

标签: c# sql acumatica


【解决方案1】:

我还创建了一个描述字段并将其添加到 SQL 脚本和 DAC 中。我已将 IsKey 移至 modelCD 字段。描述字段的目的是调用保存但仍然能够使用模型CD 的选择器并插入记录。 这是更新的 DAC:

using System;
using PX.Data;

namespace ModelCustom
{
  [Serializable]
  public class ModelNumber : IBqlTable
  {
    #region ModelID
    [PXDBIdentity()]
    [PXUIField(DisplayName = "Model ID")]
    public virtual int? ModelID { get; set; }
    public abstract class modelID : IBqlField { }
    #endregion

    #region ModelCD
    [PXDBString(50, IsUnicode = true, InputMask = "", IsKey = true)]
    [PXDefault]
    [PXUIField(DisplayName = "Model Number")]
    [PXSelector(typeof(Search<ModelNumber.modelCD>),
    typeof(ModelNumber.modelCD),
    typeof(ModelNumber.description))]
    public virtual string ModelCD { get; set; }
    public abstract class modelCD : IBqlField { }
    #endregion

    #region Description
    [PXDBString(500, IsUnicode = true, InputMask = "")]
    [PXUIField(DisplayName = "Description")]
    public virtual string Description { get; set; }
    public abstract class description : IBqlField { }
    #endregion
  }
}

这是新的 SQL 查询:

CREATE TABLE [dbo].[ModelNumber](
    [modelID] [int] IDENTITY(1,1) NOT NULL,
    [modelCD] [nvarchar](50) NOT NULL,
    [description] [nvarchar](500) NULL,
PRIMARY KEY CLUSTERED 
(
    [modelID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

【讨论】:

    【解决方案2】:

    这可能是您的问题的一部分。如果您直接使用 SQL 脚本创建自定义表,那么您需要确保在架构中包含公司 ID,并且它需要是主键的一部分。这是在 DAC 中假设的,因此您不需要在此处列出它。

    [公司 ID] [int] 非空,

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2018-03-11
      • 2018-02-16
      相关资源
      最近更新 更多