Hi viewers,
Today I am goi
ng to show, import files from the folder and after importing move files to the corresponding folders(error, success)
public class
LLCOMSSecProdFeed extends
RunBaseBatch
{
object formRun;
FilePath folderPath, destFolderPath,
errorFolderPath;
DialogField dialogFolderPath,
dialogDestFolderPath, dialogErrorFolderPath;
#DEFINE.CurrentVersion(1)
#LOCALMACRO.CurrentList
folderPath,
destFolderPath,
errorFolderPath
#ENDMACRO
}
public Object dialog( DialogRunbase _dialog = null
, boolean _forceOnClient = false
)
{
DialogRunbase dialog;
dialog
= super();
dialog.caption("Secondary product
feed");
//Description
dialog.addGroup("Description").columns(2);
dialog.addInfoImage();
dialog.addText("Select
folder to extract file", 400);
//File format
dialog.addGroup("File
format").columns(2);
dialog.addImage(10890);
dialog.addText(strFmtLB("@LLC4149"), 400);
//Folder
dialog.addGroup("Source
directory");
dialogFolderPath = dialog.addFieldValue(extendedTypeStr(FilePath), folderPath);
//Archive
dialog.addGroup("Archieve
directory");
dialogDestFolderPath =
dialog.addFieldValue(extendedTypeStr(FilePath),
destFolderPath);
//Error
dialog.addGroup(“Error
directory”);
dialogErrorFolderPath =
dialog.addFieldValue(extendedTypeStr(FilePath),
errorFolderPath);
return
dialog;
}
public boolean
getFromDialog()
{
folderPath = dialogFolderPath.value();
destFolderPath = dialogDestFolderPath.value();
errorFolderPath =
dialogErrorFolderPath.value();
return
super();
}
public container
pack()
{
return
[#CurrentVersion,#CurrentList];
}
public boolean
unpack(container _packedClass)
{
Version version =
runbase::getVersion(_packedClass);
;
switch
(version)
{
case
#CurrentVersion:
[version,#CurrentList] =
_packedClass;
break;
default:
return
false;
}
return
true;
}
public static
ClassDescription description()
{
return
"Description";
}
public server
static LLCOMSSecProdFeed construct()
{
return
new LLCOMSSecProdFeed();
}
public boolean
canGoBatchJournal()
{
return
true;
}
public static
void main(args _args )
{
LLCOMSSecProdFeed llcomsSecProdFeed;
;
llcomsSecProdFeed =
LLCOMSSecProdFeed::construct();
if(llcomsSecProdFeed.prompt())
llcomsSecProdFeed.run();
}
public void
run()
{
InteropPermission interopPerm;
Counter fileCount;
Counter loop, retryCount=0, failedFileCount=0;
System.IO.DirectoryInfo directory;
System.IO.FileInfo[] files;
System.IO.FileInfo file;
System.DateTime dateTime;
str fileNameTemp,
fileName;
boolean success;
str utcTimeAsStr;
interopPerm = new
InteropPermission(InteropKind::ClrInterop);
interopPerm.assert();
folderPath
= @folderPath;
directory
= new
System.IO.DirectoryInfo(folderPath);
files
= directory.GetFiles('*.csv');
fileCount
= files.get_Length();
CodeAccessPermission::revertAssert();
setPrefix(strFmt("@LLC3298"));
for
(loop = 0; loop < fileCount; loop++)
{
file = files.GetValue(loop);
fileNameTemp = file.get_FullName();
fileName = file.get_Name();
setPrefix(strFmt("@LLC3299",fileName));
success =
this.processFile(fileNameTemp);
System.GC::Collect();
dateTime =
System.DateTime::get_UtcNow();
utcTimeAsStr = dateTime.ToString('yyyyMMddHHmmss');
if(success)
{
this.moveFile(@fileNameTemp,@destFolderPath + @'\'
+ utcTimeAsStr + @'_' + @fileName);
}
else
{
this.moveFile(@fileNameTemp,@errorFolderPath + @'\'
+ utcTimeAsStr + @'_' + @fileName);
failedFileCount++;
}
}
if
(failedFileCount > 0)
{
throw
error(strFmt("@LLC3300",failedFileCount));
}
}
public boolean
processFile(Filename _fileNameFrom)
{
CommaIo importFile;
FileIOPermission fioPermission;
Container record;
Filename filenameId;
ItemId itemId;
boolean firstRow;
boolean ret;
System.Exception ex;
#File
#define.FileColumns(1)
fioPermission = new
FileIOPermission(_fileNameFrom,'r');
fioPermission.assert();
importFile = new
CommaIo(_fileNameFrom,'r');
if
(!importFile || importFile.status() != IO_Status::Ok)
{
throw
error(strfmt("@LLC3295",_fileNameFrom));
}
importFile.inFieldDelimiter(',');
filenameId = strLRTrim(conPeek(fileNameSplit(_fileNameFrom), 2));
firstRow = true;
ret
= true;
try
{
//Header
record = importFile.read();
//wrong
format?
if(conLen(record) != #FileColumns)
throw
error("@SYS98433");
ttsBegin;
while
(importFile.status() == IO_Status::Ok)
{
record = importFile.read();
//empty
record?
if(record
== conNull())
break;
if(firstRow
== true)
{
firstRow = false;
continue;
}
[itemId] = record;
if(!InventTable::exist(itemId))
{
info(strFmt("@LLC4150",
filenameId, itemId));
ret = false;
continue;
}
LLCOMSProdFeedControl::createForItemId(itemId);
}
ttsCommit;
importFile.finalize();
importFile = null;
CodeAccessPermission::revertAssert();
}
catch
{
error(strfmt("@SYS96977"));
ex = ClrInterop::getLastException();
if
(ex != null)
{
ex = ex.get_InnerException();
if
(ex != null)
{
error(ex.ToString());
}
}
importFile.finalize();
importFile = null;
CodeAccessPermission::revertAssert();
ret = false;
}
return
ret;
}
private void
moveFile(str _fileNameFrom, str _fileNameTo)
{
InteropPermission interopPerm;
#File
interopPerm = new
InteropPermission(InteropKind::ClrInterop);
interopPerm.assert();
System.IO.File::Move(_fileNameFrom,_fileNameTo);
CodeAccessPermission::revertAssert();
}