Tuesday, September 29, 2020

Logic for unmapped field in Entity to get the data while DMF export using PostLoad method

  [DataEventHandler(tableStr(EcoResReleasedProductV2Entity), DataEventType::PostedLoad)]

    public static void EcoResReleasedProductV2Entity_onPostedLoad(Common _sender, DataEventArgs _eventArgs)

    {

        InventItemInventSetup           inventItemInventSetup;

        EcoResReleasedProductV2Entity   ecoResReleasedProductV2Entity  = _sender as EcoResReleasedProductV2Entity;


        select firstonly  MultipleQty from inventItemInventSetup 

            where inventItemInventSetup.ItemId == ecoResReleasedProductV2Entity.ItemNumber;

        if(inventItemInventSetup)

        {

            ecoResReleasedProductV2Entity.SalesQuantityMultiple = inventItemInventSetup.MultipleQty;

        }

    }


Saturday, September 12, 2020

OnValidate event handler

 [DataEventHandler(tableStr(TaxRegistrationNumbers_IN), DataEventType::ValidatedField)]
    public static void TaxRegistrationNumbers_IN_onValidatedField(Common sender, DataEventArgs e)
    {
        TaxRegistrationNumbers_IN TaxRegistrationNumbers_IN = sender as TaxRegistrationNumbers_IN; // Code to get the buffer
        boolean ret = true;
 
        ValidateFieldEventArgs args = e as ValidateFieldEventArgs; // Code to get args
 
        switch (args.parmFieldId())
        {
            case fieldNum(TaxRegistrationNumbers_IN, RegistrationNumber):
                {
                    if(strLen(TaxRegistrationNumbers_IN.RegistrationNumber) != 15)
                    {
                        ret = checkFailed("Registration number should be 15 characters"); // Just a validation to display on user interface
                    }
                }
                break;
        }
        args.parmValidateResult(ret);
    }

Saturday, September 5, 2020

COC for form datasource Execute query

 [ExtensionOf(formDataSourceStr(LedgerJournalTable,LedgerJournalTable))]
final class LedgerJournalTableForm_Extension
{
    public void executeQuery()
    {
        FormDataSource   ledgerJournal_ds = this;
        UserGroupList    userGroupList,userGroupListLoc;
         
        str              currentUser;
        select userGroupList
            where userGroupList.userId == curUserId()
               && userGroupList.groupId like "LOC*";
        if(userGroupList)
        {
            while select userGroupListLoc
                    where userGroupListLoc.groupId == userGroupList.groupId
            {
                ledgerJournal_ds.query().dataSourceTable(tableNum(LedgerJournalTable)).addRange(fieldNum(LedgerJournalTable,CreatedBy)).value(SysQuery::value(userGroupListLoc.userId));
            }
        }
        next executeQuery();
        
    }
}

MapEntityToDataSouce logic with Skipping validation

 [ExtensionOf(dataentityviewstr(SalesQuotationLineCDSEntity))]
final class SalesQuotationLineCDSEntity_Extension
{
public void mapEntityToDataSource(DataEntityRuntimeContext entityCtx, DataEntityDataSourceRuntimeContext dataSourceCtx)
{
next mapEntityToDataSource(_entityCtx,_dataSourceCtx);
if (_entityCtx.getDatabaseOperation() == DataEntityDatabaseOperation::Insert)
{
switch (_dataSourceCtx.name())
{
case dataEntityDataSourceStr(SalesQuotationLineCDSEntity, SalesQuotationLineEntity):
SalesQuotationLineV2Entity salesQuotationLineEntity = _dataSourceCtx.getBuffer();

if (SalesQuotationLineEntity.LineCreationSequenceNumber)
{
salesQuotationLineEntity.LineNum = any2Real(SalesQuotationLineEntity.LineCreationSequenceNumber);
}
salesQuotationLineEntity.skipDataSourceValidateField(fieldNum(SalesQuotationLineV2Entity,LineNum),true);

break;
}
}
}
}

Friday, September 4, 2020

Excel Import in D365 F & O

 /// <summary>
