Одной из проблем может быть то, что вы устанавливаете только поле как отключенное, но другой логики для его повторного включения нет (если == ноль).
Поэтому измените код следующим образом:
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);
}
Что касается констант BQL, вы можете создать новый класс BQLConstants, в котором вы будете хранить ваши константы, например:
public class BQLConstants
{
public class warehousing: Constant<String>
{
public warehousing() : base("Warehousing") { }
}
}
, тогда ваш запрос станет примерно таким:
Where<UsersInRoles.rolename, Equal<BQLConstants.warehousing>>,
Однако я не рекомендую хранить имена пользователей или существующие константы Acumatica как свои собственные [дубликаты] константы.
Что касается PXUIEnabledAttribute, он работает следующим образом [PXUIEnabled (typeof (Где <... добавьте ваше условие здесь ...>))]
Я бы определенно рекомендовал взять T100, T200и курсы T300 для ознакомления с настройками Acumatica.