25.08.2010, 15:02 | #1 |
Участник
|
AX 2009 EP: Лукап для енумов
Коллеги,
Задача - вверху формы с гридом сделать кастомный быстрый фильтр для поля типа "енум". Очень хотелось бы, чтобы работало как в стандартном фильтре (можно выбрать мышкой несколько значений, они через запятую подставляются в поле, можно писать в поле ручками и т.п. - см. вложение). На деле выходит - либо свой стандартный стрингЕдит - тогда нету лукапа, либо выпадающий список - тогда нельзя вводить несколько значений. Наверное, можно расковырять стандартный фильтр, но в шарпе пока не настолько силен . Решал ли кто-то такую задачу? Спасибо
__________________
-- regards, Oleksandr |
|
25.08.2010, 15:52 | #2 |
Участник
|
Не очень понял задачу. Может тема фильтр Base Enum-a вам поможет
|
|
25.08.2010, 16:40 | #3 |
Участник
|
Цитата:
Сообщение от S.Kuskov
Не очень понял задачу. Может тема фильтр Base Enum-a вам поможет
__________________
-- regards, Oleksandr |
|
26.08.2010, 15:35 | #4 |
Участник
|
В результате самый приемлимый воркэраунд, который придумал - отдельная табличка в Аксапте, которая через DictEnum заполняет себе в строки значения енума.
Лукап на веб-комопненте делается через ЕДТ, ссылающийся на эту табличку. Другой вариант - дизассемблить AxGridView и стырить с него реализацию фильтра - сложноват в разработке и поддержке.
__________________
-- regards, Oleksandr |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
22.01.2013, 13:34 | #5 |
Участник
|
AX 2009 EP Lookup из enum
Как на портале сделать Lookup из enum.
В AxLookup в markup добавляем ContentTemplate. PHP код:
X++: using System; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Microsoft.Dynamics.Framework.Portal.UI.WebControls; using Microsoft.Dynamics.Framework.Portal.UI.WebControls.WebParts; using Microsoft.Dynamics.Framework.Portal.UI; using Microsoft.Dynamics.Framework.Data.Ax; using Microsoft.Dynamics.Framework.Metadata.Ax; using Proxy = Microsoft.Dynamics.Framework.BusinessConnector.Proxy; using ApplicationProxy = Microsoft.Dynamics.Portal.Application.Proxy; using Microsoft.Dynamics.Framework.BusinessConnector.Session; using Microsoft.Dynamics.Framework.BusinessConnector.Adapter; X++: protected void Page_Init(object sender, EventArgs e) { this.AxLookupType.Lookup +=new EventHandler<AxLookupEventArgs>(AxLookupType_Lookup); this.AxLookupType.OkClicked += new EventHandler<AxLookupEventArgs>(AxLookupType_OkClicked); } X++: protected void AxLookupType_Lookup(object sender, AxLookupEventArgs e) { AxLookup lookup = e.LookupControl; CheckBoxList eCheckBoxList = new CheckBoxList(); string iLabel; int myEnum = EnumMetadata.EnumNum(this.AxSession, "myAOTEnumName"); using (Proxy.DictEnum dictEnum = new Proxy.DictEnum(this.AxSession.AxaptaAdapter, myEnum)) { for (int i = 0; i < dictEnum.values(); i++) { iLabel = dictEnum.index2Label(i); if (string.IsNullOrEmpty(iLabel)) iLabel = dictEnum.index2Symbol(i); eCheckBoxList.Items.Add(iLabel); } } lookup.ContentTemplateContainer.Controls.Add(eCheckBoxList); } X++: void AxLookupType_OkClicked(object sender, AxLookupEventArgs e) { string lookupValue = string.Empty; CheckBoxList eCheckBoxList = (CheckBoxList)e.LookupControl.ContentTemplateContainer.Controls[0]; foreach (ListItem li in eCheckBoxList.Items) { if(li.Selected) lookupValue += (lookupValue == string.Empty ? li.Value : "," + li.Value); } e.LookupControl.TargetITextControl.Text = lookupValue; } |
|
22.01.2013, 14:11 | #6 |
Участник
|
|
|
22.01.2013, 16:36 | #7 |
Участник
|
В итоге будет lookup со значениями из enum и множественным выбором и возвратом выбранных значений в поле TextBox (txtType).
Чтобы применить фильтр к гриду по кнопке или по событию нужно будет ещё написать код вроде этого: X++: filterObject filter = new filterObject(); filter.name = "TypeFilter"; if (this.txtType != null && this.txtType.Text != string.Empty) { filter.Add(this.filterBranchCondition("Type", this.txtType.Text)); } this.DataSourceView.UserFilter.SetOpenFilter(filter.GetXml()); X++: protected virtual conditionType filterBranchCondition(string fieldName, string filterValue) { conditionType branchCondition = new conditionType(); branchCondition.status = conditionStatus.open; branchCondition.attribute = fieldName; branchCondition.value = filterValue; branchCondition.@operator = operatorType.eq; return branchCondition; } X++: private AxDataSourceView dataSourceViewValue; protected AxDataSourceView DataSourceView { get { if (dataSourceViewValue == null) dataSourceViewValue = this.myAxDataSource.GetDataSourceView(myAxGridView.DataMember); return dataSourceViewValue; } } |
|
|
За это сообщение автора поблагодарили: mazzy (2), perestoronin (1). |
Теги |
ax2009, enterprise portal, enum, lookup |
|
|