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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2007, 16:47   #1  
CDan is offline
CDan
Участник
 
23 / 10 (1) +
Регистрация: 17.11.2005
Результат арифметического выражения: "2*2" в 4. Как?
В старом, добром Fox'е это решалось очень просто: val = &str
А как это можно сделать в Axapta?
Спасибо.
Старый 23.07.2007, 16:49   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
поищите по runBuf
Старый 23.07.2007, 16:55   #3  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
evalbuf('2*2')
За это сообщение автора поблагодарили: e@gle (1), CDan (1).
Старый 23.07.2007, 16:58   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вот пример из Tabax:

X++:
//src = 'AnyType mainFun(Object tabax){return '+_s+";}"
void runIt(str _src, boolean _doWrite=true)
{
    XPPCompiler comp=new XPPCompiler();
    ;
    if(comp.compile(_src))
        if (_doWrite)
            this.write(runBuf(_src, element));
        else
            runBuf(_src, element);
    else
        info(comp.errorText());
}
Вариант Жени, конечно, покомпактнее будет
Старый 23.07.2007, 17:17   #5  
CDan is offline
CDan
Участник
 
23 / 10 (1) +
Регистрация: 17.11.2005
Цитата:
Сообщение от EVGL Посмотреть сообщение
evalbuf('2*2')
То, что нужно. Спасибо!
Старый 26.07.2007, 15:22   #6  
CDan is offline
CDan
Участник
 
23 / 10 (1) +
Регистрация: 17.11.2005
Выяснилось, что при выполнении функции evalBuf с некорректным выражением в качестве аргумента (например, с нечисловыми символами), молча прерывается выполнение текущего класса (формирование отчета, например).

Приведенный ниже пример работает и для некорректных выражений, и для случаев деления на 0:

X++:
    real getResult(str _function)
    {
        XPPCompiler comp=new XPPCompiler();
        real        ret;

        _function = 'real result(){return ' + _function + ';}';
        if(comp.compile(_function))
        {
            try
            ret = runBuf(_function);
            catch (Exception::Error)
                infolog.clear();
        }
        return ret;
    }
Tnx 2 Kashperuk
Старый 26.07.2007, 18:04   #7  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Да. Только не забывайте про trustworthy computing и возможность code injection. В 4.0 рекомендуется вызывать ExecutePermission.assert():

X++:
    try
    {
        permission = new ExecutePermission();
        if (permission == null)
            return ...;

        pseudoFunc = "static real func() { return " + expression + "; }";

        permission.assert();

        if(comp.compile(pseudoFunc))
        {
            result = runBuf(expression);
        }
        else
        {
            ...
        }
        CodeAccessPermission::revertAssert();
    }
    catch (Exception::Error)
    {
        ...
    }
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование "русских" данных из ORACLE в SQL. Результат кракозябры. Anton Sk. DAX: Программирование 3 25.03.2008 10:32
"while select" и "Query" ice DAX: Программирование 6 14.03.2007 12:54
ALEG: Можно ли из "клиентского" решения сделать "тиражное" Blog bot DAX Blogs 0 16.11.2006 23:40
Журнал переноса->Строки->Поле "Количество" . Нужен "0" по умолчанию вместо ATimTim DAX: Функционал 5 26.06.2004 12:17
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

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

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

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