02.02.2018, 13:23 | #1 |
Участник
|
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 |
Участник
|
Метод BinData.setData(), конечно, ожидает в качестве входящего значения контейнер. Но контейнер с содержимым определенного типа. Внутри контейнера должны быть данные типа BLOB, а не String.
В Вашем случае будет работать так X++: cont = binData::stringToData("222222"); clsBinData = new BinData(); clsBinData.setData(cont); X++: cont = tabOutputLogData.Data;
info(strFmt('%1', typeOf(conPeek(cont, 1))));
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 02.02.2018 в 17:21. |
|
|
За это сообщение автора поблагодарили: KaBu (1). |
02.02.2018, 17:32 | #3 |
Участник
|
Спасибо!!!
|
|
02.02.2018, 19:40 | #4 |
Участник
|
Ok, со конвертацией стринга джоб выполнился успешно, но вот класс мне не удалось поправить
Вот этот код: clsBinData.setData(tabOutputLogData.Data); поле Data в таблице типа Контейнер Я проверила, как оно заполняется, вроде должно быть все правильно. Создаем запись в таблице tabOutputLog в методе saveData X++: tabOutputLog.saveData(this.readfilebin(_filename)); 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; } 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; } Но почему-то я не могу конвертировать этот контейнер в стринг edtStr = BinData::dataToString(tabOutputLogData.Data); Ловлю трассировку стека, неправильный параметр Может быть эта ошибка из.за того, что контейнер пустой в моем примере? Последний раз редактировалось KaBu; 02.02.2018 в 19:44. Причина: update |
|
02.02.2018, 20:54 | #5 |
Участник
|
Цитата:
X++: BinData::dataToString(conNull()); Если же подставить какое-то реальное значение, то все будет корректно X++: info(BinData::dataToString(binData::stringToData("222222"))) X++: if (!tabOutputLogData.Data) { warning('Нет данных'); } else { edtStr = BinData::dataToString(tabOutputLogData.Data); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
Теги |
bindata |
|
|