Acumatica 将PXUIFieldAttribute.SetEnabled重写为PXUIEnabledAttribute

Acumatica 将PXUIFieldAttribute.SetEnabled重写为PXUIEnabledAttribute,acumatica,Acumatica,您好,我正在为SOOrder.orderType编写PXUIEnabledAttribute 这是为了限制(在本例中)具有te仓库角色的用户更改订单类型 protected void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { var row = (SOOrder)e.Row; string username = Base.Accessinfo.UserName;

您好,我正在为SOOrder.orderType编写PXUIEnabledAttribute 这是为了限制(在本例中)具有te仓库角色的用户更改订单类型

    protected void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {

        var row = (SOOrder)e.Row;

        string username = Base.Accessinfo.UserName;
        UsersInRoles a = PXSelect<UsersInRoles, Where2<Where<UsersInRoles.rolename, Equal<Required<UsersInRoles.rolename>>>,
                                                         And<UsersInRoles.username, Equal<Required<UsersInRoles.username>>>>>.Select(this.Base, "Warehousing", Base.Accessinfo.UserName);

        if (a != null)
        {
            PXUIFieldAttribute.SetEnabled<SOOrder.orderType>(cache, e.Row, false);

        }

    } 

但是我正在尝试为仓库和用户名创建PX.Data.BQL.BqlString.Constant类。

一个问题可能是您只将字段设置为禁用,但没有其他逻辑将其重新启用(如果a==null)

因此,请按如下方式更改代码:

   protected void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
    {
        var row = (SOOrder)e.Row;
        string username = Base.Accessinfo.UserName;
        UsersInRoles a = PXSelect<UsersInRoles, Where2<Where<UsersInRoles.rolename, 
                              Equal<Required<UsersInRoles.rolename>>>,
                              And<UsersInRoles.username,      
                              Equal<Required<UsersInRoles.username>>>>>
        .Select(this.Base, "Warehousing", Base.Accessinfo.UserName);

        PXUIFieldAttribute.SetEnabled<SOOrder.orderType>(cache, e.Row, a == null);

        } 
protectedvoid SOOrder\u row选中(PXCache缓存,PXRowSelectedEventArgs e)
{
var row=(SOOrder)e.row;
字符串username=Base.Accessinfo.username;
usersina=PXSelect
.选择(this.Base,“Warehousing”,Base.Accessinfo.UserName);
PXUIFieldAttribute.SetEnabled(缓存,如行,a==null);
} 
关于BQL常量,您可以创建一个新的BQLConstants类,在其中存储常量,如下所示:

public class BQLConstants
{
  public class warehousing: Constant<String>
        {
            public warehousing() : base("Warehousing") { }
        } 
}
   Where<UsersInRoles.rolename, Equal<BQLConstants.warehousing>>,
公共类BQLConstants
{
公共类仓库:常量
{
公共仓库():基本(“仓库”){}
} 
}
然后,您的查询变成如下所示:

public class BQLConstants
{
  public class warehousing: Constant<String>
        {
            public warehousing() : base("Warehousing") { }
        } 
}
   Where<UsersInRoles.rolename, Equal<BQLConstants.warehousing>>,
其中,
但是,我不建议将用户名或现有Acumatica常量存储为您自己的[duplicate]常量

至于PXUIEnabledAttribute,它的工作原理如下 [PXUIEnabled(typeof(Where))]


我绝对建议您参加T100、T200和T300课程,以熟悉Acumatica定制。

将“a==null”放在PXUIFieldAttribute中是一个非常酷的想法谢谢,但是我想了解constat类是如何工作的,以及如何创建/实现themI,直到现在我才发现我想要的类是2019R1的纯调用版本,服务器是在2018R2上