Magento Integration Specification ERP Trade Agreement - Product Pricing & Discounts Extract

Magento Integration Specification ERP Trade Agreement - Product Pricing & Discounts Extract:

Main table pricediscadmtrans, need to add NoYesId field.
And write the code by taking extension of the table for Insert and Update methods

 [ExtensionOf(tableStr(PriceDiscAdmTrans))]
final class KGSPMIPriceDiscAdmTrans_Extension
{
    public void  insert()
    {
        this.KGSPMIIsProcessed  = NoYes::No;
        next insert();            
    }
    public void update()
    {
        this.KGSPMIIsProcessed  = NoYes::No;
        next update();  
    }
}
--------------------------------------

For reset for the pricediscadmtrans table of which added field of NoYesId
class KGSPMIPriceDiscAdmTransProcessAllData
{       
    /// <summary>
    /// Runs the class with the specified arguments.
    /// </summary>
    /// <param name = "_args">The specified arguments.</param>
    public static void main(Args _args)
    {
        PriceDiscAdmTrans   priceDiscAdmTrans;;
        int countRec = 0;
        ttsbegin;
        while select forupdate priceDiscAdmTrans
        {
            priceDiscAdmTrans.KGSPMIIsProcessed    = NoYes::No;
            priceDiscAdmTrans.doUpdate();
            countRec++;
        }
        ttscommit;
        Info(strFmt("@KGSPMI:KGSPMIJobUpdate", countRec));
    }
}
------------------------------------

1. Create a BaseEnums with IncrementalExport and FullExport
2. Create a table which to do temporary records comparing from pricediscadmtrans table
    ItemRelation,relation,accountcode,accountrelation,quantityamountfrom,quantityamountto,itemcode

3. Create a Data Contract class for initializing parameters
   [DataContractAttribute]
class KGSPMIPriceDiscAdmTransExportDataContract
{
    KGSPMIExportTradeAgreement       exportTradeAgreement;
    [DataMemberAttribute]
    public KGSPMIExportTradeAgreement parmExportTradeAgreement(KGSPMIExportTradeAgreement _exportTradeAgreement = exportTradeAgreement)
    {
        exportTradeAgreement = _exportTradeAgreement;
        return exportTradeAgreement;
    }
}
--------------------------------------------------------------------
4. Create a service class
  using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.Style;
