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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.02.2020, 16:09   #1  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
DAX2009: как получить Bitmap
Есть такой стандартный метод:
X++:
client server
static Bitmap  companyLogo()
{
    CompanyInfo companyInfo = CompanyInfo::find();
    ;
    return CompanyImage::find(companyInfo.DataAreaId, companyInfo.TableId, companyInfo.RecId).Image;
}
Используется для отображении на отчете.
Вопрос, подскажите метод которым возвращает Bitmap из картинки с сервера по заданному пути.
Старый 12.02.2020, 16:36   #2  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Используйте объект Image
X++:
    Image   image;
    ;
    
    image.loadFile(...);
    return image.getData();
__________________
// no comments
Старый 12.02.2020, 17:15   #3  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Спасибо.
Подскажите еще а какая логика работы этого метода FormLetter::companyLogo() в моем первом посте ?

Правильно ли я понял что в аксапте есть форма CompanyImage в которую загружаются файлы а потом извлекаются? Может можно как-то загрузить нужный файл?

X++:
CompanyImage::find(companyInfo.DataAreaId, companyInfo.TableId, companyInfo.RecId).Image
Посмотрев, вижу следующие методы:

Последний раз редактировалось oleggy; 15.02.2020 в 09:15.
Старый 13.02.2020, 05:06   #4  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Судя по названию - это просто хранение логотипа компании. Использовать как хранилище левых изображений - смысла нет.
Старый 13.02.2020, 06:47   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
В таблице CompanyImage обычно хранятся логотипы компании. Форма CompanyImage позволяет загрузить и отобразить соответствующую картинку.
При желании можно использовать эту таблицу для хранения любого количества изображений, причем каждая запись из этой таблицы привязывается к любой записи любой таблицы (через RefTableId, RefRecId). Однако на практике редко так делают.

Собственно логика метода companyLogo() заключается в том, что вы подсовываете запись текущей компании (здесь проще было бы использовать метод findByRecord) и возвращаете значение поля Image.

Еще для справки, поля, хранящие Bitmap, имеют тип контейнера, но обычными средствами вы не извлечете из него ни байта. Для работы с изображениями предназначен класс Image, работающий с Bitmap на низком уровне.
__________________
// no comments
Старый 13.02.2020, 08:55   #6  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Я правильно понял что мне лучше реализовать свой метод. И где нужно использовать его в отчетах?
X++:
client server
static Bitmap companyLogoCustom(str path)
{
    Image image = new Image();
    ;
    image.loadImage(path);
    return image.getData();
}
кстати c loadFile - не работает

Просто я так и не понял мне выходит нужно единоразово загрузить свой файл в таблицу CompanyImage с помощью Job.
А потом просто извлекать его? Но по каким параметрам?
Просто есть логотип компании но другой и его по хорошему тоже надо хранить и отображать в отчетах в определенных случаях.

Последний раз редактировалось oleggy; 13.02.2020 в 09:09.
За это сообщение автора поблагодарили: dech (2).
Старый 13.02.2020, 09:58   #7  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Существует множество решений.
Могу предложить самый простой способ в CompanyInfo добавить новое поле для вашего логотипа.
И да, достаточно единоразово добавить файл в базу данных.
__________________
// no comments
Старый 13.02.2020, 11:59   #8  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Я правильно понял мне нужно добавить в таблицу СompanyInfo еще одну запись?
Открыв таблицу я вижу как раз только одну запись в этой таблице.

Но судя по методу существует еще таблица CompanyImage.
Открыв ее вижу несколько записей.
И вот как раз у этой записи есть поле Image.

Или добавить на форму СompanyInfo ?

Какие дальнейшие шаги? Можете расписать поподробнее?

Последний раз редактировалось oleggy; 13.02.2020 в 12:04.
Старый 13.02.2020, 12:09   #9  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Цитата:
Сообщение от oleggy Посмотреть сообщение
Я правильно понял мне нужно добавить в таблицу СompanyInfo еще одну запись?
Новую запись создавать не надо. Опишите более подробно что вообще вы хотите сделать? Какая задача стоит?
Изначально сделано что у компании может быть только один логотип.
В вашем случае как я понял Один логотип для одних документов, Другой логотип для других документов. Так?
Старый 13.02.2020, 13:07   #10  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Совершенно верно.
Хотелось бы этот логотип загрузить в БД аксапты а потом его извлекать.

