Ошибка приведения Int32 в Generic Inquiry после сохранения строки в таблице - PullRequest
0 голосов
/ 05 апреля 2019

Я создал новую пользовательскую таблицу и новый экран (FormView) для ввода данных.Я создал общий запрос для перехода к новому экрану ввода.После того, как я ввел и сохранил первую запись в новой таблице с новым экраном ввода, на экране «Общий запрос» возникает ошибка приведения в один из столбцов.Это все должно быть очень быстро и легко, но я не могу обойти ошибку приведения.

Новая структура таблицы:

CREATE TABLE [dbo].[DPItemRebate](
   [CompanyID] [int] NOT NULL,
   [VendorID] [int] NOT NULL,
   [CustomerID] [int] NOT NULL,
   [InventoryID] [int] NOT NULL,
   [RebateAmt] [decimal](19, 4) NOT NULL,
CONSTRAINT [PK_DPItemRebate] PRIMARY KEY CLUSTERED 
    ([CompanyID] ASC, [VendorID] ASC, [CustomerID] ASC, [InventoryID] ASC)...

ЦАП:

[Serializable]
public class DPItemRebate : IBqlTable
{
   #region VendorID
   [PXDBInt(IsKey = true)]
   [PXUIField(DisplayName = "Vendor")]
   [Vendor(typeof(Search<BAccountR.bAccountID,
       Where<BAccountR.type, Equal<BAccountType.companyType>, 
          Or<Vendor.type, NotEqual<BAccountType.employeeType>>>>), 
       Visibility = PXUIVisibility.SelectorVisible, CacheGlobal = true, 
       Filterable = true)]
   [PXRestrictor(typeof(Where<Vendor.status, IsNull, 
       Or<Vendor.status, Equal<BAccount.status.active>, 
       Or<Vendor.status, Equal<BAccount.status.oneTime>>>>), 
       PX.Objects.AP.Messages.VendorIsInStatus, typeof(Vendor.status))]
   public virtual int? VendorID { get; set; }
   public abstract class vendorID : IBqlField { }
   #endregion

   #region CustomerID
   [PXDBInt(IsKey = true)]
   [PXUIField(DisplayName = "Customer")]
   [CustomerActive(typeof(Search<BAccountR.bAccountID,
       Where<Customer.type, IsNotNull, 
           Or<BAccountR.type, Equal<BAccountType.companyType>>>>), 
       Visibility = PXUIVisibility.SelectorVisible, 
       DescriptionField = typeof(Customer.acctName), 
       Filterable = true)]
   public virtual int? CustomerID { get; set; }
   public abstract class customerID : IBqlField { }
   #endregion

   #region InventoryID
   [PXDBInt(IsKey = true)]
   [PXUIField(DisplayName = "Inventory Item")]
   [Inventory(typeof(Search<InventoryItem.inventoryID, 
       Where2<Match<Current<AccessInfo.userName>>, 
           And<InventoryItem.itemStatus, NotEqual<InventoryItemStatus.unknown>>>>), 
       typeof(InventoryItem.inventoryCD), typeof(InventoryItem.descr), 
       Filterable = true)]
   public virtual int? InventoryID { get; set; }
   public abstract class inventoryID : IBqlField { }
   #endregion

   #region RebateAmt
   [PXDBDecimal()]
   [PXUIField(DisplayName = "Rebate Amount")]
   public virtual Decimal? RebateAmt { get; set; }
   public abstract class rebateAmt : IBqlField { }
   #endregion
}

Общий запрос:

   Tables: DPItemRebate.DPItemRebate
   Relations: <none>
   Results: 
       Object: DPItemRebate
       Data Fields: vendorID, vendorID_description, customerID, customerID_description, inventoryID, inventoryID_description, rebateAmt

Поля ЦАП являются поисковыми, за исключением RebateAmt.Я заимствовал атрибуты селектора из другого места в коде Acumatica DAC.Я добавил все поля на новую страницу ввода, ввел данные с новой страницы, затем открыл общий запрос, и он выдает ошибку:

"[InvalidCastException: Specified cast is not valid.]
 System.Data.SqlClient.SqlBuffer.get_Int32() +65
 PX.Data.PXDataRecord.GetInt32(Int32 i) +96
 PX.Data.PXDBIntAttribute.RowSelecting(PXCache sender, PXRowSelectingEventArgs e) +210
 PX.Data.PXCache.OnRowSelecting(Object item, PXDataRecord record, Int32& position, Boolean isReadOnly) +650"

и

"[PXException: Error: An error occurred during processing of the field Customer: Specified cast is not valid..]"

Когда я комментируюопределения определения DAC для Vendor, CustomerActive и Inventory;ошибка приведения исчезнет, ​​так что, скорее всего, она связана;но мне это нужно для поиска в полевых условиях.Что я не так определяю?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Не переопределять [PXDBInt(IsKey = true)] оно уже определено в атрибуте [CustomerActive].

0 голосов
/ 06 апреля 2019

Я изменил все свои определения атрибутов поля поиска на базовые атрибуты PXSelector, и это, наконец, сработало без ошибок. Хотя я до сих пор не знаю, почему другие Acumatica выдавали ошибки.

...