using OfficeOpenXml.Table;
class KGSPMIPriceDiscAdmTransExportService
{
    PriceDiscAdmTrans                   priceDiscAdmTrans;
    PriceDiscGroup                      priceDiscGroup;
    PriceDiscAdmTrans                   priceDiscAdmTransLoc,priceDiscAdmTransLocValue;
    EcoResProductCategory               prodCategory;
    InventTable                         inventTable;
    str                                 itemValueTable, journalValue;
    KGSPMITradeAgreementItemRelation    tradeAgreementItemRelation;
    KGSPMIExportTradeAgreement          exportTradeAgreement;
    KGSPMIIntegrationParameters         integrationParameters = KGSPMIIntegrationParameters::find();
    void process(KGSPMIPriceDiscAdmTransExportDataContract  _contract)
    {
        KGSPMIBlobFileShareDataWriter   integrationDataWriter;
        const str                       fileName        = "TradeAgreementTransaction.xlsx";
        MemoryStream                    memoryStream    = new MemoryStream();
        ttsbegin;
        using (var package = new ExcelPackage(memoryStream))
        {
            var currentRow = 1;
            var worksheets = package.get_Workbook().get_Worksheets();
            var CustTableWorksheet = worksheets.Add("@KGSPMI:KGSPMIExport");
            var cells = CustTableWorksheet.get_Cells();
           
            OfficeOpenXml.ExcelRange cell = cells.get_Item(currentRow, 1);
            System.String value = "@KGSPMI:KGSPMICustPriceGroup";
            cell.set_Value(value);
           
            cell = null;
            value = "@KGSPMI:KGSPMIItemItemGroup";
            cell = cells.get_Item(currentRow, 2);
            cell.set_Value(value);
            cell = null;
            value = "@SYS152640";
            cell = cells.get_Item(currentRow, 3);
            cell.set_Value(value);
            cell = null;
            value = "@SYS309396";
            cell = cells.get_Item(currentRow, 4);
            cell.set_Value(value);
           
            cell = null;
            value = "@SYS16617";
            cell = cells.get_Item(currentRow, 5);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMIAmount";
            cell = cells.get_Item(currentRow, 6);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMIDiscountPercent1";
            cell = cells.get_Item(currentRow, 7);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMIDiscountPercent2";
            cell = cells.get_Item(currentRow, 8);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMICurrency";
            cell = cells.get_Item(currentRow, 9);
            cell.set_Value(value);
           
            cell = null;
            value = "@KGSPMI:KGSPMIFromDate";
            cell = cells.get_Item(currentRow, 10);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMIToDate";
            cell = cells.get_Item(currentRow, 11);
            cell.set_Value(value);
            cell = null;
            value = "@SYS329986";
            cell = cells.get_Item(currentRow, 12);
            cell.set_Value(value);
            cell = null;
            value = "@KGSPMI:KGSPMIToQty";
            cell = cells.get_Item(currentRow, 13);
            cell.set_Value(value);
            cell = null;
            value = "@SYS328585";
            cell = cells.get_Item(currentRow, 14);
            cell.set_Value(value);
            cell = null;
            value = "@SYS101146";
            cell = cells.get_Item(currentRow, 15);
            cell.set_Value(value);
            exportTradeAgreement    = _contract.parmExportTradeAgreement();
            if(exportTradeAgreement == KGSPMIExportTradeAgreement::FullExport)
            {
                update_recordset priceDiscAdmTrans
                    setting KGSPMIIsProcessed = NoYes::No;
            }
            while select forupdate priceDiscAdmTrans
                where priceDiscAdmTrans.KGSPMIIsProcessed == NoYes::No
                    && priceDiscAdmTrans.KGSPMIPosted == NoYes::Yes
            {
                //Table
                if(priceDiscAdmTrans.ItemCode == PriceDiscProductCodeType::Table)
                {
                    select firstonly1 tradeAgreementItemRelation
                        where tradeAgreementItemRelation.ItemRelation       ==  priceDiscAdmTrans.ItemRelation
                            && tradeAgreementItemRelation.relation          ==  priceDiscAdmTrans.relation
                            && tradeAgreementItemRelation.AccountCode       ==  priceDiscAdmTrans.AccountCode
                            && tradeAgreementItemRelation.AccountRelation   ==  priceDiscAdmTrans.AccountRelation;
                    if(tradeAgreementItemRelation.ItemRelation == '')
                    {
                        select firstonly1 priceDiscAdmTransLocValue
                            order by RecId desc
                                where priceDiscAdmTransLocValue.ItemRelation            ==  priceDiscAdmTrans.ItemRelation
                                    && priceDiscAdmTransLocValue.relation               ==  priceDiscAdmTrans.relation
                                    && priceDiscAdmTransLocValue.AccountCode            ==  priceDiscAdmTrans.AccountCode
                                    && priceDiscAdmTransLocValue.AccountRelation        ==  priceDiscAdmTrans.AccountRelation
                                    && priceDiscAdmTransLocValue.KGSPMIIsProcessed      ==  priceDiscAdmTrans.KGSPMIIsProcessed
                                    && priceDiscAdmTransLocValue.KGSPMIPosted           ==  priceDiscAdmTrans.KGSPMIPosted;//fetching latest item
                        select firstonly1 inventTable
                            where inventTable.ItemId == priceDiscAdmTransLocValue.ItemRelation
                                notexists  join prodCategory
                                    where prodCategory.Product == inventTable.Product
                                        && prodCategory.Category == integrationParameters.MagentoCategory;//filtering from ProductCategory
                        if(inventTable)
                        {
                            currentRow ++;
                            cell = null;
                            cell = cells.get_Item(currentRow, 1);
                            cell.set_Value(this.getPriceGroupName(priceDiscAdmTransLocValue));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 2);
                            cell.set_Value(priceDiscAdmTransLocValue.ItemRelation);
                            cell = null;
                            cell = cells.get_Item(currentRow, 3);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.ItemCode));
                            cell = null;
                            cell = cells.get_Item(currentRow, 4);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.relation));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 5);
                            cell.set_Value(priceDiscAdmTransLocValue.UnitId);
                            cell = null;
                            cell = cells.get_Item(currentRow, 6);
                            cell.set_Value(priceDiscAdmTransLocValue.Amount);
                            cell = null;
                            cell = cells.get_Item(currentRow, 7);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent1);
                            cell = null;
                            cell = cells.get_Item(currentRow, 8);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent2);
                            cell = null;
                            cell = cells.get_Item(currentRow, 9);
                            cell.set_Value(priceDiscAdmTransLocValue.Currency);
                            cell = null;
                            cell = cells.get_Item(currentRow, 10);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.FromDate));
                            cell = null;
                            cell = cells.get_Item(currentRow, 11);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.ToDate));
                               
                            cell = null;
                            cell = cells.get_Item(currentRow, 12);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountFrom);
                            cell = null;
                            cell = cells.get_Item(currentRow, 13);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountTo);
                            cell = null;
                            cell = cells.get_Item(currentRow, 14);
                            cell.set_Value(priceDiscAdmTransLocValue.createdby);
                            cell = null;
                            cell = cells.get_Item(currentRow, 15);
                            cell.set_Value(this.getPostedDate(priceDiscAdmTransLocValue));
                            priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                            priceDiscAdmTrans.doUpdate();
                            tradeAgreementItemRelation.ItemRelation     =   priceDiscAdmTransLocValue.ItemRelation;
                            tradeAgreementItemRelation.relation         =   priceDiscAdmTransLocValue.relation;
                            tradeAgreementItemRelation.AccountCode      =   priceDiscAdmTransLocValue.AccountCode;
                            tradeAgreementItemRelation.AccountRelation  =   priceDiscAdmTransLocValue.AccountRelation;
                            tradeAgreementItemRelation.insert();
                        }
                    }
                    else
                    {
                        priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                        priceDiscAdmTrans.doUpdate();
                    }
                }
                //Group
                else if(priceDiscAdmTrans.ItemCode == PriceDiscProductCodeType::GroupId)
                {
                    select firstonly1 tradeAgreementItemRelation
                        where tradeAgreementItemRelation.ItemRelation           ==  priceDiscAdmTrans.ItemRelation
                            && tradeAgreementItemRelation.relation              ==  priceDiscAdmTrans.relation
                            && tradeAgreementItemRelation.QuantityAmountFrom    ==  priceDiscAdmTrans.QuantityAmountFrom
                            && tradeAgreementItemRelation.QuantityAmountTo      ==  priceDiscAdmTrans.QuantityAmountTo
                            && tradeAgreementItemRelation.AccountCode           ==  priceDiscAdmTrans.AccountCode
                            && tradeAgreementItemRelation.AccountRelation       ==  priceDiscAdmTrans.AccountRelation;
                    if(tradeAgreementItemRelation.ItemRelation == '')
                    {
                        select firstonly1 priceDiscAdmTransLocValue
                            order by RecId desc
                                where priceDiscAdmTransLocValue.ItemRelation            ==  priceDiscAdmTrans.ItemRelation
                                    && priceDiscAdmTransLocValue.relation               ==  priceDiscAdmTrans.relation
                                    && priceDiscAdmTransLocValue.AccountCode            ==  priceDiscAdmTrans.AccountCode
                                    && priceDiscAdmTransLocValue.AccountRelation        ==  priceDiscAdmTrans.AccountRelation
                                    && priceDiscAdmTransLocValue.QuantityAmountFrom     ==  priceDiscAdmTrans.QuantityAmountFrom
                                    && priceDiscAdmTransLocValue.QuantityAmountTo       ==  priceDiscAdmTrans.QuantityAmountTo
                                    && priceDiscAdmTransLocValue.KGSPMIIsProcessed      ==  priceDiscAdmTrans.KGSPMIIsProcessed
                                    && priceDiscAdmTransLocValue.KGSPMIPosted           ==  priceDiscAdmTrans.KGSPMIPosted;//fetching latest item
                        if(priceDiscAdmTransLocValue)
                        {
                            currentRow ++;
                            cell = null;
                            cell = cells.get_Item(currentRow, 1);
                            cell.set_Value(this.getPriceGroupName(priceDiscAdmTransLocValue));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 2);
                            cell.set_Value(priceDiscAdmTransLocValue.ItemRelation);
                            cell = null;
                            cell = cells.get_Item(currentRow, 3);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.ItemCode));
                            cell = null;
                            cell = cells.get_Item(currentRow, 4);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.relation));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 5);
                            cell.set_Value(priceDiscAdmTransLocValue.UnitId);
                            cell = null;
                            cell = cells.get_Item(currentRow, 6);
                            cell.set_Value(priceDiscAdmTransLocValue.Amount);
                            cell = null;
                            cell = cells.get_Item(currentRow, 7);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent1);
                            cell = null;
                            cell = cells.get_Item(currentRow, 8);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent2);
                            cell = null;
                            cell = cells.get_Item(currentRow, 9);
                            cell.set_Value(priceDiscAdmTransLocValue.Currency);
                            cell = null;
                            cell = cells.get_Item(currentRow, 10);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.FromDate));
                            cell = null;
                            cell = cells.get_Item(currentRow, 11);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.ToDate));
                               
                            cell = null;
                            cell = cells.get_Item(currentRow, 12);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountFrom);
                            cell = null;
                            cell = cells.get_Item(currentRow, 13);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountTo);
                            cell = null;
                            cell = cells.get_Item(currentRow, 14);
                            cell.set_Value(priceDiscAdmTransLocValue.createdby);
                            cell = null;
                            cell = cells.get_Item(currentRow, 15);
                            cell.set_Value(this.getPostedDate(priceDiscAdmTransLocValue));
                            priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                            priceDiscAdmTrans.doUpdate();
                            tradeAgreementItemRelation.ItemRelation         =   priceDiscAdmTransLocValue.ItemRelation;
                            tradeAgreementItemRelation.QuantityAmountFrom   =   priceDiscAdmTransLocValue.QuantityAmountFrom;
                            tradeAgreementItemRelation.QuantityAmountTo     =   priceDiscAdmTransLocValue.QuantityAmountTo;
                            tradeAgreementItemRelation.relation             =   priceDiscAdmTransLocValue.relation;
                            tradeAgreementItemRelation.AccountCode          =   priceDiscAdmTransLocValue.AccountCode;
                            tradeAgreementItemRelation.AccountRelation      =   priceDiscAdmTransLocValue.AccountRelation;
                            tradeAgreementItemRelation.insert();
                        }
                    }
                    else
                    {
                        priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                        priceDiscAdmTrans.doUpdate();
                    }
                }
                //All
                else
                {
                    select firstonly1 tradeAgreementItemRelation
                        where tradeAgreementItemRelation.AccountCode        ==  priceDiscAdmTrans.AccountCode
                            && tradeAgreementItemRelation.AccountRelation   ==  priceDiscAdmTrans.AccountRelation
                            && tradeAgreementItemRelation.ItemCode          ==  priceDiscAdmTrans.ItemCode
                            && tradeAgreementItemRelation.relation          ==  priceDiscAdmTrans.relation;
                    if(!tradeAgreementItemRelation.RecId)
                    {
                        select firstonly1 priceDiscAdmTransLocValue
                            order by RecId desc
                                where priceDiscAdmTransLocValue.ItemCode            ==  PriceDiscProductCodeType::All
                                    && priceDiscAdmTransLocValue.relation           ==  priceDiscAdmTrans.relation
                                    && priceDiscAdmTransLocValue.AccountCode        ==  priceDiscAdmTrans.AccountCode
                                    && priceDiscAdmTransLocValue.AccountRelation    ==  priceDiscAdmTrans.AccountRelation
                                    && priceDiscAdmTransLocValue.KGSPMIIsProcessed  ==  priceDiscAdmTrans.KGSPMIIsProcessed
                                    && priceDiscAdmTransLocValue.KGSPMIPosted       ==  priceDiscAdmTrans.KGSPMIPosted;//fetching latest item
                        if(priceDiscAdmTransLocValue)
                        {
                            currentRow ++;
                            cell = null;
                            cell = cells.get_Item(currentRow, 1);
                            cell.set_Value(this.getPriceGroupName(priceDiscAdmTransLocValue));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 2);
                            cell.set_Value(priceDiscAdmTransLocValue.ItemRelation);
                            cell = null;
                            cell = cells.get_Item(currentRow, 3);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.ItemCode));
                            cell = null;
                            cell = cells.get_Item(currentRow, 4);
                            cell.set_Value(enum2Str(priceDiscAdmTransLocValue.relation));
               
                            cell = null;
                            cell = cells.get_Item(currentRow, 5);
                            cell.set_Value(priceDiscAdmTransLocValue.UnitId);
                            cell = null;
                            cell = cells.get_Item(currentRow, 6);
                            cell.set_Value(priceDiscAdmTransLocValue.Amount);
                            cell = null;
                            cell = cells.get_Item(currentRow, 7);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent1);
                            cell = null;
                            cell = cells.get_Item(currentRow, 8);
                            cell.set_Value(priceDiscAdmTransLocValue.Percent2);
                            cell = null;
                            cell = cells.get_Item(currentRow, 9);
                            cell.set_Value(priceDiscAdmTransLocValue.Currency);
                            cell = null;
                            cell = cells.get_Item(currentRow, 10);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.FromDate));
                            cell = null;
                            cell = cells.get_Item(currentRow, 11);
                            cell.set_Value(DateTimeUtil::date(priceDiscAdmTransLocValue.ToDate));
                               
                            cell = null;
                            cell = cells.get_Item(currentRow, 12);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountFrom);
                            cell = null;
                            cell = cells.get_Item(currentRow, 13);
                            cell.set_Value(priceDiscAdmTransLocValue.QuantityAmountTo);
                            cell = null;
                            cell = cells.get_Item(currentRow, 14);
                            cell.set_Value(priceDiscAdmTransLocValue.createdby);
                            cell = null;
                            cell = cells.get_Item(currentRow, 15);
                            cell.set_Value(this.getPostedDate(priceDiscAdmTransLocValue));
                            priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                            priceDiscAdmTrans.doUpdate();
                            tradeAgreementItemRelation.relation             =   priceDiscAdmTransLocValue.relation;
                            tradeAgreementItemRelation.AccountCode          =   priceDiscAdmTransLocValue.AccountCode;
                            tradeAgreementItemRelation.AccountRelation      =   priceDiscAdmTransLocValue.AccountRelation;
                            tradeAgreementItemRelation.ItemCode             =   priceDiscAdmTransLocValue.ItemCode;
                            tradeAgreementItemRelation.insert();
                        }
                    }
                    else
                    {
                        priceDiscAdmTrans.KGSPMIIsProcessed = NoYes::yes;
                        priceDiscAdmTrans.doUpdate();
                    }
                }
            }
            package.Save();
            ttscommit;
            if(isRunningOnBatch())
            {
                integrationDataWriter.exportToBlob(memoryStream, fileName);
            }
            else
            {
                file::SendFileToUser(memoryStream, fileName);
            }
        }
    }
    /// <summary>
    /// Gets a PriceGroupName for a record based on the title fields of the record.
    /// </summary>
    /// <returns>
    /// A PriceGroupName for the specified record.
    /// <param name = "_priceDiscAdmTrans"></param>
    /// <returns></returns>
    public PriceDiscName  getPriceGroupName(PriceDiscAdmTrans    _priceDiscAdmTrans)
    {
        priceDiscAdmTransLoc    =   _priceDiscAdmTrans;//assigning pricediscadmtrans data for fetching the price group name.
        if(priceDiscAdmTransLoc.AccountCode    ==  PriceDiscPartyCodeType::Table)
        {
            return priceDiscAdmTransLoc.AccountRelation;
        }
        else
        {
            //fetching the name instead of the actual price group from pricediscgroup table.
            select priceDiscGroup
                        where priceDiscGroup.GroupId            ==  priceDiscAdmTransLoc.AccountRelation
                            && priceDiscAdmTransLoc.relation    ==  _priceDiscAdmTrans.relation;
            return priceDiscGroup.Name;
        }
    }
    /// <summary>
    /// Gets a PostedDate for a record based on the title fields of the record.
    /// </summary>
    /// <returns>
    /// A PostedDate for the specified record.
    /// <param name = "_priceDiscAdmTrans"></param>
    /// <returns></returns>
    public  TransDate   getPostedDate(PriceDiscAdmTrans     _priceDiscAdmTrans)
    {
        return PriceDiscAdmTable::find(_priceDiscAdmTrans.JournalNum).PostedDate;//fetching the posted date.
    }
}
------------------------------------------------------
5. create a class - Export integrations to Azure blob file share

 using Microsoft.WindowsAzure.Storage.File;
