March 16, 2023

Data Migration Tool - Migrate data from AX2009 to D365 FO

HI All,

I have created a detailed document on DMT tool, please find the document in below link

DMT document 

Thanks,

Shwetha

March 15, 2023

File Import and Export - D365 FO

using System.IO;

using OfficeOpenXml;

using OfficeOpenXml.ExcelPackage;

using OfficeOpenXml.ExcelRange;

using OfficeOpenXml.Style;

using OfficeOpenXml.Table;

class Export_And_Import extends RunBase

{

    //Export Template

    public void ExportData()

    {

        MemoryStream    memoryStream = new MemoryStream();

        using (var package = new ExcelPackage(memoryStream))

        {

            var                         currentRow          = 1;

            var                         worksheets          = package.get_Workbook().get_Worksheets();

            var                         Worksheet           = worksheets.Add("Other Pay Elements");

            var                         cells               = Worksheet.get_Cells();

            OfficeOpenXml.ExcelRange    cell;                

            System.String               value;               

            

            cell    = cells.get_Item(currentRow, 1);

            cell.set_Value("Employee Id");

            

            cell    = cells.get_Item(currentRow, 2);

            cell.set_Value("Month");

            

            cell    = cells.get_Item(currentRow, 3);

            cell.set_Value("Year");


            cell    = cells.get_Item(currentRow, 4);

            cell.set_Value("Date");


            cell    = cells.get_Item(currentRow, 5);

            cell.set_Value("Addition / Deduction");


            cell    = cells.get_Item(currentRow, 6);

            cell.set_Value("Pay Element Code");

            

            cell    = cells.get_Item(currentRow, 7);

            cell.set_Value("Payroll Amount");

            package.Save();

            file::SendFileToUser(memoryStream, "Other Pay Elements Import.xlsx");

        }

    }


    //Import Data

    public void ImportData()

    {

        System.IO.Stream            stream;

        ExcelSpreadsheetName        sheeet;

        FileUploadBuild             fileUpload;

        DialogGroup                 dlgUploadGroup;

        FileUploadBuild             fileUploadBuild;

        FormBuildControl            formBuildControl;

        Dialog                      dialog = new Dialog("Import Pay Elements");

        str                         ctrl = "Import";

        PayElements                 payElements;

        AddDeduct                   addDeduct;


        dlgUploadGroup          = dialog.addGroup("@SYS54759");

        formBuildControl        = dialog.formBuildDesign().control(dlgUploadGroup.name());

        fileUploadBuild         = formBuildControl.addControlEx(classstr(FileUpload), ctrl);

        fileUploadBuild.fileTypesAccepted('.xlsx');


        if (dialog.run() && dialog.closedOk())

        {

            FileUpload                       fileUploadControl     = dialog.formRun().control(dialog.formRun().controlId(ctrl));

            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 payElements where payElements.EmplId           == range.get_Item(i, 1).value

                                                   && payElements .PayElementCode   == range.get_Item(i, 6).value

                                                   && payElements .EffectiveDate    == DateTimeUtil::date(range.get_Item(i, 4).value);

                        if(!payElements )

                        {

                            payElements .EmplId         = range.get_Item(i, 1).value;

                            payElements .PayslipMonth   = str2Int(range.get_Item(i, 2).value);

                            payElements .PayslipYear    = str2Int(range.get_Item(i, 3).value);

                            payElements .EffectiveDate  = DateTimeUtil::date(range.get_Item(i, 4).value);

                            payElements .AddDeduct      = str2Enum(addDeduct,range.get_Item(i, 5).value);

                            payElements .PayElementCode = range.get_Item(i, 6).value;

                            payElements .Amount         = any2Real(range.get_Item(i, 7).value);

                            payElements .insert();

                        }

                        else

                        {

                            continue;

                        }

                    }

                    info("Pay Elements Imported");

                }

            }

            else

            {

                error("File was not Loaded Properly");

            }

        }

    }


    public static void main(Args args)

    {

        PayElementsImport objimport = new PayElementsImport ();


        DialogButton         dialogButton;


        dialogButton   =    Box::yesNo("Create Empty Excel",DialogButton::Yes,"Empty Excel","Yes OR No");


        if(dialogButton == DialogButton::Yes)

        {

            objimport.ExportData();

        }

        objimport.ImportData();

    }

}

To Get & Set Unbound Control Values from a Form Extension, perform action on Controls

Example::

[FormDataSourceEventHandler(formDataSourceStr(CustTable, CustTable), FormDataSourceEventType::Activated)]

public static void CustTable_OnActivated(FormDataSource sender, FormDataSourceEventArgs e)

