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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.07.2007, 13:19   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Продолжение темы.
Выяснилось, что с моими исправлениями даная фича не работает для общих таблиц (SaveDataPerCompany = No), хотя без моих изменений все работало в этом случае. После непродолжительных размышлений над оригинальным кодом я заметил некую странность: мы сначала наполняем контейнер названиями полей в SQL-интерпретации через
X++:
dictTable.fieldName(this.field(i), DbBackend::SQL)
, а затем повторно получаем названия тех же полей, но уже чуть видоизмененным способом:
X++:
dictTable.fieldName(this.field(i),dbBackend::Sql,0,fieldNameGenerationMode::FieldListGroupBy)
Буду рад, если кто-нибудь мне объяснит, почему сделано именно так, а пока предлагаю использовать полученные ранее названия полей. Вот последняя версия метода, работает для общих и раздельных таблиц. Изменения от оригинала минимальны.
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(*)';
    for (i = 1; i <= numberOfFields; i++)
    {
        // andy, 18.07.2007 -->
        //stmtStr += ', ' + dicttable.fieldName(this.field(i),dbBackend::Sql,0,fieldNameGenerationMode::FieldListGroupBy);
        stmtStr += ', ' + conPeek(fields, i);
        // andy, 18.07.2007 <--
    }
    stmtStr += ' from ' + dictTable.name(DbBackend::SQL);
    stmtStr += ' group by ';
    for (i = 1; i <= numberOfFields; i++)
    {
        if (i > 1)
            stmtStr += ', ';
        // andy, 18.07.2007 -->
        //stmtStr += dicttable.fieldName(this.field(i),dbBackend::Sql,0,fieldNameGenerationMode::GroupByFieldList);
        stmtStr += conPeek(fields, i);
        // andy, 18.07.2007 <--
    }
    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");
}
__________________
Андрей.
Теги
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, время: 03:58.