【发布时间】: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 值(但没有可用的保存),直到您至少在另一个非关键字段中输入一个值。
-
是的,我只有一个您输入的字段,没有其他内容,我添加了一个描述字段,然后它将保存到数据库中。所以我想我将不得不以这个作为答案。