如何在“发布时间活动”屏幕上获取约会状态

时间:2019-04-17 16:01:08

标签: acumatica

我正在通过以下方式自定义“发布时间活动”屏幕(EP507020):

首先,我通过屏幕自定义设置中的“添加数据字段”选项将约会编号放在网格中。

第二,我想通过约会Nbr绑定到约会屏幕(FS300200)以获取状态。

第三,我想在“时间活动”网格中添加一个用户字段来保存此获取的状态,以便可以通过状态过滤网格。

我遇到了几个问题,最大的问题是,即使我可以将“约会编号”添加到“发布时间活动”屏幕网格中-并且经检查显示它与所有其他字段属于同一个DAC在该网格中-当我调出源代码时,它在DAC中不显示任何位置。我也找不到任何表格。这是一个完全的谜团-字段实际上不是真的如何作为DAC的一部分显示在检查窗口中?

下一步-约会屏幕DAC(FSAppointment)中的DAC中有两个字段-RefNbr(这是约会编号)和AppointmentID(这是一个自动递增的标识字段)。我将使用哪一个绑定到“约会”屏幕以链接约会Nbr(如果可能的话)?

主要问题是我无法在DAC(EPActivityApprove)中找到约会Nbr,甚至无法绑定到约会屏幕。

这可行吗?

1 个答案:

答案 0 :(得分:0)

绑定到“发布时间活动”屏幕(EP507020)网格的“活动”数据视图包含多个DAC:

public PXFilteredProcessingJoin<
    EPActivityApprove,
    EPActivityFilter,
    LeftJoin<EPEarningType,
        On<EPEarningType.typeCD, Equal<EPActivityApprove.earningTypeID>>,
    InnerJoin<EPEmployee,
        On<EPEmployee.userID, Equal<EPActivityApprove.ownerID>,
        And<Where<EPEmployee.timeCardRequired, NotEqual<True>, Or<EPEmployee.timeCardRequired, IsNull>>>>,
    LeftJoin<CRActivityLink,
        On<CRActivityLink.noteID, Equal<EPActivityApprove.refNoteID>>,
    LeftJoin<CRCase,
        On<CRCase.noteID, Equal<CRActivityLink.refNoteID>>,
    LeftJoin<CRCaseClass,
        On<CRCaseClass.caseClassID, Equal<CRCase.caseClassID>>,
    LeftJoin<ContractEx,
        On<CRCase.contractID, Equal<ContractEx.contractID>>>>>>>>
        [...]

看看主DAC,我们看到它扩展了PMTimeActivity,因此它也将包含该DAC的所有字段:

public class EPActivityApprove : PMTimeActivity

PMTimeActivity也不包含AppointmentID,而是另一个名为FSxPMTimeActivity的DAC,它还扩展了PMTimeActivity。这就是为什么您在EPActivityApprove中看到该字段的原因:

public class FSxPMTimeActivity : PXCacheExtension<PMTimeActivity>
{
        #region AppointmentID
        public abstract class appointmentID : PX.Data.IBqlField
        {
        }

        [PXDBInt]
        [PXUIField(DisplayName = "Appointment Nbr.")]
        [PXSelector(typeof(Search<FSAppointment.appointmentID>),
                           SubstituteKey = typeof(FSAppointment.refNbr))]
        public virtual int? AppointmentID { get; set; }
        #endregion
}

给出一个EPActivityApprove对象,我想您可以像下面这样获取对包含AppointmentID的扩展的引用:

EPActivityApprove row = ???;
FSxPMTimeActivity rowExt = row.GetExtension<FSxPMTimeActivity>();
int? appointmentID = rowExt.AppointmentID;

对于联接,您必须指定DAC中的每个键字段(IsKey = true)。 对于FSAppointment,它们将是SrvOrdType和RefNbr(appointmentID不是该DAC中的关键字段):

#region SrvOrdType
public abstract class srvOrdType : PX.Data.IBqlField
{
}

[PXDBString(4, IsFixed = true, IsKey = true, InputMask = ">AAAA")]
[PXDefault(typeof(FSSetup.dfltSrvOrdType))]
[PXUIField(DisplayName = "Service Order Type")]
[FSSelectorSrvOrdTypeNOTQuote]
[PX.Data.EP.PXFieldDescription]
public virtual string SrvOrdType { get; set; }
#endregion

#region RefNbr
public abstract class refNbr : PX.Data.IBqlField
{
}

[PXDBString(20, IsKey = true, IsUnicode = true, InputMask = "CCCCCCCCCCCCCCCCCCCC")]
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXUIField(DisplayName = "Appointment Nbr.", Visibility = PXUIVisibility.SelectorVisible, Visible = true, Enabled = true)]
[PXSelector(typeof(
    Search2<FSAppointment.refNbr,
    LeftJoin<FSServiceOrder,
        On<FSServiceOrder.sOID, Equal<FSAppointment.sOID>>,
    LeftJoin<Customer, 
        On<Customer.bAccountID, Equal<FSServiceOrder.customerID>>,
    LeftJoin<Location, 
        On<Location.locationID, Equal<FSServiceOrder.locationID>>>>>,
    Where<
        FSAppointment.srvOrdType, Equal<Optional<FSAppointment.srvOrdType>>>,
    OrderBy<Desc<FSAppointment.refNbr>>>),
            new Type[] {
                        typeof(FSAppointment.refNbr),
                        typeof(Customer.acctCD),
                        typeof(Customer.acctName),
                        typeof(Location.locationCD),
                        typeof(FSAppointment.docDesc),
                        typeof(FSAppointment.status),
                        typeof(FSAppointment.scheduledDateTimeBegin)
            })]
[AppointmentAutoNumber(typeof(
    Search<FSSrvOrdType.srvOrdNumberingID,
    Where<
        FSSrvOrdType.srvOrdType, Equal<Optional<FSAppointment.srvOrdType>>>>),
    typeof(AccessInfo.businessDate))]
[PX.Data.EP.PXFieldDescription]
public virtual string RefNbr { get; set; }
#endregion

编辑: 为了更好地了解它,我认为您将无法加入关键领域。因为AppointmentID是唯一标识符字段,所以在这种情况下,您可以设置例外,并且只能在该字段上加入,因为它将作为单个键字段起作用。