In my scenario while importing data from excel I need custom lookup for parameter.
So, below code is combination of importing data from excel and custom lookup for field.
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.ExcelPackage;
using OfficeOpenXml.ExcelRange;
public class INTC_MaterialTakeOffImport
{
public static void main(Args _args)
{
INTC_MaterialTakeOffImport materialTakeOffImport = new INTC_MaterialTakeOffImport();
try
{
ProjTable projTable;
INTC_MaterialTakeOffTable materialTakeOff;
ProjId projId;
if(_args.record().TableId == tableNum(ProjTable))
{
projTable = _args.record();
projId = projTable.ProjId;
}
else if(_args.record().TableId == tableNum(INTC_MaterialTakeOffTable))
{
materialTakeOff = _args.record();
projId = materialTakeOff.ProjId;
}
if(projId)
{
materialTakeOffImport.import(projId);
}
else
{
Error("ProjId not exist");
}
}
catch
{
Error("Data uploading failed");
}
}
public void import(ProjId _projId)
{
System.IO.Stream stream;
ExcelSpreadsheetName sheeet;
FileUploadBuild fileUpload;
DialogGroup dlgUploadGroup;
FileUploadBuild fileUploadBuild;
FormBuildControl formBuildControl;
DialogFIeld mtkoNumber;
DialogFIeld modelId;
DialogFIeld specId;
DialogFIeld procurementCategoryId;
INTC_MaterialTakeOffTable materialTakeOffTable;
InventTable inventTable;
InventTableModule inventTableModule;
numberSeq numSeq;
INTC_MTKONumber seqId;
numSeq = numberSeq::newGetNum(ProjParameters::numRefMKTONum());
Dialog dialog = new Dialog("Material take off Import");
dlgUploadGroup = dialog.addGroup("@SYS54759");
formBuildControl = dialog.formBuildDesign().control(dlgUploadGroup.name());
mtkoNumber = dialog.addField( extendedTypeStr(INTC_MTKONumber), 'MTKO Number');
mtkoNumber.allowEdit(false);
mtkoNumber.value(numSeq.num());
modelId = dialog.addField( extendedTypeStr(INTC_ModelId), 'Model Id');
specId = dialog.addField( extendedTypeStr(INTC_SpecId), 'Specs Id');
procurementCategoryId = dialog.addField(extendedTypeStr(Name),'Procurement Category Id');
procurementCategoryId.registerOverrideMethod(methodstr(FormStringControl, lookUp),methodstr(INTC_MaterialTakeOffImport, procurementCategoryLookup),this);
fileUploadBuild = formBuildControl.addControlEx(classstr(FileUpload), "Upload");
fileUploadBuild.style(FileUploadStyle::MinimalWithFilename);
fileUploadBuild.fileTypesAccepted(".xlsx");
if (dialog.run() && dialog.closedOk())
{
FileUpload fileUploadControl = dialog.formRun().control(dialog.formRun().controlId("Upload"));
FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult();
if (fileUploadResult != null && fileUploadResult.getUploadStatus())
{
stream = fileUploadResult.openResult();
using (ExcelPackage Package = new ExcelPackage(stream))
{
int rowCount, i;
Package.Load(stream);
ExcelWorksheet worksheet = package.get_Workbook().get_Worksheets().get_Item(1);
OfficeOpenXml.ExcelRange range = worksheet.Cells;
rowCount = worksheet.Dimension.End.Row - worksheet.Dimension.Start.Row + 1;
for (i = 2; i<= rowCount; i++)
{
select firstonly inventTable where inventTable.ItemId == range.get_Item(i, 1).value;
if(inventTable)
{
select inventTableModule
join inventTable
where inventTable.ItemId == inventTableModule.ItemId
&& inventTableModule.ModuleType == ModuleInventPurchSales::Purch
&& inventTableModule.ItemId == inventTable.ItemId;
ttsbegin;
materialTakeOffTable.ProjId = _projId;
materialTakeOffTable.INTC_MTKONumber = mtkoNumber.value();
materialTakeOffTable.ModelId = modelId.value();
materialTakeOffTable.INTC_SpecId = specId.value();
materialTakeOffTable.ProcurementCategoryId = procurementCategoryId.value();
materialTakeOffTable.ItemId = range.get_Item(i, 1).value;
materialTakeOffTable.Remarks = range.get_Item(i, 2).value;
materialTakeOffTable.QtyRequired = range.get_Item(i, 3).value;
materialTakeOffTable.Uom = inventTableModule.UnitId;
materialTakeOffTable.UnitCost = inventTableModule.Price;
materialTakeOffTable.CategoryId = inventTable.projCategoryId;
materialTakeOffTable.AvailableQty = this.onhandQty(range.get_Item(i, 1).value);
materialTakeOffTable.QtyToOrder = materialTakeOffTable.QtyRequired - materialTakeOffTable.AvailableQty;
materialTakeOffTable.TotalCost = materialTakeOffTable.QtyRequired * inventTableModule.Price;
materialTakeOffTable.insert();
ttscommit;
}
else
{
warning(strFmt("Item Id #%1 not found in data base, line is not imported", range.get_Item(i, 1).value));
}
}
info("MTKO data uploaded");
}
}
else
{
error("file not selected");
}
}
}
//Customlookup for procurement category Id
public void procurementCategoryLookup(FormStringControl _control)
{
SysTableLookup sysTableLookUp;
QueryBuildDataSource qbds;
Query query = new Query();
qbds = query.addDataSource(tableNum(ProjCategory));
qbds.addRange(fieldNum(ProjCategory, CategoryType)).value(strFmt("%1", ProjCategoryType::Item));
sysTableLookUp = SysTableLookup::newParameters(tableNum(ProjCategory), _control, true);
sysTableLookUp.addLookupfield(fieldNum(ProjCategory, CategoryId),true);
sysTableLookUp.addLookupfield(fieldNum(ProjCategory, Name));
sysTableLookUp.parmQuery(query);
sysTableLookUp.performFormLookup();
}
public InventQty onhandQty(ItemId _itemId)
{
InventDim inventDim;
InventDimParm inventDimParm;
Itemid itemid;
InventOnHand inventOnHand;
InventQty availQty;
itemid = _itemId;
inventDim.InventSiteId = '';
inventDim.InventLocationId = '';
inventDimParm.initFromInventDim(inventDim);
inventOnHand = InventOnhand::newParameters(itemid, inventDim, inventDimParm);
availQty = inventOnHand.availPhysical();
return availQty;
}
}
So, below code is combination of importing data from excel and custom lookup for field.
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.ExcelPackage;
using OfficeOpenXml.ExcelRange;
public class INTC_MaterialTakeOffImport
{
public static void main(Args _args)
{
INTC_MaterialTakeOffImport materialTakeOffImport = new INTC_MaterialTakeOffImport();
try
{
ProjTable projTable;
INTC_MaterialTakeOffTable materialTakeOff;
ProjId projId;
if(_args.record().TableId == tableNum(ProjTable))
{
projTable = _args.record();
projId = projTable.ProjId;
}
else if(_args.record().TableId == tableNum(INTC_MaterialTakeOffTable))
{
materialTakeOff = _args.record();
projId = materialTakeOff.ProjId;
}
if(projId)
{
materialTakeOffImport.import(projId);
}
else
{
Error("ProjId not exist");
}
}
catch
{
Error("Data uploading failed");
}
}
public void import(ProjId _projId)
{
System.IO.Stream stream;
ExcelSpreadsheetName sheeet;
FileUploadBuild fileUpload;
DialogGroup dlgUploadGroup;
FileUploadBuild fileUploadBuild;
FormBuildControl formBuildControl;
DialogFIeld mtkoNumber;
DialogFIeld modelId;
DialogFIeld specId;
DialogFIeld procurementCategoryId;
INTC_MaterialTakeOffTable materialTakeOffTable;
InventTable inventTable;
InventTableModule inventTableModule;
numberSeq numSeq;
INTC_MTKONumber seqId;
numSeq = numberSeq::newGetNum(ProjParameters::numRefMKTONum());
Dialog dialog = new Dialog("Material take off Import");
dlgUploadGroup = dialog.addGroup("@SYS54759");
formBuildControl = dialog.formBuildDesign().control(dlgUploadGroup.name());
mtkoNumber = dialog.addField( extendedTypeStr(INTC_MTKONumber), 'MTKO Number');
mtkoNumber.allowEdit(false);
mtkoNumber.value(numSeq.num());
modelId = dialog.addField( extendedTypeStr(INTC_ModelId), 'Model Id');
specId = dialog.addField( extendedTypeStr(INTC_SpecId), 'Specs Id');
procurementCategoryId = dialog.addField(extendedTypeStr(Name),'Procurement Category Id');
procurementCategoryId.registerOverrideMethod(methodstr(FormStringControl, lookUp),methodstr(INTC_MaterialTakeOffImport, procurementCategoryLookup),this);
fileUploadBuild = formBuildControl.addControlEx(classstr(FileUpload), "Upload");
fileUploadBuild.style(FileUploadStyle::MinimalWithFilename);
fileUploadBuild.fileTypesAccepted(".xlsx");
if (dialog.run() && dialog.closedOk())
{
FileUpload fileUploadControl = dialog.formRun().control(dialog.formRun().controlId("Upload"));
FileUploadTemporaryStorageResult fileUploadResult = fileUploadControl.getFileUploadResult();
if (fileUploadResult != null && fileUploadResult.getUploadStatus())
{
stream = fileUploadResult.openResult();
using (ExcelPackage Package = new ExcelPackage(stream))
{
int rowCount, i;
Package.Load(stream);
ExcelWorksheet worksheet = package.get_Workbook().get_Worksheets().get_Item(1);
OfficeOpenXml.ExcelRange range = worksheet.Cells;
rowCount = worksheet.Dimension.End.Row - worksheet.Dimension.Start.Row + 1;
for (i = 2; i<= rowCount; i++)
{
select firstonly inventTable where inventTable.ItemId == range.get_Item(i, 1).value;
if(inventTable)
{
select inventTableModule
join inventTable
where inventTable.ItemId == inventTableModule.ItemId
&& inventTableModule.ModuleType == ModuleInventPurchSales::Purch
&& inventTableModule.ItemId == inventTable.ItemId;
ttsbegin;
materialTakeOffTable.ProjId = _projId;
materialTakeOffTable.INTC_MTKONumber = mtkoNumber.value();
materialTakeOffTable.ModelId = modelId.value();
materialTakeOffTable.INTC_SpecId = specId.value();
materialTakeOffTable.ProcurementCategoryId = procurementCategoryId.value();
materialTakeOffTable.ItemId = range.get_Item(i, 1).value;
materialTakeOffTable.Remarks = range.get_Item(i, 2).value;
materialTakeOffTable.QtyRequired = range.get_Item(i, 3).value;
materialTakeOffTable.Uom = inventTableModule.UnitId;
materialTakeOffTable.UnitCost = inventTableModule.Price;
materialTakeOffTable.CategoryId = inventTable.projCategoryId;
materialTakeOffTable.AvailableQty = this.onhandQty(range.get_Item(i, 1).value);
materialTakeOffTable.QtyToOrder = materialTakeOffTable.QtyRequired - materialTakeOffTable.AvailableQty;
materialTakeOffTable.TotalCost = materialTakeOffTable.QtyRequired * inventTableModule.Price;
materialTakeOffTable.insert();
ttscommit;
}
else
{
warning(strFmt("Item Id #%1 not found in data base, line is not imported", range.get_Item(i, 1).value));
}
}
info("MTKO data uploaded");
}
}
else
{
error("file not selected");
}
}
}
//Customlookup for procurement category Id
public void procurementCategoryLookup(FormStringControl _control)
{
SysTableLookup sysTableLookUp;
QueryBuildDataSource qbds;
Query query = new Query();
qbds = query.addDataSource(tableNum(ProjCategory));
qbds.addRange(fieldNum(ProjCategory, CategoryType)).value(strFmt("%1", ProjCategoryType::Item));
sysTableLookUp = SysTableLookup::newParameters(tableNum(ProjCategory), _control, true);
sysTableLookUp.addLookupfield(fieldNum(ProjCategory, CategoryId),true);
sysTableLookUp.addLookupfield(fieldNum(ProjCategory, Name));
sysTableLookUp.parmQuery(query);
sysTableLookUp.performFormLookup();
}
public InventQty onhandQty(ItemId _itemId)
{
InventDim inventDim;
InventDimParm inventDimParm;
Itemid itemid;
InventOnHand inventOnHand;
InventQty availQty;
itemid = _itemId;
inventDim.InventSiteId = '';
inventDim.InventLocationId = '';
inventDimParm.initFromInventDim(inventDim);
inventOnHand = InventOnhand::newParameters(itemid, inventDim, inventDimParm);
availQty = inventOnHand.availPhysical();
return availQty;
}
}
No comments:
Post a Comment