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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.09.2006, 18:37   #1  
somebody is offline
somebody
Участник
 
128 / 30 (2) +++
Регистрация: 30.04.2003
Адрес: Москва
2 Gustav
IMHO эти проверки помогают:
1 (и главное). против ошибок собственно программистских...
2. против ошибок, связанных с версиями MS Office, неверно работающими с данной версией Аксапты (несертифицированных для данной версии Аксапты)...
Это по моему опыту.
Старый 01.09.2006, 21:57   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
somebody, спасибо за мнение, позволю себе немножко поразглагольствовать

Речь моя не о проверках вообще, а об их избыточном, как мне кажется, количестве именно в классе ComExcelDocument_RU.
Начну со второго тезиса:
Цитата:
Сообщение от somebody
2. против ошибок, связанных с версиями MS Office, неверно работающими с данной версией Аксапты (несертифицированных для данной версии Аксапты)
Я знаю только одну подобную проблему - c Value и Value2 при переходе от Excel 2000 к Excel XP. Причем, класс ComExcelDocument_RU использует безопасное Value2, ничего при этом как раз не проверяя. Существуют ли еще какие-то примеры подобного рода "борьбы" с версиями Office?
Цитата:
Сообщение от somebody
1 (и главное). против ошибок собственно программистских...
Ну, какого рода могут быть ТАКИЕ ошибки при спуске по простой иерархии Excel: Application - Workbook - Worksheet - Range у программиста в здравом уме и светлой памяти? Если он полезет в Range, не получив сначала ссылки на один из вышестоящих объектов, то это отловится на этапе отладки и он это поправит. Он наверняка знает, что если задаст номер строки больше, чем 65536, то тоже получит ошибку. Но речь-то о проверках существования объектов вроде "if (!m_comApplication)", а не "if (row > 65536)". Именно эти проверки я не понимаю...

Давайте посмотрим для иллюстрации "первозданную" (со слоя dis) реализацию метода findRange:
Код:
// Creates object range type named the same way as Excel bookmark
// bookMark -> Excel bookmark name
protected COM findRange(MSOfficeBookMark_RU bookMark, int _workSheet = 1)
{
    COM comRange,
        comWorkSheet;
    COM comApplication;
    ;
    if (m_comDocument)
    {
        comWorkSheet   = this.getWorkSheet(_workSheet);
        comApplication = m_comDocument.application();
        comWorkSheet.activate();
        if (comWorkSheet && comApplication)
        {
            comRange = comApplication.range(bookMark);
        }
    }
    return comRange;
}
Извините уж, немножко "оторвусь"

Первое "идеологическое" замечание: что это за "Excel bookmark" такой, по которому находится объект Range? По смыслу это адрес ячейки вида "А1" или имя именованного диапазона, создаваемое, например, командой "Вставка-Имя-Присвоить" - также в виде строки вида "МояЯчейка" или "МойДиапазон". Но в большинстве случаев это именно адрес вида "А1", или "F19", или "IV65536" и т.п. Так почему не назвать просто и "по-родному по-эксельному" - Address?

Посмотрим, кстати, в AOT, что это за EDT такой навороченный - MSOfficeBookMark_RU. Находим: стринг 80 символов, Label - "Закладка", HelpText - "Введите название закладки, в которую будут эскпортироваться данные"... Уф-уф-уф... Вместо того, чтобы выходить из чащи, мы в нее еще глубже прёмся... Почему не использовать обычный тип "str"? Где мы еще хотим использовать этот MSOfficeBookMark_RU? В Ворде, да. Оттуда эта "закладка", похоже и пришла. Так пусть там и будет "закладка", а в Ёкселе будет "адрес" и оба будут типа "str"! А где еще использовать-то этот тип, кроме как в Ворде и Экселе? Или мы хотим от этого типа в дальнейшем порождать какое-то бешенное потомство? Так предок уже сам не совсем нормальный, получается... Какое потомство-то?

Я вам честно говорю, когда я, в Excel'е за 10 лет кое-что уже разумеющий, начал изучение этого класса и набрёл на этот метод, то просто съёжился: "range" - интуитивно понятно, "worksheet" - тоже, но что такое в этой связке "bookMark" с типом "MSOfficeBookMark_RU"? ооой...

Далее - "документ". В Ворде это "Document", согласен. Но в Экселе-то - "Workbook"! Зачем привычную иерархию "Application - Workbook - Worksheet - Range" менять на "Application - Document - Worksheet - Range"? Цель какая? Сбить с толку человека, знакомого с Excel ранее? Вполне получается.

Или все силы брошены на поддержку наследования с гордым предком ("родителем") ComOfficeDocument_RU и двумя послушными потомками ("детьми") ComExcelDocument_RU и ComWordDocument_RU? Мы собираемся создавать еще "внуков"? Интересно, как они примерно могут называться: "Эксель Экселей" или "Ворд Вордов"? А "родителя" мы создали только потому, что у "детей" есть похожие операции типа "OpenFile" или "QuitApplication"?

Уф, в запальчивости устал. Прервусь пока.
(to be continued later...)
Теги
best practice, spreadsheet, как правильно, стиль программирования

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
args в классе от RunBase Zoe DAX: Программирование 5 11.12.2008 18:20
Баг (?) в классе LedgerBalanceDim Peter Savintsev DAX: Программирование 3 18.06.2008 05:41
Кэш в классе Specification Hyper DAX: Программирование 0 12.04.2008 18:52
Как в наследуемом классе кл. RunBase перехватывать модиф. полей м.Prompt() alef_nor DAX: Программирование 2 11.05.2006 15:07
как обратиться в классе к тек.записи? sev DAX: Программирование 20 02.08.2005 11:05

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:25.