{

    CustTable           custTable     = sender.cursor(); //selected record

    FormDataSource      custTable_ds  = sender.formRun().dataSource("CustTable"); //DataSource form CustTable

    FormRun             element       = sender.formRun(); //form element

    FormControl         myNewButton   = element.design(0).controlName("MyNewButton"); //New button on the form


    FormStringControl         strResult;

    FormRealControl realResult;

    FormIntControl         intResult;

    FormDateControl dateResult;

    FormComboBoxControl comboResult;


    //To Get DataSource Current Record of a Field

    custTable.AccountNum = XXX.valueStr();

    //Str

    strResult = element.design().control(element.controlId("strResult"));

    //Set

    strResult.text("this is what it should say");

    //Get

    strResult.valueStr();


    //Real

    realResult = element.design().control(element.controlId("realResult"));

    //Set

    realResult.realValue(50.05);

    //Get

    realResult.value();


    //Integer

    intResult = element.design().control(element.controlId("intResult"));

    //Set

    intResult.value(50);

    //Get

    intResult.value();


     //Date

     dateResult = element.design().control(element.controlId("dateResult"));

     //Set

     dateResult.dateValue(today());

     //Get

     dateResult.dateValue();


     //Date

     comboResult = element.design().control(element.controlId("comboResult"));

     //Set

     comboResult.selection(1);

     //Get

    comboResult.valueStr(); //Convert to Enum to Str

    myNewButton.enabled(false); //Here you do your code to enabled or disabled the button

}

March 14, 2023

Change SSRS Report Labels language depend on the Vendor language Id

 Go to

preRunModifyContract() override Method in Controller class and add the below code

CODE:

this.parmReportContract().parmRdlContract().parmLanguageId(VendTable::find(vendPurchOrderJour.OrderAccount).languageId());

That’s all !!!!

Difference Between Power Automate & Logic Apps?

 Business process automation (BPA) is the use of information technology to help companies automate their business processes. It’s a broad term that can encompass anything from simple, repetitive tasks like data entry to more complex workflows like customer order processing. 

Power Automate and Azure Logic Apps are workflow services that can automate your processes, business, or system and integrate with Microsoft and 3rd party services with over 300 connectors. These powerful services are designed to get you going quickly, building the workflow between business services providing that familiarity without having the steep learning curve.

Power Automate provides a user-friendly and focused experience within Office 365 that can easily get end-users going once assigned an appropriate license.

Azure Logic Apps provide a user-friendly designer surface similar to Power Automate with the option to build complex integration solutions, utilize advanced development tools, DevOps and monitoring, if required.


Both options aims to significantly reduce the effort and quickly build and automate processes between services, allowing you to focus on higher-value tasks.

The main difference between Power Automate and Logic Apps is that Power Automate is a Robotic Process Automation tool while Logic Apps is an Integration Platform as a Service. Both tools can be used to automate business processes, but they differ in terms of the scale and scope of automation possible.

Power Automate is better suited for automating simple, repetitive tasks that can be performed by a robot with no need for human intervention. These tasks are typically well-defined, rules-based processes such as data entry or form submission. Power Automate can also be used to automate more complex processes by chaining together multiple actions and triggers, but this requires more setup and maintenance than using Logic Apps.

Logic Apps is designed for automating complex processes that involve multiple systems and require human interaction at various points. For example, a process might start when an order is received in an e-commerce system, then trigger an approval request in a CRM system, followed by a series of actions in an accounting system to generate invoices and payments. Each step in the process can be configured to run automatically or wait for manual intervention before proceeding to the next step.

Power automate:

1. It is available as part of O365 applications

2. Power automate is a browser-based application which means you can modify it only using the browser

3. Microsoft Flow can be accessed and modified in a Mobile app

4. For Power Automate, either you pay on a per-flow or per-user basis.

5. If you have a relatively simple application to create then you should go for Power Automate.

6. If your application is using Office 365 / Dynamics application then you can probably pick Power Automate.

7. If Citizen Developers are creating the application, you can go with Power Automate.

8. Visio Plan 2 offers the feature to create a Business Process Model and Notation (BPMN) diagrams and export for Power Automate. 

Logic apps:

1. Logic apps is a part of the Azure platform

2. You can work with Logic apps in a browser as well as in a visual studio designer.

3. Logic Apps cannot be operated from a mobile app

4. For Logic Apps you pay as you use. That means whenever Logic apps run, connectors, triggers, and actions are metered and based on that the user is charged.

5. If you want to create an application that has complicated requirements then you should go for Logic Apps

6. If your application is mostly using Azure services, then you can go ahead with Azure Logic Apps 

7. If Pro developers are working, then you can go ahead with Logic Apps without any hesitation.

8. Visual Studio supports working with Azure solutions, including Logic Apps, that allows you to connect to a subscription and provides a logic app editor experience.

9. Visual Studio Code is a free and open-source code editor with wide-range support for programming languages with IntelliSense, extensions to select the tools you work with extending the functionality of the tool as best fits the project you are working on.

You can install the extension (Azure Logic Apps for Visual Studio Code) from the Marketplace - Visual Studio Marketplace



 


Azure Dev ops

 What is Azure DevOps?

