Acumatica 如何使用自定义选择器字段自定义时间条目和活动

Acumatica How to customize Time Entries and Activities with Custom Selector Field

我们想要自定义时间条目和活动逻辑,以拥有一个自定义选择器字段,该字段从系统中设置的属性中提取信息。如果 TimeSpent 和 BilledTime 不匹配,则它必须是必填字段,条目被标记为可计费,并且项目有客户加载。我已经成功地让它在“员工时间活动”屏幕上运行,但我试图在“活动”弹出对话框中使用相同的自定义字段。将 Activity 直接添加到项目时,我也遇到错误,指出时间条目需要原因代码,但我无权将其添加到列表以显示在活动 Panel/Dialog 中. 请参阅下面的屏幕截图:

忽略 Activity 原因代码,这是我添加的附加自定义字段以测试自定义。

我想在这里添加我的自定义字段:

下面是扩展class DAC。

using PX.Data;
using PX.Objects.CS;
using PX.Objects.PM;
using iPlanReasonCode.Helpers;

namespace PX.Objects.CR
{
    public class PMTimeActivityExt : PXCacheExtension<PX.Objects.CR.PMTimeActivity>
    {
        #region UsrReasonCode
        [PXDBString]
        [PXUIField(DisplayName = "Reason Code")]
        [PXDefault]
        [PXSelector(typeof(Search<CSAttributeDetail.valueID, Where<CSAttributeDetail.attributeID.IsEqual<ReasonCodeAttributeID>>>),
            typeof(CSAttributeDetail.valueID), typeof(CSAttributeDetail.description), SubstituteKey = typeof(CSAttributeDetail.valueID), DescriptionField = typeof(CSAttributeDetail.description))]
        [PXUIRequired(typeof(Where<PMTimeActivity.isBillable.IsEqual<True>.And<PMTimeActivity.timeSpent.IsNotEqual<PMTimeActivity.timeBillable>>.And<Where<Selector<PMTimeActivity.projectID, PMProject.customerID>, IsNotNull>>>))]
        public virtual string UsrReasonCode { get; set; }
        public abstract class usrReasonCode : PX.Data.BQL.BqlString.Field<usrReasonCode> { }
        #endregion
    }
}

下面是辅助常量 class 以将其指向正确的属性代码。

using PX.Data;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace iPlanReasonCode.Helpers
{
    public class ReasonCodeAttributeID  : PX.Data.BQL.BqlString.Constant<ReasonCodeAttributeID>   
    {
        public ReasonCodeAttributeID()
                : base("CUSTREASON")
        { }
    }
}

所以这个有点棘手,由于某种原因,自定义项目浏览器上 Acumatica 的“添加数据字段”无法识别“TimeActivity”视图,这是您的字段添加到的视图(在 PMTimeActivity 上).

如果您想保留此记录中的字段,您应该做的是手动编辑 ASPX,找到您看到字段引用 Datafield="TimeActivity.***" 的页面区域,然后手动添加 XML 以相同的方式标记和引用时间活动数据视图,例如DataField="TimeActivity.UsrYourCustomField"

文本框:

   <px:PXTextEdit ID="chkYourField" runat="server" DataField="TimeActivity.UsrYourCustomField" />

复选框:

   <px:PXCheckBox ID="chkYourField" runat="server" DataField="TimeActivity.UsrYourCustomField" />

手动添加标签后,您就可以使用 UI

移动标签

如果您想跳过所有这些并让它变得简单,请将您的自定义字段移至 CRActivity DAC