Вариант брать логотип из файла мне кажется не оптимальным вариантом, хотя я такой способ уже реализовал.
Просто хотелось бы решение такое же универсальное как по умолчанию:
X++:
CompanyImage::find(companyInfo.DataAreaId, companyInfo.TableId, companyInfo.RecId).Image
Либо какое то другое но без использования файлов.
Старый 13.02.2020, 13:39   #11  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
48 / 37 (2) +++
Регистрация: 14.05.2005
Цитата:
Сообщение от oleggy Посмотреть сообщение
Совершенно верно.
Либо какое то другое но без использования файлов.
Поместите ваши лого в ресурсы. Вынимать из ресурсов картинки можно так.

X++:
 display Bitmap ImageBitmapTest()  
  {  
    ;  
    return SysResource::getResourceNodeData(SysResource : : getResourceNode('ImageName'));  
  }
Подойдёт такой подход?
Старый 13.02.2020, 14:00   #12  
smailik is offline
smailik
Участник
Аватар для smailik
 
250 / 70 (3) ++++
Регистрация: 10.04.2012
Адрес: Москва
Либо создайте в CompanyImage еще одно поле с картинкой. В нем у вас будет ваше новое изображение. Либо создать в CompanyImage поле с типом. Добавить это поле необязательным параметром в find. И для вашего варианта будет
X++:
CompanyImage::find(companyInfo.DataAreaId, companyInfo.TableId, companyInfo.RecId, MyImageType::AddImage).Image
Старый 13.02.2020, 15:08   #13  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от oleggy Посмотреть сообщение
Я правильно понял мне нужно добавить в таблицу СompanyInfo еще одну запись?
Нет, на каждую компанию приходится ровно одна запись CompanyInfo.
Цитата:
Сообщение от oleggy Посмотреть сообщение
Какие дальнейшие шаги? Можете расписать поподробнее?
В чем трудность, чтобы добавить новое поле в таблицу? Что у вас не получается?
__________________
// no comments
Старый 15.02.2020, 09:04   #14  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
Создал поле MyLogo в таблице СompanyInfo, его свойства:

Написал Job:
X++:
static void importCompanyLogo(Args _args)
{
    CompanyInfo companyInfo = CompanyInfo::find();
    Bitmap logo;
    CompanyInfo tmp_companyInfo;
    str path;
    ;
    
    path = 'c\\tmp\\logo.png';
    
    if (_fileExists(path))
    {
        ttsbegin;
        
        companyInfo.selectForUpdate(true);

        companyInfo.MyLogo = _getBitmap(path);
        companyInfo.update();
        
        ttscommit;
    }
    
    logo = companyInfo.MyLogo; // данные сохраняются

    tmp_companyInfo = CompanyInfo::find();
    logo = tmp_companyInfo.MyLogo;  // пустое поле

    if (!logo)
    {
        info("поле пустое");
    }
}

public server static Bitmap _getBitmap(str path)
{
    Image image = new Image();
    ;
    image.loadImage(path);
    return image.getData();
}
Вижу что на выходе данные сохраняются в таб. переменную. И там действительно хранится картинка (я проверил).
Но при повторном выполнении в этой таблице это поле уже пустое. В другой таб.переменной так же пустое.

Последний раз редактировалось oleggy; 15.02.2020 в 10:30.
Старый 15.02.2020, 12:53   #15  
Pandasama is offline
Pandasama
Участник
 
448 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
а CompanyInfo у вас одна и та же, в которую записали картинку и в которой проверяете?
Старый 15.02.2020, 16:46   #16  
oleggy is offline
oleggy
Участник
 
253 / 36 (2) +++
Регистрация: 03.12.2019
Адрес: Россия
в Job видно что я использую одну и ту же компанию.
P.S. к тому же в таблице CompanyInfo только одна запись.

Последний раз редактировалось oleggy; 15.02.2020 в 17:55.
Старый 17.02.2020, 13:47   #17  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
642 / 347 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Вы неверно сравниваете.
Все у вас нормально сохраняется.
Нельзя вот так просто взять и привести контейнер к булевому типу.
Всегда сравнивайте контейнеры с функцией connull().
X++:
if (logo != connull()) ...
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обработка из DAX2009 писем в разных почтовых серверах по каким-то общим технологиям Raven Melancholic DAX: Программирование 20 23.06.2018 18:10
Вызов SOAP сервиса из DAX2009 без использования references - есть ли примеры в стандартном приложении Raven Melancholic DAX: Программирование 5 23.04.2017 14:45
DAX2009 не дружит с VS2010 oleg_e DAX: Администрирование 2 17.06.2010 10:34
Как преобразовать System.Drawing.Bitmap в Bitmap/Image Аксапты? rkorchagin DAX: Программирование 7 31.03.2009 15:59
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:35.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.