Skip to main content

๐Ÿ’ก X++ Tip: Keep the Same Record Selected After Refresh in a Form or Data Source

 When you refresh a form data source in Dynamics AX or Dynamics 365 for Finance and Operations, the current selection is often lost — the cursor jumps back to the first record. This can be frustrating, especially if you want the user to remain on the same record after an update or refresh. Here’s a simple and reliable way to restore the cursor to the same record after the data source is refreshed. ๐Ÿงฉ Scenario Suppose we have a form displaying records from MyTable . When we refresh the data source — for example, after updating a field or calling executeQuery() — we want the form to return to the same record the user was viewing before the refresh. ✅ Solution: Use ds.cursor() We can achieve this using a record buffer and the cursor() method of the data source. public void refreshDataSource() { MyTable myTableRec; // buffer to store current record // Store the current record myTableRec = MyTable_ds.cursor(); // Refresh the data source MyTable_ds.r...

Integrate API using X++ in D365FO

 Process of making a POST request in X++ using the WinHttp class step by step.

1. Setup

Before making an HTTP request, ensure you have the necessary URL, headers, and payload data you want to send.

2. Create the HttpWebRequest Object

You will first need to create an instance of HttpWebRequest by specifying the URL you want to send the POST request to.

3. Configure the Request

Set the HTTP method to POST and configure any necessary headers and content type. Prepare the request body as a byte array.

4. Send the Request and Handle the Response

Write the request body to the request stream, send the request, and read the response.

Example Code

Here’s a detailed step-by-step example in X++:


static void PostRequestExample(Args _args)

{

    System.Net.HttpWebRequest request;

    System.Net.HttpWebResponse response;

    System.IO.Stream requestStream, responseStream;

    System.IO.StreamReader reader;

    System.Text.Encoding utf8;

    System.Exception sysEx;

    str url = "https://api.example.com/endpoint"; // Replace with your URL

    str jsonPayload = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; // Replace with your JSON payload


    // Step 1: Create the HttpWebRequest object

    request = System.Net.WebRequest::Create(url) as System.Net.HttpWebRequest;

    request.Method = 'POST'; // Specify the HTTP method

    request.ContentType = 'application/json'; // Specify the content type


    // Step 2: Set request headers

    System.Net.WebHeaderCollection headerCollection = request.Headers;

    headerCollection.Set('Authorization', 'Bearer your_access_token'); // Example of setting an authorization header


    // Step 3: Convert JSON payload to byte array

    utf8 = System.Text.Encoding::get_UTF8();

    var byteArrayPayload = utf8.GetBytes(jsonPayload);


    try

    {

        // Write the payload to the request stream

        requestStream = request.GetRequestStream();

        requestStream.Write(byteArrayPayload, 0, byteArrayPayload.Length);

        requestStream.Close();


        // Send the request and get the response

        response = request.GetResponse() as System.Net.HttpWebResponse;

        responseStream = response.GetResponseStream();

        

        // Read the response

        reader = new System.IO.StreamReader(responseStream);

        str responseBody = reader.ReadToEnd();

        

        // Output the response body

        info(strFmt("Response: %1", responseBody));

        

        // Close streams

        reader.Close();

        responseStream.Close();

        response.Close();

    }

    catch (sysEx)

    {

        // Handle exceptions

        error(strFmt("Exception: %1", sysEx.message()));

    }

}


This example demonstrates a basic POST request in X++ using HttpWebRequest. Make sure to replace the URL, payload, and headers with your actual values.


Comments

Popular posts from this blog

How to Refresh a Form or Data Source in D365FO Using X++

  Introduction In Microsoft Dynamics 365 Finance & Operations (D365FO), refreshing the form after an action (like inserting, updating, or deleting a record) is essential for keeping the UI updated with the latest data. In this blog, we’ll explore two ways to refresh the form in X++: ✅ Refreshing the entire form using taskRefresh ✅ Refreshing a specific data source using research Let's dive into the best practices for implementing these refresh methods! ๐Ÿ”„ Refreshing the Entire Form If you need to refresh the whole form , use the taskRefresh method. This method is useful when multiple data sources are involved, and you want to reload everything. ๐Ÿ“Œ X++ Code for Full Form Refresh public void refreshForm() {     // Get the current form instance     FormRun formRun = this.formRun();     // Check if formRun is valid before refreshing     if (formRun)     {         info("Refreshing the form...");     ...

How to Open a Form with Filtered Data Using a Button in X++ – A Step-by-Step Guide

 In Dynamics 365 for Finance and Operations (D365FO), a common requirement is to open a form dynamically from another form and pass filtered data based on a specific condition. This functionality can enhance user experience by allowing them to interact with multiple forms seamlessly, while keeping the data relevant and focused. In this blog, we’ll explore how to implement such a solution using X++, where a user clicks a button on Form 1 (such as a list of sales orders), and based on a selected record, Form 2 (such as invoice details) opens with only the relevant filtered data. Scenario Overview Let’s assume the following scenario: Form 1 : Displays a list of sales orders, and each order has an OrderID , CustomerID , and OrderAmount . Form 2 : Displays details of invoices (from the InvoiceDetails table) that are linked to the selected OrderID from Form 1 . The goal is to click a button on Form 1 , pass the OrderID to Form 2 , and display only the relevant invoice records relate...

Sorting Data in X++ (D365FO) Grids Using Form Data Source Events

  Introduction : In Dynamics 365 Finance and Operations, form grids often display data retrieved from a table or query. However, the default sorting applied may not always align with business requirements. Customizing sorting behavior at runtime ensures that the grid data is presented in a meaningful order for users. This blog post demonstrates how to use the Initialized event of a form data source to apply custom sorting to a grid. We will sort the grid rows based on a specific field ( DisplayOrder ) in ascending order. Understanding the Code : Here’s the complete code snippet: --------------------------------------------------------------------------------------------------------------- [FormDataSourceEventHandler(formDataSourceStr(MyFormDataSource,  MyTable), FormDataSourceEventType::Initialized)] public static void MyFormDataSource_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e) {     // It will clear if any other sorting is applied on the grid ...