Skip to main content

Use temporary table as form datasource in D365FO

In this article, we will learn how we can use the temporary table as a form datasource in D365. In our scenario, we will populate the temporary table at runtime and bind it with the form datasource. firstly, we will pass an argument on the clicked event and write the form datasource  init  method to populate the data in it.  In our scenario we will work on the CustTable form, we will populate the customer group in the temporary table which we create on the selected customer while clicking the button. Step 1:  Create a new table of type TempDB and add two new fields i.e., CustGroupId and CustGroup. Step 2:  We will create a new form with the pattern (List Type), then add our previously created temporary table as a datasource, and then drag both the fields CustGroupId and CustGroup on the form grid part. After the form creation, we will also create the display menu item of type  form  and use our form on it. Step 3:  We will create an extension of the form ' CustTable ' and creat

Adding custom field in the SSRS Report

The purpose of this blog: 

  • We will add a custom field in the standard SSRS report
  • We will create COC for the PSAProjInvoiceDP class to assign the custom field value

First of all, we will go through the report:

Project management and accounting -> Projects -> All projects


Action pane -> Manage -> Project invoice proposal (as well as)
Action pane -> Manage -> Invoice journal


This is the default format of the report and we have to remove all the marked columns from our design and add the Service date i.e., the Confirmed receipt date column in the first column of the line details as shown  below:

The design of this report is:

To fulfill the above requirement we will do the following steps:

Step 1:

We will create an extension of the table 'PSAProjInvoiceTmp'. This table contains the information used in the line details section of the report. Here we add the new custom field named 'ReceiptDateConfirmed':


Step 2:

We will duplicate the 'PSAProjInvoice' report in our project and restore the datasource 'PSAProjInvoiceDS' in which the 'ReceiptDateConfirmed' field would populate


Note: The custom field is successfully added to the report datasource. Now we need to create the COC of the PSAProjInvoiceDP class.

Step 3:

We need to create COC of method initFromProjProposalItem of class PSAProjInvoiceDP to fill the ReceiptDateConfirmed field in the PSAProjInvoiceTmp table.

[ExtensionOf(classStr(PSAProjInvoiceDP))]
internal final class MDPSAProjInvoiceDP_Extension
{
    protected void initFromProjProposalItem(ProjProposalItem _projProposalItem)
    {
        next initFromProjProposalItem(_projProposalItem);

        tmpPSAProjInvoice.ReceiptDateConfirmed = SalesLine::findInventTransId(_projProposalItem.InventTransId, false).ReceiptDateConfirmed;
    }
    protected void initFromProjInvoiceItem(ProjInvoiceItem _projInvoiceItem)
    {
        next initFromProjInvoiceItem(_projInvoiceItem);

        tmpPSAProjInvoice.ReceiptDateConfirmed = SalesLine::findInventTransId(_projInvoiceItem.InventTransId, false).ReceiptDateConfirmed;
    }

}
Step 4:
After creating the COC of the PSAProjInvoiceDP class, customize the report design and add the 'Service datei.e., the Confirmed receipt date column in the first column of the line details and remove some fields that are highlighted in the above format:


Result

The final output of our report looks like this:

Comments

Popular posts from this blog

Use temporary table as form datasource in D365FO

In this article, we will learn how we can use the temporary table as a form datasource in D365. In our scenario, we will populate the temporary table at runtime and bind it with the form datasource. firstly, we will pass an argument on the clicked event and write the form datasource  init  method to populate the data in it.  In our scenario we will work on the CustTable form, we will populate the customer group in the temporary table which we create on the selected customer while clicking the button. Step 1:  Create a new table of type TempDB and add two new fields i.e., CustGroupId and CustGroup. Step 2:  We will create a new form with the pattern (List Type), then add our previously created temporary table as a datasource, and then drag both the fields CustGroupId and CustGroup on the form grid part. After the form creation, we will also create the display menu item of type  form  and use our form on it. Step 3:  We will create an extension of the form ' CustTable ' and creat

Deploy Package to LCS for Dynamics 365 Finance & Operation

In this blog, we will learn how to extract deployable packages from the Azure DevOps Pipeline and then deploy the specific package to the LCS Standard Acceptance Testing (UAT) Environment. Extract Package from Pipeline and Upload to LCS Step 1 : Go to Azure DevOps ->  Pipelines ->  Recent ->  10.0.37-Gated Build Step 2 : Go to recent check-in Step 3 : Go to published Step 4 : Click on AXDeployableRuntime_7.0.7068.67_2023.12.6.1.zip Step 5 : After downloading the Deployable package Go to Lifecycle Services -> Asset library Step 6 : Go to Software deployable package Step 7 : Navigate and select Software deployable package and select the  + button to add the package to the folder and confirm. Refresh the screen and wait for the package to get validated, the tick will appear once validated. Note: The package will be successfully uploaded to the LCS Environment after the above step. Now we will deploy this package to the Standard Acceptance Testing (UAT) environment. Deploy Pack

Using Complex Ranges on Date Fields in Query

In some of the scenarios,  we want to filter out the from-date and to-date ranges on the basis of different fields and  we are not getting the outcome in which we want to apply the AND/OR clause between date ranges on different date fields and we cannot acquire this result using out-of-the-box query classes. So we have applied complex date ranges to get the desired outcome: void initQuery() { Query                          query; QueryRun                queryRun; QueryBuildDataSource      qbdsProjPeriodLine; QueryBuildRange rangePeriodId; query = queryRun.query(); qbdsProjPeriodLine = query.dataSourceTable(tableNum(ProjPeriodLine)); if (periodFrom && periodTo) { qbdsProjPeriodLine.addRange(fieldNum(ProjPeriodLine, PeriodFrom)).value(strFmt('((%1.%2 >= %4) && (%1.%3 <= %5))',                                  qbdsProjPeriodLine.name(),