投影在 DAC 上带来重复数据

问题描述 投票:0回答:1

我正在尝试创建一个投影,将 FSSODet 文件与 FSApppointmentDet 文件连接起来,以便在流程屏幕中使用。

这是我试图重现的 SQL:

SELECT FD.[SrvOrdType] ,FD.[RefNbr]
      ,FD.[OrigSrvOrdNbr],FD.[OrigLineNbr]
      ,FD.[UnitCost],FD.[UnitPrice]
      ,FS.[RefNbr] ,FS.[LineNbr]
      ,FS.[LineRef],FS.[UnitCost]
      ,FS.[UnitPrice],FS.[TranDesc]
      ,FS.[SODetID],FS.[SOID]
From [FSAppointmentDet] FD
   JOIN [FSSODet] FS on FD.OrigSrvOrdNbr = FS.RefNbr 
   AND FS.LineNbr = FD.OrigLineNbr
WHERE fs.UnitPrice <> FD.UnitPrice 

这就是我所拥有的:

[PXProjection(typeof(Select2<FSAppointmentDet,
    InnerJoin<FSSODet,
    On<FSSODet.refNbr, Equal<FSAppointmentDet.origSrvOrdNbr>,
       And<FSSODet.lineNbr, Equal<FSAppointmentDet.origLineNbr>>>>,
    Where<FSSODet.unitPrice, NotEqual<FSAppointmentDet.unitPrice>>>), Persistent = true)]
[PXCacheName("FixPriceProjection")]
public class PlyFixPriceProjDAC : IBqlTable
{
    #region Selected
    public abstract class selected : PX.Data.BQL.BqlBool.Field<selected> { }
    [PXBool]
    [PXUIField(DisplayName = "Selected")]
    public virtual bool? Selected { get; set; }
    #endregion

    #region Composite Key
    public class PK : PrimaryKeyOf<PlyFixPriceProjDAC>.By<origSrvOrdNbr, origLineNbr>
    {
        public static PlyFixPriceProjDAC Find(PXGraph graph, string origSrvOrdNbr, int? origLineNbr)
            => FindBy(graph, origSrvOrdNbr, origLineNbr);
    }
    #endregion

    #region From the FSAppointmentDet DAC
    #region FDRefNbr
    [PXDBString(20, IsUnicode = true, BqlField = typeof(FSAppointmentDet.refNbr))]
    public virtual string FDRefNbr { get; set; }
    public abstract class fDRefNbr : PX.Data.BQL.BqlString.Field<fDRefNbr> { }
    #endregion

    #region OrigSrvOrdNbr
    [PXDBString(20, IsUnicode = true, BqlField = typeof(FSAppointmentDet.origSrvOrdNbr))]
    public virtual string OrigSrvOrdNbr { get; set; }
    public abstract class origSrvOrdNbr : PX.Data.BQL.BqlString.Field<origSrvOrdNbr> { }
    #endregion

    #region OrigLineNbr
    [PXDBInt(BqlField = typeof(FSAppointmentDet.origLineNbr))]
    public virtual int? OrigLineNbr { get; set; }
    public abstract class origLineNbr : PX.Data.BQL.BqlInt.Field<origLineNbr> { }
    #endregion

    #region FDUnitCost
    [PXDBDecimal(4, BqlField = typeof(FSAppointmentDet.unitCost))]
    public virtual decimal? FDUnitCost { get; set; }
    public abstract class fDUnitCost : PX.Data.BQL.BqlDecimal.Field<fDUnitCost> { }
    #endregion

    #region FDUnitPrice
    [PXDBDecimal(4, BqlField = typeof(FSAppointmentDet.unitPrice))]
    public virtual decimal? FDUnitPrice { get; set; }
    public abstract class fDUnitPrice : PX.Data.BQL.BqlDecimal.Field<fDUnitPrice> { }
    #endregion


    #region InventoryID
    public abstract class inventoryID : PX.Data.BQL.BqlInt.Field<inventoryID> { }

    [StockItem(IsKey = true, BqlField = typeof(FSAppointmentDet.inventoryID), Enabled = false)]
    public virtual Int32? InventoryID { get; set; }
    #endregion



    #endregion

    #region From the FSSODet DAC
    #region FSRefNbr
    [PXDBString(20, IsUnicode = true, BqlField = typeof(FSSODet.refNbr))]
    public virtual string FSRefNbr { get; set; }
    public abstract class fSRefNbr : PX.Data.BQL.BqlString.Field<fSRefNbr> { }
    #endregion

    #region FSLineNbr
    [PXDBInt(BqlField = typeof(FSSODet.lineNbr))]
    public virtual int? FSLineNbr { get; set; }
    public abstract class fSLineNbr : PX.Data.BQL.BqlInt.Field<fSLineNbr> { }
    #endregion

    #region FSLineRef
    [PXDBString(30, IsUnicode = true, BqlField = typeof(FSSODet.lineRef))]
    public virtual string FSLineRef { get; set; }
    public abstract class fSLineRef : PX.Data.BQL.BqlString.Field<fSLineRef> { }
    #endregion

    #region FSUnitCost
    [PXDBDecimal(4, BqlField = typeof(FSSODet.unitCost))]
    public virtual decimal? FSUnitCost { get; set; }
    public abstract class fSUnitCost : PX.Data.BQL.BqlDecimal.Field<fSUnitCost> { }
    #endregion

    #region FSUnitPrice
    [PXDBDecimal(4, BqlField = typeof(FSSODet.unitPrice))]
    public virtual decimal? FSUnitPrice { get; set; }
    public abstract class fSUnitPrice : PX.Data.BQL.BqlDecimal.Field<fSUnitPrice> { }
    #endregion

    #region TranDesc
    [PXDBString(255, IsUnicode = true, BqlField = typeof(FSSODet.tranDesc))]
    public virtual string TranDesc { get; set; }
    public abstract class tranDesc : PX.Data.BQL.BqlString.Field<tranDesc> { }
    #endregion
    #endregion
}

当我运行此命令时,它选择了 1535 条记录,这是正确的。但所有记录都有相同的数据。

我将其放入图形代码中进行检查,发现计数正确,但数据不正确。

            public PXProcessing<PlyFixPriceProjDAC> Processing;

var Items = Processing.Select();
    var totRecords =  Items.Count;
    foreach (PlyFixPriceProjDAC item in Items)
    {
        var so = item.OrigSrvOrdNbr;
    }

知道为什么吗?

c# acumatica
1个回答
0
投票

确保您在某些 dac 字段上定义了 IsKey=True,这种奇怪的情况是由于网格没有定义键

© www.soinside.com 2019 - 2024. All rights reserved.