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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2011, 16:31   #1  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
! Ax 3.0 SP 3. Интересный факт с передачей параметров во внутренний метод
Разбираясь с одним вопросом (комуй интересно вот с этим) случайно наткнулся на интересный факт

компилятор не проверяет передаваемые параметры в методах, которые написаны внутри других методов (или внутри джоба).

вот пример:
X++:
static void Job685(Args _args)
{
    void mthd1(int  _i)
    {
        int i;
        ;

        i++;
    }
    ;

    mthd1();
}
как мы видим метод mthd1() имеет один обязательный параметр, но вызываю я его без параметров, и никаких ошибок не выдается, ни на момент компиляции, ни на момент выполнения!

теперь обратная ситуация:
X++:
static void Job685(Args _args)
{
    void mthd1()
    {
        int i;
        ;

        i++;
    }
    ;

    mthd1(1);
}
метод mthd1() не имеет никаких параметров на входе, но при вызове этого метода, я ему передаю единичку. И вновь компилятор молчит, но при выполнении джоба, все таки открывается отладчик и появляется окошко о неверно вызванном методе!

P.S. я всегда был против такого использования методов, но иногда необходимость заставляет так писать.

В общем будте внимательны, при передаче параметров во внутренние методы!

P.S.1. Чуть не забыл, в Ax2009 эту ситуацию исправили, и компилятор на такие вещи реагирует
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: mazzy (5), Pustik (3), Krasher (1).
Старый 02.12.2011, 18:20   #2  
DmitrySt is offline
DmitrySt
Участник
 
17 / 18 (1) ++
Регистрация: 22.11.2004
Адрес: Минск
Угу, а в методах Maps - по-прежнему не проверяется:
static void Job8(Args _args)
{;
salesLine::findInventTransId("").SalesPurchLine::setPriceAgreement(); // компилируется без проблем
}

при том, что Map SalesPurchLine::setPriceAgreement() определен как

server void setPriceAgreement(InventDim inventDim)agreements select by date
{
PriceDisc priceDisc;
;
и т.д.
}

т.е. InventDim на этапе компиляции не требуется :-)
За это сообщение автора поблагодарили: lev (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamics-ax: Expert SSRS with AX Tip from Michael Stashwick Blog bot DAX Blogs 0 14.01.2011 05:18
semanticax: Dynamics AX 2009 Installation - Application Blog bot DAX Blogs 0 22.12.2010 08:11
AX.NET: интеграция .NET-приложений с Аксаптой и (будущие) возможности облачных вычислений gl00mie DAX: Программирование 2 23.04.2010 00:47
Печать этикеток из AX 4.0 sp.2 Alexx7 DAX: Программирование 23 14.09.2009 16:07
Arijit Basu: Reporting & BI in AX: An Overview [Level 100] Blog bot DAX Blogs 0 07.01.2008 16:01

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

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

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