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)); }