c# - 如何扩展项目报价屏幕 (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 种不同类型的数据结构。一种是子记录(主从关系),它使用 [PXParent] 属性与 [PXDBDefault] 一起使用父表中的相关值填充字段。如果您的数据是“此报价的项目”,那么您需要在 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 让我相信这是一个关键链接,您不会将同一记录引用到其他报价。当您删除父 PMQuote 记录时,此方法会导致子记录被删除。
但是,您的记录似乎是另一种类型...相关数据。实际上,这是使用选项卡来显示通常在查询菜单中显示的 GI 中的数据。当业务案例需要时,您当然可以在选项卡中执行此操作。虽然可以在此处将数据检索到新选项卡的视图中,但我建议您使用 .View.ReadOnly ,因为它只是参考数据。这将防止更改此屏幕上的数据,因为这不是该 DAC 的主要图形。防止 DAC 主图之外的更改的原因是,在主图中使用事件处理程序不会从此(非主)图中触发。您可以考虑在选项卡中创建一个 BOQUMaster.MasterCD 的链接,以便可以从 BOQUMaster 的主图进行更改。
推荐阅读
- javascript - Three.js 中的对象选择检查
- java - ImageIO ZLIB 输入流的意外结束
- python-3.x - 无法使用python和oracle数据库将数据插入表中
- javascript - ReactJS 不显示 backgroundImage 内联 CSS
- java - 在 plugin.xml 文件中指定 eclipse 版本
- python - 如何从文本中提取所需信息?Python
- jquery - 选择单击项目的子项(同一页面上的多个副本)
- swift - 添加语言后无法为 XCTest 加载底层模块
- vb.net - VB .Net PrintDialog 返回错误的打印机名称
- primefaces - Primefaces selectOneListbox不显示项目文本(项目中也不包含数据)