我有一个自定义查询屏幕,它使用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>>>>))]
我收到以下错误:
答案 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