AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2010, 15:02   #1  
Oleksandr is offline
Oleksandr
Участник
Аватар для Oleksandr
 
68 / 17 (1) ++
Регистрация: 19.03.2005
Адрес: Киев
AX 2009 EP: Лукап для енумов
Коллеги,

Задача - вверху формы с гридом сделать кастомный быстрый фильтр для поля типа "енум". Очень хотелось бы, чтобы работало как в стандартном фильтре (можно выбрать мышкой несколько значений, они через запятую подставляются в поле, можно писать в поле ручками и т.п. - см. вложение).

На деле выходит - либо свой стандартный стрингЕдит - тогда нету лукапа, либо выпадающий список - тогда нельзя вводить несколько значений.

Наверное, можно расковырять стандартный фильтр, но в шарпе пока не настолько силен .

Решал ли кто-то такую задачу? Спасибо
Изображения
 
__________________
--
regards, Oleksandr
Старый 25.08.2010, 15:52   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Не очень понял задачу. Может тема фильтр Base Enum-a вам поможет
Старый 25.08.2010, 16:40   #3  
Oleksandr is offline
Oleksandr
Участник
Аватар для Oleksandr
 
68 / 17 (1) ++
Регистрация: 19.03.2005
Адрес: Киев
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Не очень понял задачу. Может тема фильтр Base Enum-a вам поможет
Это, как я понял, для клиента - а мне нужно в вебе...
__________________
--
regards, Oleksandr
Старый 26.08.2010, 15:35   #4  
Oleksandr is offline
Oleksandr
Участник
Аватар для Oleksandr
 
68 / 17 (1) ++
Регистрация: 19.03.2005
Адрес: Киев
В результате самый приемлимый воркэраунд, который придумал - отдельная табличка в Аксапте, которая через DictEnum заполняет себе в строки значения енума.
Лукап на веб-комопненте делается через ЕДТ, ссылающийся на эту табличку.

Другой вариант - дизассемблить AxGridView и стырить с него реализацию фильтра - сложноват в разработке и поддержке.
__________________
--
regards, Oleksandr
За это сообщение автора поблагодарили: mazzy (2).
Старый 22.01.2013, 13:34   #5  
Eloy is offline
Eloy
Участник
 
10 / 17 (1) ++
Регистрация: 28.07.2010
AX 2009 EP Lookup из enum
Как на портале сделать Lookup из enum.
В AxLookup в markup добавляем ContentTemplate.
PHP код:
                <dynamics:AxLookup ID="AxLookupType" runat="server" ShowFilter="False" 
                    
TargetControlId="txtType">
                    <
ContentTemplate></ContentTemplate>
                </
dynamics:AxLookup
В коде:
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  
Bergman is offline
Bergman
Участник
 
50 / 18 (1) ++
Регистрация: 07.12.2012
Цитата:
Сообщение от Eloy Посмотреть сообщение
Как на портале сделать Lookup из enum.
В AxLookup в markup добавляем ContentTemplate.
И в итоге будет кастомный фильтр с возможностью маркировки?
Старый 22.01.2013, 16:36   #7  
Eloy is offline
Eloy
Участник
 
10 / 17 (1) ++
Регистрация: 28.07.2010
Цитата:
Сообщение от Bergman Посмотреть сообщение
И в итоге будет кастомный фильтр с возможностью маркировки?
В итоге будет 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

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
gatesasbait: Dynamics AX 2009 SSRS and SSAS Integration Tips Blog bot DAX Blogs 3 09.07.2009 13:07
Solutions Monkey: Deploying Ax 2009 SP1 EP Blog bot DAX Blogs 0 05.02.2009 07:08
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:54.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.