如何将employeeid字段默认为当前登录用户

时间:2017-06-29 13:09:35

标签: acumatica

我有一个自定义查询屏幕,它使用employeeid作为标题过滤器字段。我想做的是将employeeid字段默认为当前登录用户,如果可能的话。我尝试了以下内容,但两个都给了我一个强制转换错误(版本5.3.2562):

1.)  [PXDBDefault(typeof(Search<EPEmployee.bAccountID, 
                         Where<EPEmployee.bAccountID, Equal<Current<AccessInfo.userID>>>>))]

2.)  [PXDBDefault(typeof(AccessInfo.userID))]

以下是过滤器字段的完整DAC代码:

    #region EmployeeID
    public abstract class employeeID : IBqlField
    {
    }
    [PXInt]
    [PXDBDefault(typeof(AccessInfo.userID))]
    [PXUIField(DisplayName = "Employee ID")]
    [PXSelector(typeof(Search<EPEmployee.bAccountID,
                       Where<EPEmployee.status, Equal<SetupTypes.active>>>),
                typeof(EPEmployee.acctCD),
                typeof(EPEmployee.acctName),
                SubstituteKey = typeof(EPEmployee.acctCD),
                DescriptionField = typeof(EPEmployee.acctName))]
    public virtual int? EmployeeID { get; set; }
#endregion

获得此项的正确方法是什么?

2017年6月30日更新: 在实施解决方案(使用PXDefault而不是PXDBDefault)后,如下所示:

 [PXDefault(typeof(Search<EPEmployee.bAccountID,
                   Where<EPEmployee.bAccountID, Equal<Current<AccessInfo.userID>>>>))]

我收到以下错误:

enter image description here

2 个答案:

答案 0 :(得分:1)

我们在事务中有一个非过滤字段,默认为当前员工。

这应该有效:

[PXDefault(typeof(Search<EPEmployee.bAccountID, 
                     Where<EPEmployee.bAccountID, Equal<Current<AccessInfo.userID>>>>))]

请注意,您不希望将PXDBDefault用作默认值,除非它们是与PXParent链接时来自父DAC的值。使用PXDefault作为默认值。

如果这在您的过滤器中不起作用,请尝试使用PXUnboundDefault代替PXDefault

编辑6/30/2017:选择器上可能出现新错误。有一个员工选择器已经可用。移除您的PXSelector并在您的字段上使用[PXEPEmployeeSelector],看看这是否解决了uniqueidentifier和int

之间的错误

答案 1 :(得分:0)

AccessInfo.userID似乎是一个GUID。为了避免转换错误,您需要在搜索EPEmployee.bAccountID时将AccessInfo.userID与EPEmployee.userID关联。最终代码应如下所示:

    #region EmployeeID
    public abstract class usrEmployeeID : IBqlField
    {
    }
    [PXEPEmployeeSelector]
    [PXUnboundDefault(typeof(Search<EPEmployee.bAccountID,
                 Where<EPEmployee.userID, Equal<Current<AccessInfo.userID>>>>))]
    [PXUIField(DisplayName = "Employee ID")]
    public virtual int? UsrEmployeeID { get; set; }
    #endregion