/// PMEUploadGereralJournalExcel class is used to import the journals
/// </summary>
using System.IO;
using OfficeOpenXml;
using OfficeOpenXml.ExcelPackage;
using OfficeOpenXml.ExcelRange;
class PMEUploadGereralJournalExcel
{
    /// <summary>
    /// excelimport used to import the journals
    /// </summary>
    public void excelImport()
    {
        System.IO.Stream                            stream;
        //FileUploadBuild                             fileUpload;
        DialogGroup                                 dlgUploadGroup;
        FileUploadBuild                             fileUploadBuild;
        FormBuildControl                            formBuildControl;
        PMEReverseLedgerGeneralJournalTable         reverseJournal;
        PMEReverseJournal                           reversalCreation = new PMEReverseJournal();
        //PMEReverseLedgerJournalCreation             journalCreation = new PMEReverseLedgerJournalCreation();
        Dialog                                      dialog = new Dialog("@PME:ImportDataFromExcel");
        dlgUploadGroup          = dialog.addGroup("@SYS54759");
        formBuildControl        = dialog.formBuildDesign().control(dlgUploadGroup.name());
        fileUploadBuild         = formBuildControl.addControlEx(classstr(FileUpload), "@PME:Upload");
        fileUploadBuild.style(FileUploadStyle::MinimalWithFilename);
        fileUploadBuild.fileTypesAccepted('.xlsx');
        if (dialog.run() && dialog.closedOk())
        {
            FileUpload fileUploadControl     = dialog.formRun().control(dialog.formRun().controlId("@PME: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;
                    
                    try
                    {
                        for (i = 2; i<= rowCount; i++)
                        {
                            ttsbegin;
                            select firstonly JournalNum from reverseJournal
                                where reverseJournal.JournalNum == range.get_Item(i, 1).value;
                            if(!reverseJournal)
                            {
                                reverseJournal.JournalNum = (range.get_Item(i, 1).value);
                                reverseJournal.Released   = NoYes::Yes;
                                reverseJournal.insert();
                                reversalCreation.createJournal(reverseJournal);
                            }
                            else
                            {
                                info(strFmt("@PME:ReverseJournalExist" ,range.get_Item(i, 1).value));
                            }
                            ttscommit;
                        }
                    }
                    catch(Exception::Error)
                    {
                        info("@PME:Error");
                                
                    }
                }
                Info("@PME:Sucessed");
            }
            else
            {
                error("@PME:Error");
            }
        }
    }
}






The above code create like below and manual choose file and import

Thursday, September 3, 2020

Dimension related tables joins

 public static void main(Args _args)
    {
        LedgerJournalTable                   LedgerJournalTable;
        DimensionAttributeValueSet           DimensionAttributeValueSet;
        DimensionAttributeValueSetItem       DimensionAttributeValueSetItem;
        DimensionAttributeValue              DimensionAttributeValue;
        DimensionAttribute                   DimensionAttribute;


        while select * from ledgerjournaltable
            where ledgerjournaltable.journalnum == "t-jbn-034259"
                join recid from dimensionattributevalueset
                    where  dimensionattributevalueset.recid == ledgerjournaltable.defaultdimension
                        join recid, displayvalue from dimensionattributevaluesetitem
                            where dimensionattributevaluesetitem.dimensionattributevalueset == dimensionattributevalueset.recid
                                && dimensionattributevaluesetitem.displayvalue == 'hyderabad'
                                    join recid from dimensionattributevalue
                                        where dimensionattributevalue.recid == dimensionattributevaluesetitem.dimensionattributevalue
                                            join recid, name from dimensionattribute
                                                 where dimensionattribute.recid == dimensionattributevalue.dimensionattribute
                                                    && dimensionattribute.name == 'loction'
        {
            info(dimensionattribute.name+"----"+ dimensionattributevaluesetitem.displayvalue);
        }
        Query  query = new Query(queryStr(PMELedgerDimensionQuery));
        query.toString();
        info(strFmt("%1",query.toString()));


    }

TFS Work space configuration

Refer below link:  https://d365byjp.blogspot.com/2018/10/steps-to-configure-tfsvsts-workspace-in.html