Product Master data Import through Job

Hi Friends,

I have been completed the Product master data import by running Job through CSV file. Here is the code which i have given below and some of the fields which has been customized. So if you want those code remove all customized fields and do your own. If you have any query about my code please feel free to contact me.

Code:

static void IT_Abs_ProdMasterDataImport(Args _args)

{

CommaIO csvFile;

container readCon;

counter icount,inserted;

container line;

Dialog dialog;

DialogField dfFileName;

FileName fileName;

IT_TestImport _IT_TestImport,it_update;

EcoResDistinctProduct _ecodist;

EcoResProductTranslation _ecotrans, _EcoResProdTrans;

EcoResProductIdentifier _ecoident;

EcoResStorageDimensionGroup _stodim;

EcoResTrackingDimensionGroup _trackdim;

EcoResStorageDimensionGroupProduct _ecostoragedimpro;

EcoResTrackingDimensionGroupProduct _ecotrackingdimpro;

EcoResProduct _ecoprd,_Ecoresprod,_ecoprupdate;

EcoResStorageDimensionGroup _EcoResStorageDimensionGroup;

EcoResTrackingDimensionGroup _EcoResTrackingDimensionGroup;

RetailInventTable _RetailInventTable;

Inventtable _InventTable,inventcheck;

Inventtablemodule _Inventtablemodule;

EcoResReleaseSessionProduct _EcoResReleaseSessionProduct;

EcoResReleaseSession _EcoResReleaseSession;

EcoResReleaseProductLegalEntity _EcoResReleaseProductLegalEntity;

EcoResStorageDimensionGroupItem _EcoResStorageDimensionGroupItem;

EcoResTrackingDimensionGroupItem _EcoResTrackingDimensionGroupItem;

InventModelGroup _InventModelGroup;

InventModelGroupItem _InventModelGroupItem;

InventItemGroupItem _InventItemGroupItem;

EcoResProductCategory _EcoResProductCategory;

EcoResCategory _EcoResCategory;

EcoResCategoryHierarchy _EcoResCategoryHierarchy;

DataArea _DataArea;

EcoResStorageDimensionGroupName _StorageDimensionGroupName;

EcoResTrackingDimensionGroupName _TrackingDimensionGroupName;

InventModelGroupId _InventModelGroupId;

EcoResCategoryHierarchyName _HierarchyName;

EcoResCategoryName _CategoryName;

RecId _HierarchyNameRecId,_CategoryNameRecId,_ProductRecId;

InventItemLocation _itemlocation;

InventItemSetupSupplytype _setupsupplytype;

TransDate _startdate,enddate;

str _start,_end;

TimeOfDay _sttime,_endtime;

NoYes _noyes;

str _noyesstr;

EcoResProductType _EcoResProductType;

ItemType _itemtype;

str _prodtypestr,_itemtypestr;

EcoResProductMaster _ecoresprodmaster;

EcoResColor _ecorescolor;

EcoResSize _ecoressize;

EcoResStyle _ecoresstyle;

EcoResConfiguration _ecoresconfig,_ecoresconfigIns,_ecoresconfig2;

EcoResSizeName _EcoResSizeName;

EcoResStyleName _EcoResStyleName;

EcoResColorName _EcoResColorName;

EcoResConfigurationName _EcoResConfigName;

EcoResProductDimensionGroup _EcoResProdDimGroup;

EcoResProductDimensionGroupProduct _EcoResProdDimGroupProd;

EcoResProductMasterModelingPolicy _EcoResProdMasterModelingPolicy;

EcoResVariantConfigurationTechnologyType _variantconfigtechenum;

EcoResProductMasterColor _EcoResProdMasterColor;

EcoResProductMasterSize _EcoResProdMasterSize;

EcoResProductMasterStyle _EcoResProdMasterstyle;

EcoResProductMasterConfiguration _EcoResProdMasterConfig;

EcoResProductDimensionAttribute _EcoResProdDimAttr1,_EcoResProdDimAttr2,_EcoResProdDimAttr3,_EcoResProdDimAttr4;

EcoResProductVariantColor _EcoResProdVariantColor;

EcoResProductVariantSize _EcoResProdVariantSize;

EcoResProductVariantStyle _EcoResProdVariantStyle;

EcoResProductVariantConfiguration _EcoResProdVariantConfig;

EcoResDistinctProductVariant _EcoResDistProdVariant;

InventDimCombination _InventDimCombination;

str _variantconfigtechstr;

RefRecId _RefRecId;

EcoResProductDimensionGroupName _EcoResProdDimGrpName;

InventDim _invtdim;

#File

;

inserted= 0;

dialog = new Dialog(“Select File to Import Item Master”);

dfFileName = dialog.addField(extendedTypeStr(FileNameOpen));

dialog.filenameLookupFilter([“All files”, #AllFiles]);

if (dialog.run())

{

filename = dfFileName.value();

}

_startdate = systemDateGet();

_sttime = timeNow();

_start = time2str(_sttime,TimeSeparator::Colon, TimeFormat::AMPM);

csvFile = new CommaIO(filename, ‘r’);

if (csvFile)

{

while (csvFile.status() == IO_Status::OK)

{

readCon = csvFile.read();

icount++;

if(icount != 1)

{

if (readCon)

{

ttsBegin;

_IT_TestImport.Prodnum = conPeek(readCon,1);

_IT_TestImport.Searchname = conPeek(readCon,2);

_IT_TestImport.ProductName = conPeek(readCon,3);

_IT_TestImport.StorageDimGroup = conPeek(readCon,4);

_IT_TestImport.InventUnit = conPeek(readCon,6);

_IT_TestImport.PurchUnit = conPeek(readCon,7);

_IT_TestImport.SalesUnit = conPeek(readCon,8);

_IT_TestImport.ProdCompany = conPeek(readCon,9);

_IT_TestImport.ItemGroupId = conPeek(readCon,10);

_prodtypestr = conPeek(readCon,11);

_itemtypestr = conPeek(readCon,11);

_IT_TestImport.Itemtype = str2enum(_itemtype,_itemtypestr);

_IT_TestImport.InventModelGrpId = conPeek(readCon,12);

_IT_TestImport.TrackingDimGroup = conPeek(readCon,24);

_IT_TestImport.Description = conPeek(readCon,32);

_IT_TestImport.OldItemNum = conPeek(readCon,37);

_IT_TestImport.ExpireDays = conPeek(readCon,38);

_IT_TestImport.BarcodesetupId = conPeek(readCon,39);

_noyesstr = conPeek(readCon,40);

_IT_TestImport.ScaleItem = str2enum(_noyes,_noyesstr);

_IT_TestImport.ConcessionVendAcc = conPeek(readCon,41);

_IT_TestImport.CategoryName = conPeek(readCon,43);

_IT_TestImport.CategoryHierarichy = conPeek(readCon,44);

_IT_TestImport.doInsert();

_EcoResColorName = conPeek(readCon,46);

_EcoResSizeName = conPeek(readCon,47);

_EcoResStyleName = conPeek(readCon,48);

_EcoResConfigName = conPeek(readCon,50);

select _ecorescolor where _ecorescolor.Name == _EcoResColorName;

select _ecoressize where _ecoressize.Name == _EcoResSizeName;

select _ecoresstyle where _ecoresstyle.Name == _EcoResStyleName;

if(_EcoResConfigName)

{

select _ecoresconfig where _ecoresconfig.Name == _EcoResConfigName;

if(!_ecoresconfig)

{

_ecoresconfigIns.Name = _EcoResConfigName;

_ecoresconfigIns.insert();

}

}

_ecoresprodmaster.DisplayProductNumber = _IT_TestImport.Prodnum;

_ecoresprodmaster.SearchName = _IT_TestImport.Searchname;

_ecoresprodmaster.ProductType = str2enum(_EcoResProductType,_prodtypestr);

_ecoresprodmaster.CIT_AL_ItemGroupId = _IT_TestImport.ItemGroupId ;

_variantconfigtechstr = conPeek(readCon,49);

_ecoresprodmaster.VariantConfigurationTechnology = str2enum(_variantconfigtechenum,_variantconfigtechstr);

_ecoresprodmaster.insert();

_RefRecId = _ecoresprodmaster.RecId;

_EcoResProdDimGrpName = conPeek(readCon,45);

select _EcoResProdDimGroup where _EcoResProdDimGroup.Name == _EcoResProdDimGrpName;

_EcoResProdDimGroupProd.Product = _RefRecId;

_EcoResProdDimGroupProd.ProductDimensionGroup = _EcoResProdDimGroup.RecId;

_EcoResProdDimGroupProd.insert();

_EcoResProdMasterModelingPolicy.ProductMaster = _RefRecId;

_EcoResProdMasterModelingPolicy.IsVariantGenerationEnabled = NoYes::No;

_EcoResProdMasterModelingPolicy.insert();

_ecotrans.Product = _RefRecId;

_ecotrans.LanguageId = “en-us”;

_ecotrans.Name = _IT_TestImport.Searchname;

_ecotrans.Description = _IT_TestImport.Description;

_ecotrans.insert();

_ecoident.Product = _RefRecId;

_ecoident.ProductNumber = _IT_TestImport.Prodnum;

_ecoident.insert();

_EcoResDistProdVariant.ProductMaster = _RefRecId;

_EcoResDistProdVariant.DisplayProductNumber = strFmt("%1: %2: %3: %4: %5",_IT_TestImport.Prodnum,_EcoResConfigName,_EcoResSizeName,_EcoResColorName,_EcoResStyleName);

_EcoResDistProdVariant.ProductType = str2enum(_EcoResProductType,_prodtypestr);

_EcoResDistProdVariant.CIT_AL_ItemGroupId = _IT_TestImport.ItemGroupId ;

_EcoResDistProdVariant.SearchName = _IT_TestImport.Searchname;

_EcoResDistProdVariant.insert();

_EcoResProdTrans.Product = _EcoResDistProdVariant.RecId;

_EcoResProdTrans.LanguageId = “en-us”;

_EcoResProdTrans.Name = _IT_TestImport.Searchname;

_EcoResProdTrans.Description = _IT_TestImport.Description;

_EcoResProdTrans.insert();

if(_EcoResColorName)

{

select _EcoResProdDimAttr1 where _EcoResProdDimAttr1.DimensionTableId == _ecorescolor.TableId;

_EcoResProdMasterColor.ColorProductMaster = _RefRecId;

_EcoResProdMasterColor.Color = _ecorescolor.RecId;

_EcoResProdMasterColor.ColorProductDimensionAttribute = _EcoResProdDimAttr1.RecId;

_EcoResProdMasterColor.insert();

_EcoResProdVariantColor.Color = _ecorescolor.RecId;

_EcoResProdVariantColor.DistinctProductVariant = _EcoResDistProdVariant.RecId;

_EcoResProdVariantColor.ProductDimensionAttribute = _EcoResProdDimAttr1.RecId;

_EcoResProdVariantColor.insert();

}

if(_EcoResSizeName)

{

select _EcoResProdDimAttr2 where _EcoResProdDimAttr2.DimensionTableId == _ecoressize.TableId;

_EcoResProdMasterSize.SizeProductMaster = _RefRecId;

_EcoResProdMasterSize.Size = _ecoressize.RecId;

_EcoResProdMasterSize.SizeProductDimensionAttribute = _EcoResProdDimAttr2.RecId;

_EcoResProdMasterSize.insert();

_EcoResProdVariantSize.Size = _ecoressize.RecId;

_EcoResProdVariantSize.DistinctProductVariant = _EcoResDistProdVariant.RecId;

_EcoResProdVariantSize.ProductDimensionAttribute = _EcoResProdDimAttr2.RecId;

_EcoResProdVariantSize.insert();

}

if(_EcoResStyleName)

{

select _EcoResProdDimAttr3 where _EcoResProdDimAttr3.DimensionTableId == _ecoresstyle.TableId;

_EcoResProdMasterstyle.StyleProductMaster = _RefRecId;

_EcoResProdMasterstyle.Style = _ecoresstyle.RecId;

_EcoResProdMasterstyle.StyleProductDimensionAttribute = _EcoResProdDimAttr3.RecId;

_EcoResProdMasterstyle.insert();

_EcoResProdVariantStyle.Style = _ecoresstyle.RecId;

_EcoResProdVariantStyle.DistinctProductVariant = _EcoResDistProdVariant.RecId;

_EcoResProdVariantStyle.ProductDimensionAttribute = _EcoResProdDimAttr3.RecId;

_EcoResProdVariantStyle.insert();

}

if(_EcoResConfigName)

{

select _EcoResProdDimAttr4 where _EcoResProdDimAttr4.DimensionTableId == _ecoresconfig.TableId;

select _ecoresconfig2 where _ecoresconfig2.Name == _EcoResConfigName;

_EcoResProdMasterConfig.ConfigProductMaster = _RefRecId;

_EcoResProdMasterConfig.Configuration = _ecoresconfig2.RecId;

_EcoResProdMasterConfig.ConfigProductDimensionAttribute = _EcoResProdDimAttr4.RecId;

_EcoResProdMasterConfig.insert();

_EcoResProdVariantConfig.Configuration = _ecoresconfig2.RecId;

_EcoResProdVariantConfig.DistinctProductVariant = _EcoResDistProdVariant.RecId;

_EcoResProdVariantConfig.ProductDimensionAttribute = _EcoResProdDimAttr4.RecId;

_EcoResProdVariantConfig.insert();

}

select _stodim where _stodim.Name == _IT_TestImport.StorageDimGroup;

_ecostoragedimpro.Product = _RefRecId;

_ecostoragedimpro.StorageDimensionGroup = _stodim.RecId;

_ecostoragedimpro.insert();

select _trackdim where _trackdim.Name == _IT_TestImport.TrackingDimGroup;

_ecotrackingdimpro.Product = _RefRecId;

_ecotrackingdimpro.TrackingDimensionGroup = _trackdim.RecId;

_ecotrackingdimpro.insert();

select _ecoprd where _ecoprd.DisplayProductNumber == _IT_TestImport.Prodnum;

if(_ecoprd)

{

select ItemId from inventcheck where inventcheck.ItemId == _IT_TestImport.Prodnum

&& inventcheck.Product == _ecoprd.RecId;

if(!inventcheck)

{

select _EcoResReleaseSession;

_EcoResReleaseSessionProduct.initValue();

_EcoResReleaseSessionProduct.Product = _ecoprd.RecId;

_EcoResReleaseSessionProduct.ReleaseSession = _EcoResReleaseSession.RecId;

_EcoResReleaseSessionProduct.insert();

select _DataArea where _DataArea.id == ‘AMCG’;

_EcoResReleaseProductLegalEntity.initValue();

_EcoResReleaseProductLegalEntity.ReleaseSessionProduct = _EcoResReleaseSessionProduct.RecId;

_EcoResReleaseProductLegalEntity.LegalEntity = _DataArea.RecId;

_EcoResReleaseProductLegalEntity.insert();

_InventTable.initValue();

_InventTable.ItemId = _ecoprd.DisplayProductNumber;

_InventTable.Product = _ecoprd.RecId;

_InventTable.NameAlias = _ecoprd.SearchName;

_InventTable.ItemType = _IT_TestImport.Itemtype;

_InventTable.PmfYieldPct = 100.0;

_InventTable.PmfProductType = PmfProductType::BOM;

Select _InventItemGroupItem where _InventItemGroupItem.ItemId == _InventTable.ItemId;

if(!_InventItemGroupItem)

{

InventItemGroupItem::updateItemGroupForItem(_InventTable.ItemId,_InventTable.dataAreaId,_ecoprd.CIT_AL_ItemGroupId,_InventTable.dataAreaId);

}

_InventTable.CIT_AL_OldItemNumber = _IT_TestImport.OldItemNum;

_InventTable.CIT_AL_ExpireDays = _IT_TestImport.ExpireDays;

_InventTable.Product = _ecoprd.RecId;

_InventTable.insert();

_Inventtablemodule.initValue();

_Inventtablemodule.ItemId = _InventTable.ItemId;

_Inventtablemodule.ModuleType = ModuleInventPurchSales::Invent;

_Inventtablemodule.UnitId = _IT_TestImport.InventUnit;

_Inventtablemodule.insert();

_Inventtablemodule.initValue();

_Inventtablemodule.ItemId = _InventTable.ItemId;

_Inventtablemodule.ModuleType = ModuleInventPurchSales::Purch;

_Inventtablemodule.UnitId = _IT_TestImport.PurchUnit;

_Inventtablemodule.insert();

_Inventtablemodule.initValue();

_Inventtablemodule.ItemId = _InventTable.ItemId;

_Inventtablemodule.ModuleType = ModuleInventPurchSales::Sales;

_Inventtablemodule.UnitId = _IT_TestImport.SalesUnit;

_Inventtablemodule.insert();

_itemlocation.initValue();

_itemlocation.ItemId = _InventTable.ItemId;

_invtdim = InventDim::findOrCreateBlank();

_itemlocation.inventDimId = _invtdim.inventDimId;

_itemlocation.insert();

_setupsupplytype.ItemId = _InventTable.ItemId;

_setupsupplytype.ItemDataAreaId = _InventTable.dataAreaId;

_setupsupplytype.DefaultOrderType = ReqPOType::Purch;

_setupsupplytype.insert();

_InventDimCombination.DistinctProductVariant = _EcoResDistProdVariant.RecId;

_InventDimCombination.ItemId = _InventTable.ItemId;

_InventDimCombination.InventDimId = _itemlocation.inventDimId;

_InventDimCombination.insert();

_EcoResStorageDimensionGroupItem.initValue();

_StorageDimensionGroupName = _IT_TestImport.StorageDimGroup;

_EcoResStorageDimensionGroupItem.ItemId = _InventTable.ItemId;

&nb

HI Abbas,

Im also doing Item Master Import into dynamics ax 2012 I tried with DMF Tool But its throwing error

Nw i jus want to know the flow of your code and Pls guide me with your ideas for importing item master and also explain me your code in detail.

IT_TestImport ,wat it means in the above code

Hi Gurusamy,

Actually my requirement is to import the Items data into Product master as well as release the same items in a specified company from CSV file.

So what I have done first I have taken all the CSV file values into IT_testimport table(table for import) then inserted the variants (if req) .

After that I am releasing the current item into the mentioned specific company. by debugging the code you can get the flow of the Item master creation as well as release,

Regards,

Abbas

Hi,

abbas thanks for your immediate reply and i got the o/p for product master and im having one more doubt like how to read

excell addin data to a temp table without recid instead of reading a csv file im having a requirement to read excel add in into a temp table and have to update the temp table datas to dynamics product master table through job.If you have any ideas relevant to this kindly share your experience its very urgent requirement.

Thanks in advance.

Hi,

In this code above, IT_testimport table type is Regular which is given by me instead of that give tabletype as TmpDb in table property. Then import all the data into the TmpDb from CSV .

Then you can retrieve the data by using code like

while select tmpdb

{

inventTable.ItemId = tmpdb.itemid;

inventtable.insert();

}

Regards,

Abbas

Hi,

In this code above, IT_testimport table type is Regular which is given by me instead of that give tabletype as TmpDb in table property. Then import all the data into the TmpDb from CSV .

Then you can retrieve the data by using code like

while select tmpdb

{

inventTable.ItemId = tmpdb.itemid;

inventtable.insert();

}

Regards,

Abbas

Thks Abbas,

it works i got the output.do u have any knowledge on EP,if u know kindly share your document.

Happy New Year-Abbas

Wish you the same…:slight_smile:

Can i have your mail id

Hi abbas,

in my case i have to create a form with 3 fields.i have to open that form through navigation pane as well as menu item button in list page.

while opening up the form in navigation pane one particular field should be in edit mode.

while opening up the form through list page menu item button the same field should not be in edit mode.

if i set the property allow edit on : no,it get reflected in both the forms.

send me the solution as earlier.

Hi Abbas,

Have u worked on Product Master Import using Services ha?

Hi,

In That Form —> Init method write like below

If ( element.args.caller() == formstr(Your Listpage formname)

{

TableDs_Field.AllowEdit(false);

}

else

{

TableDs-Field.allowedit(true);

}

Reagrds,

Abbas

its not working

Dear Abbas,

Great you wrote this code. As I am new to AX and desperate in need of help for creating products. When I am compiling your code I am getting the following error on the line _ecoresprodmaster.CIT_AL_ItemGroupId = _IT_TestImport.ItemGroupId ;

The table EcoResProductMaster does not contain the field CIT_AL_ItemGroupId.

Any light on this will be a great help.

Thanks,

Waseem.

Hi Waseem,

That is customized field so need not to worry about that. Pls avoid that field and go forward.

Regards,

Abbas

Thank you !!!

Waseem

Dear Abbas,

Everything is perfect with the code. But I have a query.

When I am creating a product through user interface it is creating two line in the EcoResProduct and through code it is creating only one. are we missing something? And also Size,Color,Style are not available in Default Product variants.

Thanks,

Waseem.

Dear Abbas,

First point one line instead of two line was code update issue solved. still Size,Color,Style are not available in Default Product variants.

Thanks,

Waseem.