Image in AX 2009
Insert some of Image to Database back on Dynamics AX 2009
code as below
remark : Jimmy Jun 18th 2010
static void Jimmy_TemporaryfileName(Args _args)
{
/**
Binary image files into picture temporary files
remark by Jimmy Jun 21th 2010
*/
BinData binData;
Filename filename;
FilePath filePath;
InventStdPic InventStdPic;
#WINAPI
str endSlash(str _str)
{
return (strscan(_str, '\\',strlen(_str),-1)) ? _str : _str + '\\';
}
;
select firstonly InventStdPic where InventStdPic.PicsName != '';
binData = new BinData();
binData.setData(InventStdPic.Images);//load file info to BinData
filePath = endSlash(true ? WinAPI::getFolderPath(#CSIDL_INTERNET_CACHE) : xInfo::directory(DirectoryType::Temp));
filename = InventStdPic.Filename(filePath);
binData.saveFile(filename);// saved to the temp file as binData file...
info(filename);
IF(WINAPI::fileExists(filename))
winAPI::shellExecute(filename);
}
代码
void clicked()
{
str filename;
dll dll;
FileNameFilter filter = ['Image Files','*.bmp;*.jpg;*.gif;*.jpeg'];
Bindata binData = new BinData();
Filename onlyFilename;
Filename curFileExtension;
InventStdPic mtInventStdPic;
RecId _RecId;
;
if (!inventStdPic.RecId)
{
info(strfmt("@PIC24"));
return;
}
filename = Winapi::getOpenFileName(element.hWnd(),filter,'', "@SYS53008", '','');
if(!filename)
return ;
if(!WINAPI::fileExists(filename,false))
return;
if ((filename) && (StrScan(filename,".gif",1,strlen(filename)) > 0))
{
filename = "";
checkFailed(strfmt("@PIC25"));
return;
}
_RecId = inventStdPic.RecId;
if (binData.loadFile(filename))
{
[onlyFilename,curFileExtension] = Docu::splitFilename(filename);
InventStdPic_ds.write();
if (onlyFilename)
{
// backup existing record
if (inventStdPic.PicsName != "")
{
ttsbegin;
select forupdate mtInventStdPic;
mtInventStdPic = inventStdPic.data();
mtInventStdPic.ItemId = '';
mtInventStdPic.DefaultPic = NoYes::No;
mtInventStdPic.ItemType = InventTable.ItemType;
mtInventStdPic.RefRecId = InventTable.RecId;
mtInventStdPic.Images = binData.getData();
mtInventStdPic.ImageSize = WINAPI::fileSize(filename) / 1024 / 1024;
mtInventStdPic.RecId = 0;
mtInventStdPic.insert();
ttscommit;
inventStdPic.Posted = NoYes::No;
}// end - backup existing record
InventStdPic.PicsExtension = curFileExtension;
InventStdPic.PicsName = NumberSeq::newGetNum(NumberSeqReference::findReference(TypeId2ExtendedTypeId(typeid(JIB_ItemPicsFileName)))).num();
inventStdPic.ItemId = inventTable.ItemId;
inventStdPic.Images = binData.getData();
inventStdPic.ImageSize = WINAPI::fileSize(filename) / 1024 / 1024;
inventStdPic.ItemType = InventTable.ItemType;
inventStdPic.RefRecId = InventTable.RecId;
inventStdPic.PrintItemId = inventTable.ItemId;
}
}
InventStdPic_ds.active();
inventStdPic_ds.executeQuery();
inventStdPic_ds.research();
inventStdPic_ds.findRecord(InventStdPic::findByRecId(_RecId));
element.redraw();
}
Changed Images
代码
void ChangedImages()
{
#WINAPI
FilePath _FilenameOpen;
Container con;
FileNameFilter filter = ["Image Files","*.bmp;*.jpg;*.gif;*.jpeg"];
Image logoImage = new Image();
;
try
{
_FilenameOpen = WinAPI::getOpenFileName(element.hWnd(),filter,WinAPI::getFolderPath(#CSIDL_Personal),
"@SYS53008", '','');
if(!_FilenameOpen || !WINAPI::fileExists(_FilenameOpen))
return ;
logoImage.loadImage(_FilenameOpen);
con = global::fileNameSplit(_FilenameOpen);
ttsbegin;
DocuTest = QVS_DocuTest::find(QVS_DocuTest.ItemId, QVS_DocuTest.ConfigId,true);
if(!DocuTest)
{
DocuTest.ItemId = QVS_DocuTest.ItemId;
DocuTest.ConfigId = QVS_DocuTest.ConfigId;
DocuTest.FilePath = _FilenameOpen;
DocuTest.FileName = Conpeek(con,2);
DocuTest.FileType = Conpeek(con,3);
DocuTest.Image = logoImage.getData();
DocuTest.insert();
}
else
{
DocuTest.Image = logoImage.getData();
DocuTest.update();
}
ttscommit;
}
catch(exception::Error)
{
throw error("Insert Images Error!");
}QVS_DocuTest_ds.reread();
QVS_DocuTest_ds.refresh();
QVS_DocuTest_ds.findRecord(QVS_DocuTest);
}
display Images
代码
void ShowImages()
{
Bindata binData = new BinData();
Image logoImage = new Image();
container PicContainer;
real PicRatio;
;
element.lock();
binData.setData(QVS_DocuTest.Image);
PicContainer = binData.getData();
logoImage.setData(PicContainer);
if (logoImage.height() > 360 || logoImage.width() > 360)
{
if (logoImage.height() > logoImage.width())
PicRatio = 360/logoImage.height();
else
PicRatio = 360/logoImage.width();
}
Images.widthValue( logoImage.width() * PicRatio);
Images.heightValue( logoImage.height() * PicRatio);
Images.image(logoImage);
element.redraw();
element.unLock();
}
browse Images(writed to actived method on the current datasource)
代码
void ShowImage()
{
Image logoImage = new Image();
real PicRatio = 1.0;
;
element.lock();
logoImage.setData(InventStdPic.Images);
/*
if (logoImage.height() > 360 || logoImage.width() > 360)
{
if (logoImage.height() > logoImage.width())
PicRatio = 360 / logoImage.height();
else
PicRatio = 360 / logoImage.width();
}
*/
Images.widthValue( logoImage.width());// * PicRatio);
Images.heightValue( logoImage.height());// * PicRatio);
Images.image(logoImage);
element.redraw();
element.unLock();
}
public void executeQuery()
{
;
this.query().dataSourceNo(1).addRange(fieldnum(InventStdPic,recid)).value(queryvalue(_recId));
super();
}
public int active()
{
int ret;
ret = super();
element.ShowImage();
return ret;
}
代码
public void init()
{
;
if (this.args().caller().name() != formstr(InventTable))
{
return;
}
super();
_recId = this.args().caller().PictureTable();
select firstonly InventStdPic where InventStdPic.RecId ==_recId;
//element.ShowImage();
}
customization Imporm to the ERP system (Select a picture path with button on the FORM)
Jimmy July 29th 2010
void clicked()
{
FilePath FilePath;
System.IO.DirectoryInfo DirInfo;
System.IO.FileInfo[] Fileinfos;
System.IO.FileInfo FI;
int i,Length,m;
BinData binData = new BinData();
InventStdPic InventStdPic;
Test _Test;
name name;
Container con;
InventTable InventTable;
;
filePath = WinAPI::browseForPath(element.hWnd(),"selection file path");//FilePath = @"d:\Pic0608\";
if(!filePath)
throw error("please selection picture folder path!");
if(!box::yesNo(strfmt("Are you sure Import some picture (%1 )to ERP system",filePath),dialogButton::No,'Import picture'))
return ;
DirInfo = new System.IO.DirectoryInfo(FilePath);
Fileinfos = DirInfo.GetFiles();
Length = Fileinfos.get_Length();
delete_from _test ;
for (i = 0; i < Length; i++)
{
FI = Fileinfos.GetValue(i);
FI.get_DirectoryName();
name = FI.get_FullName();
_test.Name = name;
_test.ItemId = global::StrDelete(fi.get_Name(),'.JPG');//CPP-259000.jpg - > get Item number
if(_test.ItemId != 'Thumbs.db')
{
InventTable = InventTable::find(_test.ItemId);
if(InventTable)
{
con = global::fileNameSplit(name);//[filepath, _filename, fileExt];
binData.loadFile(name);
InventStdPic.ItemId = InventTable.ItemId;
InventStdPic.PrintItemId = InventTable.ItemId;
InventStdPic.WithItem = NoYes::Yes;
InventStdPic.ItemType = inventTable.ItemType;
InventStdPic.RefRecId = inventTable.RecId;
InventStdPic.RefTableId = tablenum(InventTable);
InventStdPic.PicsName = conpeek(Con,2);
InventStdPic.PicsExtension = conpeek(Con,3);
InventStdPic.Images = binData.getData();
InventStdPic.ImageSize = WINAPI::fileSize(name) / 1024 / 1024;
InventStdPic.TempFilePath = name;
InventStdPic.LineNum = 1;
InventStdPic.PicsName = NumberSeq::newGetNum(NumberSeqReference::findReference(TypeId2ExtendedTypeId(typeid(JIB_ItemPicsFileName)))).num();
InventStdPic.insert();
_test.Pirce = InventStdPic.ImageSize;
_test.IsPic = Noyes::Yes;
_test.insert();
m++;
}
else
info(_test.ItemId);
}
}
info(strfmt("total import picture %1 per!",m));
}


浙公网安备 33010602011771号