Azure DevOps is a Software as a service (SaaS) platform from Microsoft that provides an end-to-end DevOps toolchain for developing and deploying software.  It also integrates with most leading tools on the market and is a great option for orchestrating a DevOps toolchain. 

What can Azure DevOps do?

Azure DevOps comprises a range of services covering the full development life cycle. 

  • Azure Boards: agile planning, work item tracking, visualization and reporting tool.
  • Azure Pipelines: a language, platform and cloud agnostic CI/CD platform with support for containers or Kubernetes.
  • Azure Repos: provides cloud-hosted private git repos.
  • Azure Artifacts: provides integrated package management with support for Maven, npm, Python and NuGet package feeds from public or private sources.
  • Azure Test Plans: provides an integrated planned and exploratory testing solution.

Azure DevOps can also be used to orchestrate third-party tools.

What is Azure Repos?

Azure Repos is a set of version control tools that you can use to manage your code. Whether your software project is large or small, using version control as soon as possible is a good idea.

Version control systems are software that help you track changes you make in your code over time.

Azure Repos provides two types of version control:

·       Git: distributed version control

·       Team Foundation Version Control (TFVC): centralized version control

Git

Git is the most commonly used version control system today and is quickly becoming the standard for version control. Git is a distributed version control system, meaning that your local copy of code is a complete version control repository. These fully functional local repositories make it is easy to work offline or remotely. You commit your work locally, and then sync your copy of the repository with the copy on the server.

Git in Azure Repos is standard Git. You can use the clients and tools of your choice, such as Git for Windows, Mac, partners' Git services, and tools such as Visual Studio and Visual Studio Code.

TFVC

TFVC is a centralized version control system. Typically, team members have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server.

In summary, Git is a distributed version control system that allows users to work locally and provides a flexible and powerful way to manage code changes, while TFVC is a centralized version control system that requires a connection to a central server and operates on a check-in/check-out model.

Why use version control?

Without version control, you're tempted to keep multiple copies of code on your computer. This is dangerous, because it's easy to change or delete a file in the wrong copy of code, potentially losing work. Version control systems solve this problem by managing all versions of your code but presenting you with a single version at a time.

Version control systems provide the following benefits:

  • Create workflows - Version control workflows prevent the chaos of everyone using their own development process with different and incompatible tools. Version control systems provide process enforcement and permissions, so everyone stays on the same page.
  • Work with versions - Every version has a description for what the changes in the version do, such as fix a bug or add a feature. These descriptions help you follow changes in your code by version instead of by individual file changes. Code stored in versions can be viewed and restored from version control at any time as needed. This makes it easy to base new work off any version of code.
  • Code together - Version control synchronizes versions and makes sure that your changes don't conflict with other changes from your team. Your team relies on version control to help resolve and prevent conflicts, even when people make changes at the same time.
  • Keep a history - Version control keeps a history of changes as your team saves new versions of your code. This history can be reviewed to find out who, why, and when changes were made. History gives you the confidence to experiment since you can roll back to a previous good version at any time. History lets you base work from any version of code, such as to fix a bug in a previous release.
  • Automate tasks - Version control automation features save your team time and generate consistent results. You can automate testing, code analysis, and deployment when new versions are saved to version control.

There are plenty of things that can take up your time as a developer: reproducing bugs, learning new tools, and adding new features or content. As the demands of your users scale up, version control helps your team work together and ship on time.

Team Foundation Version Control

TFVC is a centralized version control system. Typically, team members have only one version of each file on their development machines. Historical data is maintained only on the server. Branches are path-based and created on the server.

TFVC lets you apply granular permissions and restrict access down to a file level. Because your team checks all its work into Azure DevOps Server, you can easily audit changes and identify which user checked in a changeset. By using compare and annotate, you can identify the exact changes that they made.

Customized Analysis Report - D365 FO

  The Customization Analysis Report is a tool that analyzes your customization and extension models, and runs a predefined set of best practice rules. The report is one of the requirements of the solution certification process. The report is in the form of a Microsoft Excel workbook. By using this command you can get Complete details of your BP Errors, warnings, and Errors.

Steps to make Customized analysis report.

  • Run Cmd in your development machine as administrator.
  • Select the drive where your model and package lie in cmd. In my example drive is K:\
  • Capture.PNG
  • Now you go to main of C:\ by using this command cd\
Capture1.PNG
Now you have to go to the Drive where Model Lies in my case It lies on K:\, so I have to change it to K:\ drive.Capture2.PNG
  •  In my example models are in Drive K 
 K:\AosService\PackagesLocalDirectory\bin\xppbp.exe -metadata=”K:\AosService\PackagesLocalDirectory” -all -model=”YourModelName” -xmlLog=C:\temp\BPCheckLogcd.xml -module=”YourModuleName” -car=c:\temp\CAReport.xlsx
  • After success full command run you can see this.
Capture3.PNG
In order to see the detail xlsx report you need to go the path which you provided to save the file, go to C:\temp\CAReport.xlsx.
  • Find your xlsx Document.