如何扩展项目报价屏幕 (PM304500)?
How do I extend Project Quote Screen (PM304500)?
我被要求添加一个新选项卡,在项目报价屏幕 (PM304500) 上显示链接到项目报价的项目列表。我需要一些帮助来解决这个问题,因为我正在努力识别我需要扩展的图表(或 DAC)以便能够添加我的自定义视图。
这是我要在新选项卡上显示的项目的 DAC,仍需要处理。
using System;
using PX.Data;
namespace *******
{
[Serializable]
[PXCacheName("BOQUMaster")]
public class BOQUMaster : IBqlTable
{
#region MasterID
[PXDBIdentity(IsKey = true)]
public virtual int? MasterID { get; set; }
public abstract class masterID : PX.Data.BQL.BqlInt.Field<masterID> { }
#endregion
#region MasterCD
[PXDBString(20, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Master CD")]
public virtual string MasterCD { get; set; }
public abstract class masterCD : PX.Data.BQL.BqlString.Field<masterCD> { }
#endregion
#region Description
[PXDBString(100, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Description")]
public virtual string Description { get; set; }
public abstract class description : PX.Data.BQL.BqlString.Field<description> { }
#endregion
#region MasterOnProjectStatus
[PXDBString(20, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Master On Project Status")]
public virtual string MasterOnProjectStatus { get; set; }
public abstract class masterOnProjectStatus : PX.Data.BQL.BqlString.Field<masterOnProjectStatus> { }
#endregion
#region DefaultInstallRatio
[PXDBDecimal()]
[PXUIField(DisplayName = "Default Install Ratio")]
public virtual Decimal? DefaultInstallRatio { get; set; }
public abstract class defaultInstallRatio : PX.Data.BQL.BqlDecimal.Field<defaultInstallRatio> { }
#endregion
#region ContractID
[PXDBInt()]
[PXUIField(DisplayName = "Contract ID")]
public virtual int? ContractID { get; set; }
public abstract class contractID : PX.Data.BQL.BqlInt.Field<contractID> { }
#endregion
#region QuoteID
[PXDBGuid()]
[PXUIField(DisplayName = "Quote ID")]
public virtual Guid? QuoteID { get; set; }
public abstract class quoteID : PX.Data.BQL.BqlGuid.Field<quoteID> { }
#endregion
#region Tstamp
[PXDBTimestamp()]
[PXUIField(DisplayName = "Tstamp")]
public virtual byte[] Tstamp { get; set; }
public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field<tstamp> { }
#endregion
#region CreatedByID
[PXDBCreatedByID()]
public virtual Guid? CreatedByID { get; set; }
public abstract class createdByID : PX.Data.BQL.BqlGuid.Field<createdByID> { }
#endregion
#region CreatedByScreenID
[PXDBCreatedByScreenID()]
public virtual string CreatedByScreenID { get; set; }
public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field<createdByScreenID> { }
#endregion
#region CreatedDateTime
[PXDBCreatedDateTime()]
public virtual DateTime? CreatedDateTime { get; set; }
public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field<createdDateTime> { }
#endregion
#region LastModifiedByID
[PXDBLastModifiedByID()]
public virtual Guid? LastModifiedByID { get; set; }
public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field<lastModifiedByID> { }
#endregion
#region LastModifiedByScreenID
[PXDBLastModifiedByScreenID()]
public virtual string LastModifiedByScreenID { get; set; }
public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field<lastModifiedByScreenID> { }
#endregion
#region LastModifiedDateTime
[PXDBLastModifiedDateTime()]
public virtual DateTime? LastModifiedDateTime { get; set; }
public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field<lastModifiedDateTime> { }
#endregion
#region Noteid
[PXNote()]
public virtual Guid? Noteid { get; set; }
public abstract class noteid : PX.Data.BQL.BqlGuid.Field<noteid> { }
#endregion
}
}
我想要的视图看起来像这样,但显然我需要修改我正在扩展的图表
using PX.Data.BQL.Fluent;
using PX.Objects.CR;
using PX.Objects.PM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace *******
{
//What graph do I need to extend here or do I need to think about another approach?
public class PMQuoteMaint_Extension : PXGraphExtension<PMQuoteMaint>
{
// The data view I will need to add to the extend class will look something like this
//public SelectFrom<BOQUMaster>.Where<BOQUMaster.quoteID.IsEqual<PMQuoteMaint.quoteID.FromCurrent>>.View BillOfQuantities;
}
}
请随时在评论中添加任何有用的文章或链接。
正如 Rick 所说,您似乎来对地方了。但是,您定义的视图(已注释掉)尝试从 PMQuoteMaint 访问 quoteID,这是一个图形。您需要从 PMQuote 中提取,因为它是图表的主要 DAC。
您的代码(注释掉):
public SelectFrom<BOQUMaster>
.Where<BOQUMaster.quoteID.IsEqual<PMQuoteMaint.quoteID.FromCurrent>>
.View BillOfQuantities;
更正后的代码:
public SelectFrom<BOQUMaster>
.Where<BOQUMaster.quoteID.IsEqual<PMQuote.quoteID.FromCurrent>>
.View BillOfQuantities;
做这类工作时,可以利用 2 种不同类型的数据结构。一个是子记录(master-detail 关系),它使用 [PXParent] 属性与 [PXDBDefault] 结合使用父 table 中的相关值填充字段。如果您的数据是“此报价的项目”,那么您的 DAC 中需要类似于 PMQuoteTask 的东西...
public partial class PMQuoteTask : PX.Data.IBqlTable
{
#region QuoteID
public abstract class quoteID : PX.Data.BQL.BqlGuid.Field<quoteID> { }
[PXDBGuid(IsKey = true)]
[PXDBDefault(typeof(PMQuote.quoteID))]
[PXParent(typeof(Select<PMQuote, Where<PMQuote.quoteID, Equal<Current<quoteID>>>>))]
public virtual Guid? QuoteID { get; set; }
#endregion
#region TaskCD
public abstract class taskCD : PX.Data.BQL.BqlString.Field<taskCD> { }
[PXDimension(ProjectTaskAttribute.DimensionName)]
[PXDBString(IsUnicode = true, IsKey = true, InputMask = "")]
[PXDefault()]
[PXUIField(DisplayName = "Project Task", Visibility = PXUIVisibility.SelectorVisible)]
public virtual String TaskCD { get; set; }
#endregion
...
}
请注意,DAC 具有 QuoteID 和 TaskCD 键。 QuoteID 定义了 PMQuote 的父级,它是图形的主要 DAC。在您的 DAC 中使用 QuoteID 让我相信这是一个关键 link,并且您不会将相同的记录引用到其他报价。当您删除父 PMQuote 记录时,此方法会导致子记录被删除。
但是,您的记录似乎是另一种类型的...相关数据。这实际上是使用选项卡来显示通常会在查询菜单中显示的 GI 中的数据。当业务案例需要时,您当然可以在选项卡中执行此操作。虽然可以在此处将数据检索到新选项卡的视图中,但我建议您使用 .View.ReadOnly,因为它只是参考数据。这将防止更改此屏幕上的数据,因为这不是该 DAC 的主要图形。防止在 DAC 的主要图表之外进行更改的原因是,主要图表中的事件处理程序的使用不会从此 (non-primary) 图表中触发。您可以考虑在选项卡中制作 BOQUMaster.MasterCD 的 link,以便可以从 BOQUMaster 的主要图表中进行更改。
我被要求添加一个新选项卡,在项目报价屏幕 (PM304500) 上显示链接到项目报价的项目列表。我需要一些帮助来解决这个问题,因为我正在努力识别我需要扩展的图表(或 DAC)以便能够添加我的自定义视图。
这是我要在新选项卡上显示的项目的 DAC,仍需要处理。
using System;
using PX.Data;
namespace *******
{
[Serializable]
[PXCacheName("BOQUMaster")]
public class BOQUMaster : IBqlTable
{
#region MasterID
[PXDBIdentity(IsKey = true)]
public virtual int? MasterID { get; set; }
public abstract class masterID : PX.Data.BQL.BqlInt.Field<masterID> { }
#endregion
#region MasterCD
[PXDBString(20, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Master CD")]
public virtual string MasterCD { get; set; }
public abstract class masterCD : PX.Data.BQL.BqlString.Field<masterCD> { }
#endregion
#region Description
[PXDBString(100, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Description")]
public virtual string Description { get; set; }
public abstract class description : PX.Data.BQL.BqlString.Field<description> { }
#endregion
#region MasterOnProjectStatus
[PXDBString(20, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Master On Project Status")]
public virtual string MasterOnProjectStatus { get; set; }
public abstract class masterOnProjectStatus : PX.Data.BQL.BqlString.Field<masterOnProjectStatus> { }
#endregion
#region DefaultInstallRatio
[PXDBDecimal()]
[PXUIField(DisplayName = "Default Install Ratio")]
public virtual Decimal? DefaultInstallRatio { get; set; }
public abstract class defaultInstallRatio : PX.Data.BQL.BqlDecimal.Field<defaultInstallRatio> { }
#endregion
#region ContractID
[PXDBInt()]
[PXUIField(DisplayName = "Contract ID")]
public virtual int? ContractID { get; set; }
public abstract class contractID : PX.Data.BQL.BqlInt.Field<contractID> { }
#endregion
#region QuoteID
[PXDBGuid()]
[PXUIField(DisplayName = "Quote ID")]
public virtual Guid? QuoteID { get; set; }
public abstract class quoteID : PX.Data.BQL.BqlGuid.Field<quoteID> { }
#endregion
#region Tstamp
[PXDBTimestamp()]
[PXUIField(DisplayName = "Tstamp")]
public virtual byte[] Tstamp { get; set; }
public abstract class tstamp : PX.Data.BQL.BqlByteArray.Field<tstamp> { }
#endregion
#region CreatedByID
[PXDBCreatedByID()]
public virtual Guid? CreatedByID { get; set; }
public abstract class createdByID : PX.Data.BQL.BqlGuid.Field<createdByID> { }
#endregion
#region CreatedByScreenID
[PXDBCreatedByScreenID()]
public virtual string CreatedByScreenID { get; set; }
public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field<createdByScreenID> { }
#endregion
#region CreatedDateTime
[PXDBCreatedDateTime()]
public virtual DateTime? CreatedDateTime { get; set; }
public abstract class createdDateTime : PX.Data.BQL.BqlDateTime.Field<createdDateTime> { }
#endregion
#region LastModifiedByID
[PXDBLastModifiedByID()]
public virtual Guid? LastModifiedByID { get; set; }
public abstract class lastModifiedByID : PX.Data.BQL.BqlGuid.Field<lastModifiedByID> { }
#endregion
#region LastModifiedByScreenID
[PXDBLastModifiedByScreenID()]
public virtual string LastModifiedByScreenID { get; set; }
public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field<lastModifiedByScreenID> { }
#endregion
#region LastModifiedDateTime
[PXDBLastModifiedDateTime()]
public virtual DateTime? LastModifiedDateTime { get; set; }
public abstract class lastModifiedDateTime : PX.Data.BQL.BqlDateTime.Field<lastModifiedDateTime> { }
#endregion
#region Noteid
[PXNote()]
public virtual Guid? Noteid { get; set; }
public abstract class noteid : PX.Data.BQL.BqlGuid.Field<noteid> { }
#endregion
}
}
我想要的视图看起来像这样,但显然我需要修改我正在扩展的图表
using PX.Data.BQL.Fluent;
using PX.Objects.CR;
using PX.Objects.PM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace *******
{
//What graph do I need to extend here or do I need to think about another approach?
public class PMQuoteMaint_Extension : PXGraphExtension<PMQuoteMaint>
{
// The data view I will need to add to the extend class will look something like this
//public SelectFrom<BOQUMaster>.Where<BOQUMaster.quoteID.IsEqual<PMQuoteMaint.quoteID.FromCurrent>>.View BillOfQuantities;
}
}
请随时在评论中添加任何有用的文章或链接。
正如 Rick 所说,您似乎来对地方了。但是,您定义的视图(已注释掉)尝试从 PMQuoteMaint 访问 quoteID,这是一个图形。您需要从 PMQuote 中提取,因为它是图表的主要 DAC。
您的代码(注释掉):
public SelectFrom<BOQUMaster>
.Where<BOQUMaster.quoteID.IsEqual<PMQuoteMaint.quoteID.FromCurrent>>
.View BillOfQuantities;
更正后的代码:
public SelectFrom<BOQUMaster>
.Where<BOQUMaster.quoteID.IsEqual<PMQuote.quoteID.FromCurrent>>
.View BillOfQuantities;
做这类工作时,可以利用 2 种不同类型的数据结构。一个是子记录(master-detail 关系),它使用 [PXParent] 属性与 [PXDBDefault] 结合使用父 table 中的相关值填充字段。如果您的数据是“此报价的项目”,那么您的 DAC 中需要类似于 PMQuoteTask 的东西...
public partial class PMQuoteTask : PX.Data.IBqlTable
{
#region QuoteID
public abstract class quoteID : PX.Data.BQL.BqlGuid.Field<quoteID> { }
[PXDBGuid(IsKey = true)]
[PXDBDefault(typeof(PMQuote.quoteID))]
[PXParent(typeof(Select<PMQuote, Where<PMQuote.quoteID, Equal<Current<quoteID>>>>))]
public virtual Guid? QuoteID { get; set; }
#endregion
#region TaskCD
public abstract class taskCD : PX.Data.BQL.BqlString.Field<taskCD> { }
[PXDimension(ProjectTaskAttribute.DimensionName)]
[PXDBString(IsUnicode = true, IsKey = true, InputMask = "")]
[PXDefault()]
[PXUIField(DisplayName = "Project Task", Visibility = PXUIVisibility.SelectorVisible)]
public virtual String TaskCD { get; set; }
#endregion
...
}
请注意,DAC 具有 QuoteID 和 TaskCD 键。 QuoteID 定义了 PMQuote 的父级,它是图形的主要 DAC。在您的 DAC 中使用 QuoteID 让我相信这是一个关键 link,并且您不会将相同的记录引用到其他报价。当您删除父 PMQuote 记录时,此方法会导致子记录被删除。
但是,您的记录似乎是另一种类型的...相关数据。这实际上是使用选项卡来显示通常会在查询菜单中显示的 GI 中的数据。当业务案例需要时,您当然可以在选项卡中执行此操作。虽然可以在此处将数据检索到新选项卡的视图中,但我建议您使用 .View.ReadOnly,因为它只是参考数据。这将防止更改此屏幕上的数据,因为这不是该 DAC 的主要图形。防止在 DAC 的主要图表之外进行更改的原因是,主要图表中的事件处理程序的使用不会从此 (non-primary) 图表中触发。您可以考虑在选项卡中制作 BOQUMaster.MasterCD 的 link,以便可以从 BOQUMaster 的主要图表中进行更改。