Acumatica - Показать / скрыть пользовательские поля данных на лету с помощью кода в событиях - PullRequest
1 голос
/ 25 июня 2019

У меня есть два настраиваемых поля, одно из которых представляет собой раскрывающийся список, а другое представляет собой текстовое поле, один из элементов в раскрывающемся списке - «Другое», я хотел показать настраиваемое поле, только если «Другое» Я выбрал обработчик событий для события FieldUpdated для выпадающего элемента управления и получил следующий код:

protected void CROpportunity_MyCheckbox_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
  var row = (CROpportunity)e.Row;
}

Предположим, первое имя поля - UsrComb, а второе - UsrText.

Как мне показать / скрыть другие элементы управления из этого метода?

Это очень похоже на ситуацию: Acumatica - FieldUpdated - Включить / отключить другой элемент управления, когда флажок отмечен / не отмечен

1 Ответ

1 голос
/ 25 июня 2019

Для этого я бы создал класс StringList для определения вашего списка и значений, а затем использовал бы атрибуты для управления поведением.

Во-первых, класс List (расчески)

public class Combs
{
    //build string list attribute
    public class ListAttribute : PXStringListAttribute
    {
        public ListAttribute() : base(new[]
            {
                Pair(Comb, "Comb"),
                Pair(Other, "Other")
            })
        { }
    }

    //declare constant values
    public const string Comb = "Comb";
    public const string Other = "Other";

    //build constant for values you want to compare in BQL
    public class other : PX.Data.BQL.BqlString.Constant<other>
    {
        public other() : base(Other) {; }
    }
}

Далее идут свойства / атрибуты:

#region UsrComb 
[PXDBString]
[Combs.List]        
[PXUIField(DisplayName = "Comb")]
public virtual string UsrComb { get; set; }
public abstract class usrComb : PX.Data.BQL.BqlBool.Field<usrComb> { }
#endregion


#region UsrText 
[PXDBString]
[PXUIField(DisplayName = "Text")]
//pxdefault is required if you have a PXUIRequired attribute.
[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[PXUIRequired(typeof(Where<usrComb, Equal<Combs.other>>))]
[PXUIVisible(typeof(Where<usrComb, Equal<Combs.other>>))]
[PXUIEnabled(typeof(Where<usrComb, Equal<Combs.other>>))]
public virtual String UsrText { get; set; }
public abstract class usrText : PX.Data.BQL.BqlString.Field<usrText> { }
#endregion

PXUIRequired / Enabled / Visible атрибуты, затем проверьте, чтобы увидетьесли список равен константе.Вы можете использовать любую комбинацию значений.

Поместите свои поля на экран и убедитесь, что для UsrComb для CommitChanges установлено значение True.Вы измените значение на «Другое», и оно затем отобразит текстовое поле и скроет его при возврате.

Если вы хотите очистить значение после того, как выпадающий список изменен на другой, вы можете использовать следующеекод:

protected virtual void CROpportunity_UsrComb_FieldUpdating(PXCache sender, PXFieldUpdatingEventArgs e)
{
    if (e.NewValue == null)
        return;
    string Comb = (string)e.NewValue;

    if (Comb != Combs.Other)
        sender.SetValueExt<CROpportunityExt.usrText>(e.Row, "");
}
...