/// <summary>
/// Export integrations to Azure blob file share
/// </summary>
class KGSPMIBlobFileShareDataWriter
{
    KGSPMIIntegrationType                       integrationType;
    CloudFileShare                              fileShare;
    KGSPMIIntegrationDataImportExportSettings   integrationDataImportExportSettings;
    /// <summary>
    /// Construct the object for KGSPMIBlobFileShareDataWriter based on integration type
    /// </summary>
    /// <param name="_integrationType">
    /// Integration type enumeration
    /// </param>
    public static KGSPMIBlobFileShareDataWriter construct(KGSPMIIntegrationType _integrationType)
    {
        KGSPMIBlobFileShareDataWriter integrationDataExport = new KGSPMIBlobFileShareDataWriter();
        integrationDataExport.parmIntegrationType(_integrationType);
        integrationDataExport.fetchBlobSettings();

        return integrationDataExport;
    }
    /// <summary>
    /// Parm method for integration type
    /// </summary>
    /// <param name="_integrationType">
    /// Integration type enumeration
    /// </param>
    public KGSPMIIntegrationType parmIntegrationType(KGSPMIIntegrationType _integrationType = integrationType)
    {
        integrationType = _integrationType;
        return integrationType;
    }
    /// <summary>
    /// Initialyses the blob settings based on integration type
    /// </summary>
    public void fetchBlobSettings()
    {
       
        KGSPMIIntegrationParameters         integrationParameters = KGSPMIIntegrationParameters::find();
        integrationDataImportExportSettings = KGSPMIIntegrationDataImportExportSettings::construct(this.parmIntegrationType());
       
        fileShare = KGSPMIBlobFileShareUtility::connectToFileShare(integrationParameters.BlobConnectionString, integrationParameters.BlobFileShareName);
       
    }
    /// <summary>
    /// Export the file stream to blob file share
    /// </summary>
    /// <param name="_stream">
    /// File stream to export to blob file share
    /// </param>
    /// <param name="_fileName">
    /// Name of the file to be generated
    /// </param>
    public void exportToBlob(System.IO.Stream _stream, str _fileName)
    {     
        KGSPMIBlobFileShareUtility::uploadStreamToFileShare(_stream, fileShare, integrationDataImportExportSettings.parmOutFilePath(), _fileName);
    }
    /// <summary>
    /// Get all the files in a list from blob FileShare path
    /// </summary>
    public  List  getFileList()
    {
        return KGSPMIBlobFileShareUtility::getFileNamesFromFileShare(fileShare, integrationDataImportExportSettings.parmInFilePath());
    }
    /// <summary>
    /// Get specific file from blob FileShare path based on file name
    /// </summary>
    /// <param name="_fileName">
    /// Name of the file to read from blob
    /// </param>
    public  System.IO.Stream  getFileStream(str _fileName)
    {
        return KGSPMIBlobFileShareUtility::downloadFileFromFileShare(fileShare, integrationDataImportExportSettings.parmInFilePath(), _fileName);
    }
    /// <summary>
    /// Moves the file from processing folder to success folder
    /// </summary>
    /// <param name="_fileName">
    /// Name of the file to move to success path
    /// </param>
    public  void  moveToSuccessPath(str _fileName)
    {
        KGSPMIBlobFileShareUtility::movefilefromFileShare(fileShare, fileShare, integrationDataImportExportSettings.parmInFilePath(), integrationDataImportExportSettings.parmSuccessFilePath(), _fileName, _fileName);
    }
    /// <summary>
    /// Moves the file from processing folder to error folder
    /// </summary>
    /// <param name="_fileName">
    /// Name of the file to move to error path
    /// </param>
    public  void  moveToErrorPath(str _fileName)
    {
        KGSPMIBlobFileShareUtility::movefilefromFileShare(fileShare, fileShare, integrationDataImportExportSettings.parmInFilePath(), integrationDataImportExportSettings.parmErrorFilePath(), _fileName, _fileName);
    }
    /// <summary>
    /// Export the file to bob FileShare based on execution from data entity
    /// </summary>
    /// <param name="_definitionGroupId">
    /// Definition group id for data entity job
    /// </param>
    /// <param name="_executionId">
    /// Execution id for data entity job
    /// </param>
    public static void exportToBlobFromDefinitionGroup(DMFDefinitionGroupName _definitionGroupId, DMFExecutionId _executionId)
    {
        DMFEntityName                               entityName;
        DMFEntityExportDetails                      exportDetails;
        DMFEntity                                   dMFEntity;
        DMFDefinitionGroupExecution                 definitionGroupExecution;
        KGSPMIIntegrationParameters                 integrationParameters;
        KGSPMIIntegrationDataImportExportSettings   integrationDataImportExportSettings;
        KGSPMIIntegrationType                       integrationType;
        integrationParameters = KGSPMIIntegrationParameters::find();
        if(integrationParameters.EnableAll)
        {
            select firstonly definitionGroupExecution
                where definitionGroupExecution.ExecutionId  == _executionId &&
                definitionGroupExecution.DefinitionGroup    == _definitionGroupId;
            dMFEntity = DMFEntity::find(definitionGroupExecution.Entity);
            if (dMFEntity.ParentEntityName != '')
            {
                entityName = dMFEntity.ParentEntityName;
            }
            else
            {
                entityName = definitionGroupExecution.Entity;
            }
            if(KGSPMIIntegrationDataImportExportSettings::isPMIIntegration(entityName))
            {
                select firstonly1 SampleFilePath, DefinitionGroup, Entity from exportDetails
                    where exportDetails.DefinitionGroup == _definitionGroupId
                        && exportDetails.ExecutionId == _executionId
                        && exportDetails.Entity == entityName;
                if (exportDetails.RecId && exportDetails.SampleFilePath)
                {
                    integrationType                     = KGSPMIIntegrationDataImportExportSettings::getIntegrationTypeFromDataEntity(entityName);
                    integrationDataImportExportSettings = KGSPMIIntegrationDataImportExportSettings::construct(integrationType);               
                    integrationParameters               = KGSPMIIntegrationParameters::find();
                    CloudFileShare fileShare            = KGSPMIBlobFileShareUtility::connectToFileShare(integrationParameters.BlobConnectionString, integrationParameters.BlobFileShareName);
                    KGSPMIDataEntityBlobFileShareUtility::exportToFileShare(exportDetails, fileShare, integrationDataImportExportSettings.parmOutFilePath());
                }
                else
                {
                    warning(strFmt("@KGSPMI:KGSPMINoExportFileForEntityTxt", entityName, definitionGroupExecution.ExecutionId));
                }
            }
        }
    }
}
--------------------------------
6. Create a class - Utility class for Azure blob file share connection

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.File;
using System.IO;
/// <summary>
/// Utility class for Azure blob file share connection.
/// </summary>
class KGSPMIBlobFileShareUtility
{
    public static CloudFileShare connectToFileShare(str _connectionString, str _fileShareName)
    {
        CloudStorageAccount     storageAccount;     
        CloudFileClient         fileClient;
        CloudFileShare          fileShare;
       
        storageAccount      = CloudStorageAccount::Parse(_connectionString);
        fileClient          = storageAccount.CreateCloudFileClient();
        fileShare           = fileClient.GetShareReference(_fileShareName);
        return fileShare;
    }
    public static void uploadStreamToFileShare(System.IO.Stream _stream, CloudFileShare _fileShare, str _filepath, str _fileName)
    {
        CloudFileDirectory          fileRootDirectory;
        CloudFileDirectory          fileDirectory ;
        CloudFile                   file;
        fileRootDirectory       = _fileShare.GetRootDirectoryReference();
        fileDirectory           = fileRootDirectory.GetDirectoryReference(_filepath);
        file                    = fileDirectory.GetFileReference(_fileName);
       
        file.UploadFromStream(_stream, null, null, null);
    }
    public static void uploadTextToFileShare(str _stringData, CloudFileShare _fileShare, str _filepath, str _fileName, System.Text.Encoding _encoding = null)
    {
        CloudFileDirectory          fileRootDirectory;
        CloudFileDirectory          fileDirectory ;
        CloudFile                   file;
        fileRootDirectory       = _fileShare.GetRootDirectoryReference();
        fileDirectory           = fileRootDirectory.GetDirectoryReference(_filepath);
        file                    = fileDirectory.GetFileReference(_fileName);
       
        file.UploadText(_stringData, _encoding, null, null, null);
    }
    public static list getFileNamesFromFileShare(CloudFileShare _fileShare, str _filepath)
    {
        container                       con;
        List                            filenames           = new List(Types::String);
        CloudFileDirectory              fileRootDirectory   = _fileShare.GetRootDirectoryReference();
        CloudFileDirectory              fileDirectory       = fileRootDirectory.GetDirectoryReference(_filepath);
        System.Collections.IEnumerable  lstEnumarable       = fileDirectory.ListFilesAndDirectories(null, null);
        System.Collections.IEnumerator  lstEnumarator       = lstEnumarable.GetEnumerator();
        while(lstEnumarator.MoveNext())
        {
            IListFileItem item = lstEnumarator.Current;
           
            if(item is CloudFile)
            {
                CloudFile  file = item;
                file.FetchAttributes(null, null, null);
                con = str2con(file.name, "/");
                filenames.addStart(conPeek(con,conlen(con)));
            }
        }
        return filenames;
    }
    public static void movefilefromFileShare(CloudFileShare _srcFileShare, CloudFileShare _dstFileShare,
                                        str _srcFilePath, str _destFilePath, str _srcFilename, str _destFilename)
    {
        CloudFileDirectory          srcfileRootDirectory    = _srcFileShare.GetRootDirectoryReference();
        CloudFileDirectory          srcfileDirectory        = srcfileRootDirectory.GetDirectoryReference(_srcFilePath);
        CloudFileDirectory          dstfileRootDirectory    = _dstFileShare.GetRootDirectoryReference();
        CloudFileDirectory          dstfileDirectory        = dstfileRootDirectory.GetDirectoryReference(_destFilePath);
        CloudFile                   srcfile = srcfileDirectory.GetFileReference(_srcFilename);
        CloudFile                   dstfile = dstfileDirectory.GetFileReference(_destFilename);
       
        dstfile.UploadFromStream(srcfile.OpenRead(null,null,null),null,null,null);
        srcfile.Delete(null,null,null);
    }
    public static System.IO.Stream downloadFileFromFileShare(CloudFileShare _fileShare, str _filepath, str _filename)
    {
        CloudFileDirectory          fileRootDirectory   = _fileShare.GetRootDirectoryReference();
        CloudFileDirectory          fileDirectory       = fileRootDirectory.GetDirectoryReference(_filepath);
        CloudFile                   file                = fileDirectory.GetFileReference(_filename);
        System.IO.Stream            stream              = file.OpenRead(null,null,null);
       
        return stream;
    }
    /// <summary>
    ///
    /// </summary>
    public static MemoryStream convertStringToStream(str _record, System.Text.Encoding _encoding)
    {
        System.Byte[]  byteArray =   new System.Byte[0]();
        if(_encoding == System.Text.Encoding::Unicode)
        {
            byteArray = System.Text.Encoding::Unicode.GetBytes(_record);
        }
        else
        {
            byteArray = System.Text.Encoding::ASCII.GetBytes(_record);
        }
        return  new MemoryStream( byteArray );
    }
}
----------------------------------------------------------


 

Comments

Popular posts from this blog

Event handlers and post handlers in D365

How to Extend Sales Order Update Functionality to Custom Fields in D365 Finance and Operations