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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.06.2007, 11:55   #1  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Кнопка "Add-ins\Дубликаты" на табличных индексах в АОТ
Вот, случайно обнаружил и спешу поделиться.

Если встать в Репозитарии на любой созданный на таблице индекс и вызвать контекстное меню, то в пункте "Add-ins" появляется интересный пункт "Дубликаты". Он позволяет, в частности, проверить индекс на потенциальную возможность включения уникальности: выводит список повторяющихся значений набора полей из состава индекса, а если не находит дублей, пишет "Без дубликатов".

Правда, у меня он нормально не заработал (АХ 3.0 SP3CU1), вот исправленный код метода SysDictIndex\showDuplicates:
X++:
void showDuplicates()
{
    tableId         tableId         = this.tableid();
    DictTable       dictTable       = new DictTable(tableId);
    boolean         dataPrCompany   = dictTable.dataPrCompany();
    container       fields;
    Counter         numberOfFields  = this.numberOfFields();
    Counter         i;
    str             stmtStr;
    str             resultLineStr;
    str             resultField;
    str             resultField1;
    UserConnection  con             = new UserConnection();
    Statement       stmt            = con.createStatement();
    ResultSet       resultSet;
    boolean         anyDuplicates   = false;
    ;
    if (dataPrCompany)
        fields += dictTable.fieldname(fieldnum(common,DataAreaId),DbBackend::SQL);

    for (i = 1; i <= numberOfFields; i++)
    {
        fields += dictTable.fieldName(this.field(i), DbBackend::SQL);
    }
    if (dataPrCompany)
        numberOfFields++;

    stmtStr = 'select count(*)';
    // andy, 08.06.2007 -->
    if (dataPrCompany)
        stmtStr += ', ' + conPeek(fields, 1);
    //for (i = 1; i <= numberOfFields; i++)
    for (i = 1; i < numberOfFields; i++)
    // andy, 08.06.2007 <--
    {
        stmtStr += ', ' + dictTable.fieldName(this.field(i),dbBackend::Sql,0,fieldNameGenerationMode::FieldListGroupBy);
    }
    stmtStr += ' from ' + dictTable.name(DbBackend::SQL);
    stmtStr += ' group by ';
    // andy, 08.06.2007 -->
    if (dataPrCompany)
        stmtStr += conPeek(fields, 1);
    //for (i = 1; i <= numberOfFields; i++)
    for (i = 1; i < numberOfFields; i++)
    // andy, 08.06.2007 <--
    {
        // andy, 08.06.2007 -->
        //if (i > 1)
        if (dataPrCompany || i > 1)
        // andy, 08.06.2007 <--
            stmtStr += ', ';
        stmtStr += dicttable.fieldName(this.field(i),dbBackend::Sql,0,fieldNameGenerationMode::GroupByFieldList);
    }
    stmtStr += ' having count(*) > 1';
    if (numberOfFields > 0)
    {
        stmtStr += ' order by ';
        for (i = 1; i <= numberOfFields; i++)
        {
            if (i > 1)
                stmtStr += ', ';
            stmtStr += int2str(i+1);
        }
        stmtStr += ' desc';
    }
    resultSet = stmt.executeQuery(stmtStr);

    while (resultSet.next())
    {
        resultLineStr = "@SYS283" + strFmt(': %1', resultSet.getString(1));
        for (i = 1; i <= numberOfFields; i++)
        {
            resultField = strLtrim(resultSet.getString(i+1));
            if (i == 1 && dataPrCompany)
                resultField1 = resultField;
            else
                resultLineStr += strFmt(', %1: \'%2\'', conPeek(fields, i), resultField);
        }
        if (dataPrCompany)
            setPrefix(strFmt('%1: %2', conPeek(fields, 1), resultField1));
        info(resultLineStr);
        anyDuplicates = true;
    }
    if (!anyDuplicates)
        info("@SYS68671");
}
__________________
Андрей.
За это сообщение автора поблагодарили: mazzy (5), Logger (4), Мариночка (2).
Теги
aot, ax2009, ax3.0, ax4.0, code access security, security, баг, безопасность, индекс, инструменты, ошибка, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
После перестроения перекрестных ссылок начинает жутко тормозить Add-Ins MironovI DAX: Программирование 4 27.09.2007 13:46
AX4: Кнопка "Сценарий" в паспорте записи Den Ram DAX: Функционал 2 19.04.2007 13:53
Axapta Lessons: Add menu options to the Add-Ins submenu Blog bot DAX Blogs 0 28.10.2006 18:22
Что делает кнопка "Упорядочить" в форме разноски накладной? Bega DAX: Функционал 1 10.01.2006 12:25
Недоступна кнопка "Разноска" YaHooka DAX: Прочие вопросы 1 24.03.2005 16:57

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

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

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