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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.02.2018, 13:23   #1  
KaBu is offline
KaBu
Участник
 
10 / 10 (1) +
Регистрация: 04.01.2018
BinData.setData() Wrong argument type error (AX2012 R3)
Всем добрый день,
Получаю ошибку "Wrong argument type for function" в следующем коде:
EXPOutputLog tabOutputLog;
EXPOutputLogData tabOutputLogData;
container cont;
BinData сlsBinData;
;
clsBinData = new BinData();
tabOutputLogData = EXPOutputLogData::find(tabOutputLog.UnloadNumber);
if (tabOutputLogData)
{
cont = tabOutputLogData.Data;
clsBinData.setData(cont);
}

Поле Data в таблице tabOutputLogData типа Контейнер. Не могу понять, что не так
Upd: вот так тоже не работает
clsBinData = new BinData();
cont = ["222222"];
clsBinData.setData(cont);

Последний раз редактировалось KaBu; 02.02.2018 в 14:18. Причина: update info
Старый 02.02.2018, 17:06   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Метод BinData.setData(), конечно, ожидает в качестве входящего значения контейнер. Но контейнер с содержимым определенного типа. Внутри контейнера должны быть данные типа BLOB, а не String.

В Вашем случае будет работать так

X++:
    cont = binData::stringToData("222222");
    clsBinData = new BinData();
    clsBinData.setData(cont);
Посмотрите, что именно хранится в поле таблицы tabOutputLogData.Data? Какой тип данных внутри контейнера? Т.е. что вернет вот это

X++:
cont = tabOutputLogData.Data;
info(strFmt('%1', typeOf(conPeek(cont, 1))));
Для корректной работы метода binData.setData() там должен быть тип BLOB.
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 02.02.2018 в 17:21.
За это сообщение автора поблагодарили: KaBu (1).
Старый 02.02.2018, 17:32   #3  
KaBu is offline
KaBu
Участник
 
10 / 10 (1) +
Регистрация: 04.01.2018
Спасибо!!!
Старый 02.02.2018, 19:40   #4  
KaBu is offline
KaBu
Участник
 
10 / 10 (1) +
Регистрация: 04.01.2018
Ok, со конвертацией стринга джоб выполнился успешно, но вот класс мне не удалось поправить
Вот этот код:
clsBinData.setData(tabOutputLogData.Data);

поле Data в таблице типа Контейнер

Я проверила, как оно заполняется, вроде должно быть все правильно.
Создаем запись в таблице tabOutputLog в методе saveData
X++:
tabOutputLog.saveData(this.readfilebin(_filename));
В методе readfilebin читаем файл и с помощью getData() пишем данные в контейнер.
X++:
container readfilebin(filename _filename)
{
    fileIOPermission    fileIOPermission;
    BinData             clsBinData; // = new BinData();
    filename            TmpFile = _filename;
    container           Con;
    ;
    fileIOPermission = new FileIOPermission(_filename, #io_read);
    fileIOPermission.assert();

    LclsBinData = new BinData();

    if (!clsBinData.loadFile(_filename))
    {
        CodeAccessPermission::revertAssert();
        throw error(strFmt("@EXP425", TmpFile));
    }
    Con = clsBinData.getData();
    CodeAccessPermission::revertAssert();
    return Con;
}
В метод saveData передаем контейнер
X++:
public void saveData(container _cntData)
{
    CIREXPOutputLogData     ltabInputLogData;
    ;

    ttsbegin;
    ltabInputLogData    =   CIREXPOutputLogData::find(this.UnloadNumber,true);
    if (ltabInputLogData)
    {
        ltabInputLogData.Data   =   _cntData;
        ltabInputLogData.update();
    }
    else
    {
        ltabInputLogData.clear();
        ltabInputLogData.UnloadNumber   =   this.UnloadNumber;
        ltabInputLogData.Data           =   _cntData;
        ltabInputLogData.insert();
    }
    ttscommit;
}
По идее в контейнере должен быть BLOB

Но почему-то я не могу конвертировать этот контейнер в стринг
edtStr = BinData::dataToString(tabOutputLogData.Data);
Ловлю трассировку стека, неправильный параметр

Может быть эта ошибка из.за того, что контейнер пустой в моем примере?

Последний раз редактировалось KaBu; 02.02.2018 в 19:44. Причина: update
Старый 02.02.2018, 20:54   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от KaBu Посмотреть сообщение
По идее в контейнере должен быть BLOB

Но почему-то я не могу конвертировать этот контейнер в стринг
edtStr = BinData::dataToString(tabOutputLogData.Data);
Ловлю трассировку стека, неправильный параметр

Может быть эта ошибка из.за того, что контейнер пустой в моем примере?
Да. С пустым контейнером будет ошибка. Собственно, легко проверяется

X++:
BinData::dataToString(conNull());
Получим ошибку "Неверный параметр"

Если же подставить какое-то реальное значение, то все будет корректно

X++:
info(BinData::dataToString(binData::stringToData("222222")))
Соответственно, перед конвертацией содержимого поля, его следует проверять на пустоту явным образом. Ну, как-то так...

X++:
if (!tabOutputLogData.Data)
{
   warning('Нет данных');
}
else
{
   edtStr = BinData::dataToString(tabOutputLogData.Data);
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
bindata

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: November 2017 Release – Dynamics AX 2012 R3 Blog bot DAX Blogs 0 08.12.2017 10:51
Art Of Creation: Enterprise Portal: Wrong type of element at call of ConPoke Blog bot DAX Blogs 0 13.09.2017 17:11
emeadaxsupport: 4. Solving Fill Utility errors on Microsoft Dynamics AX 2012 - Error executing code: Wrong argument types for comparison (another scenario) Blog bot DAX Blogs 2 08.02.2012 09:21
emeadaxsupport: 3. Solving Fill Utility errors on Microsoft Dynamics AX 2012 - Error executing code: Wrong argument types for comparison Blog bot DAX Blogs 1 08.02.2012 08:53
Wrong argument type for function Shannon DAX: Программирование 5 10.02.2009 15:57
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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