Microsoft Expands Dynamics 365 Capabilities on the Path to Agentic ERP

AI is changing not only what ERP can do, but how work gets done. Microsoft’s latest Dynamics 365 announcement brings new capabilities across core business operations while advancing its vision for agentic ERP, where people and AI work together across business processes.

 

The focus is increasingly on connecting people, data and processes so AI can work with the context of the business, rather than operating separately from it. The announcement also marks a shift toward a more continuously updated roadmap, with a view of new and upcoming Dynamics 365 capabilities through March 2027.

 

What is Changing Across Dynamics 365?

 

The new capabilities cover some of the most important areas of business operations.

 

Finance

 

Dynamics 365 Finance is getting a redesigned financial journals experience aimed at higher transaction volumes and more complex cross-legal-entity scenarios. Account Reconciliation Agent is being expanded to resolve exceptions in bulk, while Accounts Payable (AP) automation gains AI invoice recognition and suggestions for completing finance entries.

 

Finance Agent is also gaining skills for reconciliation, data preparation, variance analysis, collections and business intelligence across Microsoft 365 surfaces including Copilot, Excel, Outlook and Teams, with native Finance connectivity and connectors to other systems.

 

Microsoft is also making its Business Performance Planning demo data and starter kit generally available, alongside France e-invoicing and e-reporting support.

 

Supply Chain Management

 

Supply Chain Management is gaining more decision support across procurement, planning, supplier engagement and warehouse operations.

 

A procurement agent impact analysis capability, now in public preview, can trace a supplier-proposed purchase order change through affected sales orders, production orders, transfer orders and projected inventory. Demand planning now includes generally available generative insights for seasonality, trends and signal correlations, alongside external signals such as inflation, pricing and weather.

 

Supplier Engagement is in public preview, bringing onboarding, RFQs (requests for quotation), purchase orders and invoicing into a connected workspace and supplier portal. Microsoft is continuing to expand warehouse management capabilities, with dynamic item placement coming next. Rental management capabilities are also coming to public preview, connecting quoting, contracts, inspections, returns and billing.

 

Project Operations

 

For project-based businesses, new capabilities focus on keeping scope, financials, billing and resources aligned as projects change.

 

Change order management is coming to public preview, providing a structured and auditable way to incorporate contract changes into billing schedules. Subscription billing is also coming, with recurring billing schedules, invoice generation and flexible and tiered pricing.

 

A new time-phased staffing view brings task assignments, project bookings and available capacity into one timeline. Microsoft is also adding an option to recognize project revenue against the original cost estimate when that accounting approach is appropriate.

 

Commerce

 

Dynamics 365 Commerce is expanding its B2B capabilities, including a single sign-in for buyers managing purchases across multiple outlets, legal entities and fulfilment channels, with on-account and credit validation. Trade POS is also gaining bulk order capture, contacts on orders and quotations, direct order release to the warehouse and streamlined pickup workflows.

 

On the agentic side, the Dynamics 365 Commerce MCP server is now in public preview, providing a foundation for customers and partners to develop their own agentic commerce scenarios.

 

Field Service

 

Field Service is gaining a Scheduling Operations Agent, currently in public preview, which can help dispatchers optimize multiple resources against defined objectives and review proposed changes before applying them. Scheduled optimisation is planned as a next step.

 

Connected workflows across Field Service, Project Operations and Finance are now generally available. Work orders can be created directly from or linked to project tasks, connecting field execution with project scope and task-based billing. A mobile-first notes experience is also generally available, allowing technicians to capture text, images and video directly in work orders.

 

Human Resources

 

Dynamics 365 Human Resources is expanding across the employee lifecycle, from talent pools, referrals, digital offers and preboarding through learning, succession, performance, benefits, leave, HR-aware time entry and reporting.

 

Agentic capabilities are also being introduced into HR. Candidate assessment and onboarding are gaining agentic experiences, while new HR business skills will make more hire-to-retire workflows available through Microsoft Copilot, Copilot Cowork and agents.

 

Sustainability

 

Microsoft is also strengthening Dynamics 365 Sustainability around governance and auditability.

 

New capabilities are designed to provide clearer data trails for sustainability reporting, including source activity data, emission factors, calculation logic and reporting filters. Reporting period controls and governed ESG data collection are also being introduced to support more structured review, evidence and approval processes.

 

A New Way of Following the Dynamics 365 Roadmap

 

There is another important change behind these product updates. Microsoft is moving beyond traditional release waves with its AI at Work roadmap, providing a more continuously updated view of innovation across Dynamics 365, Power Platform and Dataverse.

 

The latest announcement gives a snapshot of new and upcoming Dynamics 365 ERP capabilities through March 2027. For organisations planning their ERP roadmap, this provides a clearer view of what is becoming available and what is coming next.

 

The Foundation Still Matters

 

The most significant part of this announcement may not be any single new feature. As more agents interact with ERP processes, the quality of the underlying ERP environment becomes increasingly important.

 

Reliable data. Connected processes. Clear business logic. Appropriate security. Defined permissions.

 

These are what allow agents to work with business context rather than simply generate information around it. That is the direction Microsoft is describing with agentic ERP: connecting how people work with how the business operates, while keeping Dynamics 365 at the centre of the business process foundation.

Microsoft Introduces Dynamics 365 Activate: What It Means for CRM Migration Projects

Microsoft has introduced Dynamics 365 Activate, an AI-powered tool designed to help organizations move to Dynamics 365 with less manual effort and greater visibility throughout the implementation process.

 

The first capabilities are now available in public preview for organizations migrating from Salesforce to Dynamics 365. Microsoft says Activate can analyze an existing Salesforce environment, identify data, business processes, customizations and dependencies, and use that information to support migration planning and execution.

 

For organizations considering a CRM migration, the announcement raises a more practical question: what does AI-assisted migration actually change for the project?

 

Why CRM Migrations Are More than Moving Data

 

A CRM migration rarely starts with a clean system.

 

Years of customization can leave organizations with complex data structures, workflows, integrations, business rules and processes that are difficult to map from one platform to another. Data quality can vary across departments, while some customizations may no longer reflect how the business operates today.

 

There is also a business side to the migration. Employees need to adapt to new processes and ways of working, making adoption and change management part of the project from the beginning.

 

This makes discovery one of the most important stages of a migration project.

 

Before deciding what to migrate, teams need to understand what they already have and, equally importantly, what they actually need going forward.

 

How Dynamics 365 Activate Aims to Help

 

Activate is designed to bring AI into this part of the implementation process.

 

According to Microsoft, the Salesforce migration capabilities can analyze the existing CRM environment, profile data and entities, identify relationships and dependencies, and surface customizations that require attention. The resulting context can help teams assess migration scope and identify potential issues earlier.

 

The objective is not simply to reproduce the existing Salesforce environment inside Dynamics 365.

 

The information gathered during discovery can help customers and implementation teams decide what to preserve, what to simplify and what to redesign before migration begins.

 

That distinction matters. A successful migration should move the business forward, rather than simply recreate years of accumulated complexity in a new system.

 

What Could this Mean for Customers?

 

For organizations already evaluating a Salesforce-to-Dynamics 365 migration, Activate is particularly relevant during the assessment and planning stages.

 

Its potential value is in making the existing environment easier to understand before major migration decisions are made. That can mean less manual discovery work, better visibility into migration scope and earlier identification of dependencies or potential risks.

 

Does that make Salesforce migration easier? Potentially, particularly where the existing environment is complex. But Activate does not remove the decisions involved in determining what the future CRM should look like. The benefit comes from giving teams better information to make those decisions.

 

It is also not limited conceptually to new Dynamics 365 customers. Microsoft’s broader vision for Activate includes existing Dynamics 365 customers that want to expand into new applications, processes, geographies or business units. For these organizations, the goal is to build on existing business context rather than repeat lengthy discovery for every new implementation.

 

The current public preview, however, is specifically focused on Salesforce-to-Dynamics 365 migration. Microsoft has indicated that additional CRM and ERP migration scenarios will follow, with ERP capabilities planned later in 2026.

 

What Happens to the Implementation Partner?

 

AI-assisted migration does not make implementation expertise less relevant. It changes where that expertise can have the greatest impact.

 

If AI can accelerate discovery and analysis, implementation teams can spend less time reconstructing the legacy environment and more time applying business and industry knowledge to the future one.

 

That includes business process design, solution architecture, data strategy, integrations, testing, governance and change management.

 

For customers, this distinction matters. The technology can help answer what exists and identify potential migration considerations. Experienced implementation teams are still needed to determine what should change and how those changes should work in the context of the business.

 

That is ultimately the significance of Dynamics 365 Activate. It is not simply another migration utility. It reflects a broader shift toward AI-assisted implementation, where more of the analysis can be automated while the decisions shaping the future business environment remain collaborative and human-led.

 

For organizations considering a move to Dynamics 365, the question is becoming less about how much of the old system can be moved, and more about what is worth taking forward.

Microsoft Introduces a New AI-Powered Operating Model for Customer Experience in Dynamics 365

Microsoft has announced a new AI-powered operating model for customer experience in Dynamics 365, bringing together customer service, contact center operations, workforce engagement management (WEM), and AI capabilities within a unified platform.

 

The announcement reflects a shift in how organizations deliver customer service as AI becomes more integrated into business operations. Customer service leaders are increasingly responsible not only for managing human teams, but also for overseeing AI agents that participate in service delivery. This creates new requirements for visibility, coordination, and performance management across both human and digital workers.

 

A New Operating Model for Customer Experience

 

According to Microsoft’s 2026 Work Trend Index, organizations are entering a new phase of AI adoption in which AI agents become part of the workforce and contribute to business processes alongside employees.

 

To support this transition, Microsoft is expanding Dynamics 365 with capabilities that help organizations coordinate people and AI within a single operating model. At the core is a unified platform built on a single data model that connects Customer Service, Contact Center, Workforce Engagement Management, and AI capabilities. This provides a consistent view of customer interactions, workforce performance, and operational data across the service lifecycle.

 

The approach is designed to reduce fragmentation across customer service operations and support more informed decision-making using real-time operational insights.

 

Workforce Engagement Management in Dynamics 365

 

Microsoft is embedding Workforce Engagement Management directly into Dynamics 365 Customer Service and Dynamics 365 Contact Center, reducing reliance on separate tools and enabling a more unified approach to service operations.

 

The integrated WEM capabilities include demand forecasting, scheduling, adherence monitoring, intraday shift swapping, shift bidding, and time recording. These capabilities allow organizations to manage workforce operations directly within Dynamics 365 while maintaining a unified operational view.

 

Microsoft also notes that organizations can continue using existing third-party workforce management solutions through supported integrations, enabling a phased modernization approach.

 

Three Key Capability Areas

 

The announcement is structured around three main capability areas:

 

1. Embedded Workforce Engagement Management

 

Workforce Engagement Management is now integrated into Dynamics 365 Customer Service and Dynamics 365 Contact Center, enabling workforce planning and execution within the same environment as customer service operations.

 

2. AI Coaching and Operational Insights

 

AI-powered coaching provides real-time recommendations and performance insights to support employee development and help improve service quality. It also enables supervisors to identify operational issues based on live data.

 

3. Real-Time Wallboards

 

Microsoft is introducing real-time wallboards in Dynamics 365 Contact Center, providing supervisors with live visibility into service levels, backlog, and operational performance to support real-time operational awareness.

 

Together, these capabilities support connected planning, execution, and monitoring across customer service operations.

 

Managing Human Agents and AI Agents Together

 

A key element of the new operating model is the ability to manage both human service representatives and AI agents within the same environment.

 

As AI agents take on defined service tasks, human agents are able to focus on more complex customer interactions. Supervisors gain a consolidated view of performance across both human and AI contributors, supported by operational data and AI-driven insights.

 

Microsoft emphasizes that supervisors remain in control of how AI is applied within customer service workflows, using defined rules and operational guidance to shape system behavior.

 

Supporting Customer Service Operations

 

With these updates, Microsoft is positioning Dynamics 365 as a connected platform for customer service operations, bringing together customer service, contact center, workforce engagement management, and AI capabilities in a single environment.

 

By unifying these capabilities, organizations can reduce fragmentation across tools and processes and improve visibility across workforce planning, service execution, and operational performance.

 

The announcement represents another step in Microsoft’s broader strategy to embed AI across Dynamics 365 and support organizations as customer service operations continue to evolve.

Why Operational Maturity Will Define the Winners of the Next Decade

The Competitive Advantage Nobody Talks About

 

For much of the past twenty years, competitive advantage was often linked to technology adoption.

 

Organizations invested in new platforms, modernized infrastructure, digitized processes, and expanded access to data. Those able to move faster frequently established meaningful advantages over their peers.

 

Today, that dynamic is changing.

 

Technology continues to evolve at an extraordinary pace, but access to innovation is becoming increasingly democratized. Capabilities that were once available only to a select group of organizations can now be deployed broadly and at scale.

 

As a result, technology alone is becoming a less reliable source of differentiation. The question facing business leaders is no longer whether innovation is available. It is whether their organizations are capable of translating innovation into measurable outcomes.

 

 

The New Constraint on Growth

 

Many organizations possess the technologies required to improve performance, increase efficiency, and create new value.

 

Yet the results achieved across businesses remain remarkably uneven.

 

The difference is rarely explained by technology itself. More often, it is explained by execution. Disconnected processes, fragmented data, inconsistent governance, and competing priorities create friction that limits the impact of even the most advanced capabilities.

 

In many cases, organizations do not struggle because they lack innovation. They struggle because their operating environment prevents innovation from scaling.

 

Maturity Creates Momentum

 

Operational maturity is often misunderstood as standardization for its own sake.

 

In reality, maturity creates the conditions for adaptability. Organizations with well-defined processes, trusted data, and aligned operating models can absorb change more effectively than those operating through fragmentation and exception management.

 

They can introduce new capabilities more quickly.

They can make decisions with greater confidence.

They can respond to market shifts with less disruption.

 

Most importantly, they can scale successful initiatives beyond isolated teams or departments.

 

This ability to consistently translate change into results is becoming a defining characteristic of high-performing organizations.

 

The Strategic Value of Foundations

 

Business leaders are often drawn to visible transformation initiatives. New technologies generate attention. New capabilities generate excitement.

 

Yet the organizations that sustain long-term performance typically invest as much effort in foundations as they do in innovation.

 

Modern business applications, integrated data environments, and standardized operating processes may not attract headlines, but they create the infrastructure through which transformation becomes possible. Organizations that have invested in connected business platforms are often better positioned to absorb change, scale innovation, and adapt to new market realities.

 

Without these foundations, change remains episodic.

 

With them, change becomes repeatable.

 

This distinction is increasingly important as the pace of technological advancement accelerates.

 

A Different Perspective on Transformation

 

Transformation is frequently discussed as a destination, a future state reached through a major initiative or implementation.

 

Today, the challenge is different. Markets evolve faster, customer expectations shift more rapidly, and new technologies continue to reshape competitive landscapes.

 

Success increasingly depends not on an organization’s ability to transform once, but on its ability to adapt continuously. That capability is built on operational maturity.

 

Looking Ahead

 

Technology will continue to advance, and access to new capabilities will continue to widen across the market.

 

As innovation becomes more accessible, organizational capability becomes more valuable. The organizations that invest in strong operational foundations today will be better positioned to adopt emerging technologies, respond to change, and sustain competitive advantage in the years ahead.

 

Making the Right CRM Choice: Dynamics 365 Customer Engagement

Most CRM comparisons focus on features—that’s the easy part. The hard part is choosing a CRM that fits your business, your teams, and your existing systems.

At AXM365, we help organizations navigate the choice of CRM solutions so you can turn Dynamics 365 Customer Engagement into a growth engine.

Why the Right Fit Matters

A powerful system alone won’t solve business challenges. The real difference comes from:

  • Ecosystem fit – Does it integrate seamlessly with the tools your teams already use?
  • Adoption speed – How quickly will your people embrace it?
  • Total cost – Licenses, integration, customization, and ongoing maintenance.
  • Data-to-decision speed – Can your teams act on insights in real time?

 

These are the factors that determine whether your CRM drives efficiency or becomes another system to manage.

Dynamics 365 Customer Engagement: a Microsoft-first Advantage

For Microsoft-first organizations, Dynamics 365 CE (formerly known as Dynamics 365 CRM) isn’t a separate system. It’s part of the way you already work: Outlook, Teams, Power BI, and Power Platform.

Key benefits include:

  • AI-driven sales, service, marketing, and field workflows
  • Faster adoption with familiar tools
  • Modular licensing and lower total cost of ownership
  • Unified analytics for smarter decisions

Comparing CRM Options

Many organizations evaluating CRM platforms consider other standalone solutions. Dynamics 365 CE’s unique strength lies in its deep integration with Microsoft 365 tools, helping teams adopt quickly and turn customer insights into action without disrupting existing workflows.

How AXM365 Guides You

Making the right CRM choice isn’t easy. AXM365 works with you to:

  • Assess your current processes and workflows
  • Align Dynamics CE capabilities with your business needs
  • Plan adoption and integration strategies
  • Reduce risk and accelerate time to value

 

The difference isn’t in the features—it’s in how the CRM fits your business.

 

Turn Your CRM into a Growth Engine

Stop adapting your business to a system. Choose a CRM that adapts to you.

What’s New in Microsoft Dynamics 365 Finance

The latest Microsoft Dynamics 365 Finance update brings key improvements, including features that are new, changed or enhanced, designed to make financial processes faster, more accurate, and easier to manage. All this will be available on the following schedule:

 

  • Preview of release: October 2025
  • General availability of release (self-update): December 2025
  • General availability of release (auto-update): February 2026

 

New or Changed Features

 

A number of new and changed features have been introduced to simplify finance workflows and enhance overall efficiency.

 

Accounts Receivable

 

  • Faster Global Transaction Page— Optimized performance for large datasets, allowing quicker lookups and smoother navigation.
  • Structured QR-Bill Addresses (Switzerland)— Supports structured “S-type” addresses for both biller and debtor, improving accuracy and compliance in Swiss billing.

 

Fixed Assets

 

  • Stable Acquisition Proposals— Recurring batch jobs for asset acquisitions now continue even if older journals are deleted, preventing interruptions.
  • Consistent Asset Naming— Asset names from purchase orders remain intact; new details are added without overwriting existing data.
  • Accurate Transaction Timing— Inventory sold transactions now post at the correct time for cleaner and more reliable financial tracking.
  • (Preview) Intercompany Asset Transfers— A new data entity streamlines transfers between legal entities, helping organizations automate asset management.

 

Subscription Billing

 

  • Optimized Batch Processing— Reduced a significant amount of chattiness in batch process.
  • Faster Invoice Posting— Billing schedule invoices now post using multithreaded batch processing, allowing multiple invoices to be processed in parallel for significantly faster execution.
  • (Preview) Parallel Deferral Recognition— Enhanced the subscription billing deferral recognition batch process by processing deferral data in parallel, allowing each run to complete more efficiently.

 

Enhanced Features

 

Several improvements have been made to refine existing processes, making daily finance tasks smoother and more reliable.

 

Accounts Receivable

 

  • Free Text Invoice— Corrects posted invoice totals to include all line amounts, ensuring consistent reporting.
  • Case Management Visibility— Invoice and Invoice line details information now appear on the Associations FastTab on My cases.

 

Credit & Collections

 

  • Interest Note Flexibility— Users can now view and select the option for the Due Date and the Terms of Payment when posting a customer interest note.
  • Smarter Collection Emails— Email template on the collection process automation uses the variables on the Subject line.
  • Faster Interest Note Creation— Uses top-picking optimization when creating customer interest notes, to speed up processing for large transaction volumes.

 

General Ledger

 

  • Account Reconciliation Agent (Production Preview)— Now provides suggested actions for In ledger not in subledger and In subledger not in ledger exception types.
  • User ID Visibility in Settlements— The Ledger Settlement Inquiry page now shows the user ID that did the settlement for full audit transparency.
  • Ledger Settlement Performance— The Ledger settlements page has been updated to improve the performance, although customizations may need to be updated to work with the new page.

 

Subscription Billing

 

  • Automatic Discount Groups— Discount group setup in trade agreement for item prices now automatically applies to the billing schedule when created for the corresponding customer record.
  • (Preview) Deferral COGS Dashboard— Dashboard monitors for visibility into deferral adjustment errors with rerun capability.
  • (Preview) Process Completion Notifications— A notification message is displayed when the asynchronous process finishes so that the user is notified.
  • Consistent Credit Note Exchange Rates— At the termination of billing schedule, a credit note is created against the invoices (sales orders) with the same exchange rate used at the time of invoicing.

 

Take the Next Step with AXM365

 

Ready to unlock the full potential of Microsoft Dynamics 365 Finance?

 

AXM365 helps businesses implement, optimize, and modernize their ERP systems, ensuring finance and operations teams work smarter, not harder.

Updates to License Management in Dynamics 365 Finance & Operations

Microsoft is simplifying the way organizations manage licenses for Dynamics 365 Finance & Operations — with enhanced tools that bring greater security, privacy, compliance and transparency to your licensing footprint.

 

Effective license management is essential for maintaining operational control, compliance, and cost efficiency. To ensure a smoother transition to per-user license validation, Microsoft has adjusted the rollout timeline. Validation will now be introduced gradually, aligned with each organization’s contract renewal or anniversary date, supported by new reporting capabilities designed to enhance transparency and simplify license management.

 

Starting in early 2026, new updates will help businesses stay compliant and efficient with less manual effort.

 

 What’s Changing

 

Enhanced Visibility and Reporting

 

Microsoft is enhancing the Power Platform admin center with better license insights. Admins now gain comprehensive visibility into license usage across security roles, enabling smarter, data-driven management of their licensing footprint.

 

Phased Rollout of License Validation

 

Starting January 15, 2026, license validation for Dynamics 365 Finance & Operations applications will begin for customers with contract renewals or anniversaries occurring after that date.

 

This phased approach allows organizations to review user counts and licensing needs ahead of time, make adjustments smoothly with minimal operational impact, and gain clear visibility into the validation timeline, helping administrators plan effectively.

 

Access Restrictions for Unlicensed Users

 

After validation, users without assigned licenses will lose access until licenses are assigned. During this time, they will be prompted to request the appropriate license from their administrator.

 

Preparing for a Smooth Transition

 

To help organizations navigate the upcoming license validation process, it’s important to take proactive steps to ensure a seamless transition.

 

  • Understand Licensing Requirements— review how security roles, duties, and privileges map to license types.
  • Review User Role & License Mapping— use admin tools to summarize active users and their license requirements.
  • Role to License Optimization— identify and remove unnecessary permissions using the License Usage Summary Report.
  • Align Licenses in Microsoft 365 Admin Center— ensure user licenses match report mappings and add extra licenses as required.

 

Key Takeaways

 

Preparing for the upcoming license validation doesn’t have to be complex.

 

With the right preparation, organizations can turn this transition into an opportunity to strengthen governance and improve operational efficiency. Our team can help you review your license setup, analyze usage patterns, and optimize your security roles — so you can enter 2026 fully compliant and disruption-free. These steps lay the foundation for smoother administration, clearer visibility, and more effective management of Dynamics 365 Finance & Operations environments.

 

Partner with AXM365

 

Get in touch with AXM365 to schedule a license readiness review and ensure your organization transitions smoothly.

Microsoft 365 Copilot: Role-Based AI Empowering Sales, Service, and Finance Teams

Microsoft takes Copilot to the next level — empowering sales, service, and finance teams with AI built for their roles.

 

The latest Microsoft 365 update introduces role-based Copilot experiences that go far beyond general productivity assistance. Sales reps, service agents, and finance professionals now get context-aware, data-connected tools that work directly within Outlook, Teams, Excel, and Dynamics 365 — transforming how work happens.

 

Sales

 

For sales teams, Copilot integrates seamlessly with leading CRM systems such as Dynamics 365 and Salesforce, providing quick access to opportunity details, customer communications, and company insights.

 

It helps sellers prepare for meetings, track deal status, identify risks, and manage CRM records more efficiently—all within their daily tools like Microsoft Teams, Outlook, and Copilot.

 

Service

 

The AI-powered service solution enables customer service teams to quickly generate case summaries, draft personalized response emails, and update CRM records seamlessly, all while managing rising customer expectations, increasing workloads, and fragmented toolsets.

 

Fewer clicks and faster responses allow teams to resolve issues more efficiently while maintaining high-quality, personalized customer interactions.

 

Finance

 

The AI-powered finance solution helps finance teams work more efficiently on complex tasks, like checking transactions and reviewing financial differences.

 

 

 

By bringing ERP-connected data from tools like Dynamics 365 and SAP directly into Copilot, Excel, and Outlook, teams can quickly draft customer emails with account details, speed up transaction reconciliation, flag discrepancies, prepare reports, and perform variance analysis.

 

It also helps clean, reshape, and structure ERP exports into analysis-ready reports, saving time on manual work. This allows finance professionals to focus on making informed decisions that support business growth and keep operations running smoothly.

 

 

Why It Matters

 

Overall, these role-based AI capabilities enable sales, service, and finance professionals to work smarter and faster with AI-powered insights and automation embedded right where work happens.

 

With these updates, Microsoft positions businesses to move toward what it calls “Frontier Firms” — organizations that embed AI into their core operations. The result? Less time on manual work and more time driving strategic impact.

 

Starting October 2025, these solutions will be available to help organizations scale AI adoption and accelerate productivity across key business operations.

 

Discover How AXM365 Can Support Your Implementation

 

AXM365 guides your Microsoft 365 Copilot implementation. Get in touch to improve workflows, drive productivity, and implement AI solutions designed for your business.

Dynamics 365 Contact Center Updates: Adaptation of Wrap-up Procedures

The efficiency of customer service operations greatly depends on how quickly representatives can transition between customer interactions. A critical factor in this process is the wrap-up period — immediately after a call, when agents record notes and finalize details.

 

Recent improvements now allow administrators to configure this wrap-up period in seconds rather than minutes, enabling faster transitions and greater operational efficiency.

 

The Impact

 

Contact centers differ in how much time service representatives need to complete the wrap-up after conversations. For some, a full minute creates unnecessary inoperative time, while for others, shorter wrap-up periods help meet service-level agreements (SLAs) and optimize resources.

 

Dynamics 365 Contact Center now allows the shortest wrap-up time to start at 30 seconds instead of the previous one-minute minimum. This flexibility enables organizations to tailor wrap-up procedures to workflows, improving efficiency while supporting diverse operational needs.

 

Business Benefits

 

The new Dynamics 365 Contact Center feature enables admins to reduce wrap-up to 30 seconds, saving up time per conversation without affecting note quality during high web traffic.

 

Organizations leveraging second-level wrap-up timers can expect:

 

  • Improved service representative availability, particularly during peak periods
  • Faster response times, helping meet SLA targets
  • Lower operational costs through minimized idle time and optimized workforce utilization.

 

These improvements not only improve agent productivity but also enhance customer satisfaction and SLA compliance.

 

Get Started Today

 

Maximize your Contact Center efficiency with AXM365 and discover how small changes can deliver big results.

Partner Alert: Microsoft 365 Copilot Licensing Updates

The latest Microsoft 365 Copilot updates bring zero-rating and role-based enhancements, adding value by simplifying licensing. Existing users can now access additional features at no extra cost, with role-based capabilities for Sales, Service, and Finance fully included in Microsoft 365 Copilot.

 

Copilot Studio Value Updates

 

The update began by broadening the range of agents and features covered under the Microsoft 365 license. From now on, all Copilot Studio capabilities—including agent flows, AI tools, and deep reasoning—are available within Microsoft 365 Copilot for agents running under a licensed user’s identity.

Key Updates:

  • Included Usage for Internal Scenarios

When Copilot Studio agents are used in business-to-employee (B2E) contexts by a licensed Microsoft 365 Copilot user, the activity is now fully covered under the Microsoft 365 Copilot User Subscription License (USL).

 

  • Full Feature Set Coverage

Agent flows, AI tools, and deep reasoning are now part of the license.

 

  • Copilot Credits as Payment

In scenarios like B2C, unlicensed Microsoft 365 Copilot users will still be charged through Copilot Credits (formerly known as “messages”).

 

  • Streamlined Copilot Studio Positioning

Copilot Studio now distinguishes between two creation paths with simplified naming for the agent-building experiences:

 

    • Lite (formerly known as Agent Builders): built into Microsoft 365 Copilot for information workers;
    • Full: designed for makers and developers.

 

Both sit under Copilot Studio but serve different types of users.

 

Role-based Copilots Update

 

Microsoft 365 licensed users will gain access to role-based solutions for Sales, Service, and Finance, without requiring additional step-up SKUs. These solutions integrate with CRM and ERP systems, delivering relevant insights directly within Microsoft 365 Copilot and core apps like Outlook, Teams, and Excel.

Key Updates:

  • Depending on their needs, licensed Microsoft 365 Copilot users can install sales, service, and finance solutions directly from the Agent Store.

 

Sales roles gain a complete view of opportunities, receive insights, and can ask questions—all from a personalized home page to stay prepared for customer meetings.

 

Service teams can enhance the customer experience by integrating CRM data directly with Outlook or Teams.

 

Finance teams can manage tasks, improve data preparation, review account details by accessing ERP-connected information directly within Excel and Outlook.

 

  • More Value with Microsoft 365 Copilot

Users can now take full advantage of role-based capabilities in Copilot for Sales, Service, and Finance as part of their existing Copilot license, simplifying access and enhancing efficiency.

 

  • Role-based Solutions

 

Microsoft 365 Copilot now includes role-based solutions for Sales, Service, and Finance, enabling customers to purchase a full suite of features that boost efficiency and streamline workflows.

 

Maximize Your Microsoft 365 Investment

 

AXM365 guides you through seamless implementation. Reach out today to transform your workflows and explore tailored solutions for your business.

How to Optimize Your Retail Operations?

Retail’s not what it used to be. It’s not just about selling stuff, it’s keeping up with customer expectations, staying ahead of what’s popular, and making sure everything runs smoothly.

 

There is a lot. So, how can you manage everything without getting overwhelmed? Smart technology and creative strategy. Running a store means everything is linked — your products, your people, and your customer experience.

 

The good news? You don’t have to do it all yourself, tools like Microsoft Dynamics 365 helps you to streamline the work, so you can focus on what really matters.

 

Retails’ Growing Pains

 

Retailers today are facing more challenges than ever. Customers expect more, there are many different ways to shop, and keeping everything running smoothly is becoming harder.

 

Even with older systems in place, it’s tough to avoid issues like too much inventory, running out of stock, and inconsistent customer experiences. Without a smart system that brings everything together, making improvements can feel like an ongoing struggle.

 

The Retail Game-Changer: Dynamics 365

 

Dynamics 365 is not just a solution, but it’s a retail optimizer. It uses AI, real-time data, and smart automation to help retailers turn confusion into clear action.

 

Imagine having tools for predicting inventory needs, offering proactive customer service, and getting a complete view of your business, all in one place. It’s designed to make retail operations easier, smarter, and more efficient.

 

From Reactive to Proactive Retail

 

 

Retailers have spent too much time reacting to problems with outdated data. With Dynamics 365, they can plan ahead.

 

No more last-minute restocking or frustrating customers, it’s always about staying one step ahead of the potential issues before they happen.

 

 

Unified Data = Better Decisions

 

Imagine your marketing, sales, and warehouse teams all having access to the same, real-time data. With Dynamics 365, it connects everyone and helps them work together more easily.

 

This leads to faster and smarter decisions because everyone has the same clear view of what’s happening.

 

Why AXM365?

 

We don’t just implement solutions, but we transform businesses.

 

Our retail-specific expertise with Dynamics 365 ensures you don’t get a one-size-fits-all solution, but a strategic approach tailored to your goals.

 

Ready to Optimise?

 

Retail success today means being agile, data-driven, and customer-obsessed.

 

How Business Central Can Transform Your Business

In today’s fast-paced world, business models are evolving rapidly. Now is the perfect time to move to the cloud and implement a solution that drives greater value for your customers. Companies that have implemented Microsoft Dynamics 365 Business Central are already seeing significant growth.

 

Microsoft Dynamics 365 Business Central is a powerful digital platform designed to help small and medium-sized businesses streamline their operations and fuel growth.

 

It brings together all your essential business functions such as Finance, Purchase, Sales, Service, Production, Inventory, Warehouse management, Project management, Planning, Human resources, and Fixed assets, into one unified solution.

 

With Business Central, your teams can collaborate more effectively, respond faster to changes, and achieve better results.

 

Microsoft Dynamics 365 Business Central Key Benefits

 

Streamlined Business Processes

 

Business Central simplifies your operations by automating and integrating various processes and tasks. This not only boosts efficiency but also frees up your team to focus on more strategic activities.

 

Its cloud-based flexibility means you can manage your business from anywhere, on any device, keeping you competitive in today’s remote work environment. Plus, Business Central grows with you, easily scaling as your business expands.

 

Enhanced Financial Management

 

Gain real-time insights into your financial performance with Business Central’s robust financial tools. From automating financial reports to managing cash flow and handling multi-currency transactions, Business Central helps you maintain accurate financial records and make decisions.

 

Optimized Supply Chain Management

 

Manage your supply chain like never before with advanced tools that track inventory in real-time, automate reordering, and streamline logistics.

 

Business Central helps you ensure timely deliveries, reduce shipping costs, and optimize warehouse storage, all while predicting stock needs and improving overall efficiency.

 

Automated Sales and Service

 

Boost your sales and service operations with features that manage the entire customer lifecycle. From automating sales processes to tracking service contracts and resolving issues quickly, Business Central provides valuable insights to better understand and meet your customers’ needs.

 

Cost-Effective Solution

 

With Business Central, you get the benefits of a powerful cloud ERP without the high costs. The subscription-based model eliminates the need for large upfront investments, and you can avoid the expenses of servers, IT resources, and maintenance.

 

You can start using Business Central right out of the box and be up and running in no time.

 

If you’re ready to see how Microsoft Dynamics 365 Business Central can revolutionize your business, reach out to us for a personalized consultation.

 

2024 Release Wave 2 Plans For Microsoft Dynamics 365 And Power Platform

On July 16, 2024, Microsoft published the 2024 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform, a compilation of the new capabilities planned to be released between October 2024 to March 2025. This release introduces a wealth of new features designed to enhance customer understanding and improve overall user experience, showcasing Microsoft’s dedication to driving digital transformation for their customers and partners.

 

The new wave is focused on improving user productivity and streamlining processes across various business applications by employing Microsoft Copilot and cutting-edge AI technologies. These enhancements include intelligent automation, AI-powered insights, and immersive user experiences and aim to remove boundaries between data, insights, and individuals.

 

Discover the newest features that enable organisations to run more effectively and adaptably.

 

The new capabilities allow businesses to take proactive measures to address challenges and capitalise on opportunities. Examples of these include predictive analytics in supply chain management, autonomous financial processes, AI-driven sales insights and customer service enhancements.

 

Early Access Period

 

Starting July 29, 2024, customers and partners can validate the latest features in a non-production environment. These updates include user experience enhancements that will be automatically enabled in production environments by October 2024.

 

We have briefly described numerous of the features from the second release wave in this blog post’s contents.

 

Wave Highlights for Microsoft Dynamics 365

 

Microsoft Dynamics 365 Sales

 

Microsoft Dynamics 365 Sales continues to enhance customer understanding and boost sales through data, intelligence, and user-friendly experiences.

 

In this release, Microsoft are focused on including natural language copilot for summarizing information, creating a new full-screen Copilot Home with curated insights and role-specific actions, and using AI-powered insights to find leads.

 

Microsoft Copilot for Sales

 

Microsoft Copilot for Sales continues to deliver and enhance cutting-edge generative AI capabilities for sellers by enriching Copilot in Microsoft 365 capabilities with sales-specific workflows, data, and actions.

 

Microsoft will focus on using AI-powered insights to create leads, deepen the integration into Copilot in Microsoft 365, and use natural language capabilities to allow sellers to ask data-related questions of their CRM.

 

Microsoft Dynamics 365 Customer Service

 

Microsoft Dynamics 365 Customer Service will continue to empower agents to work more efficiently through new copilot capabilities such as proactive prompting, ability to access data from external systems securely with plugins, email enhancements, and AI-infused routing.

 

Microsoft Copilot for Service

 

Microsoft Copilot for Service is now generally available, bringing new capabilities to enhance user experiences. These features will be integrated across Outlook, Teams, Microsoft 365 Chat, and Copilot embedded in third-party CRMs.

 

Microsoft Dynamics 365 Field Service

 

Microsoft Dynamics 365 Field Service enables a shift from reactive to proactive and predictive service, empowering digital transformation and innovative business models.

 

Using Copilot, frontline workers will be able to retrieve critical information and initiate mixed-reality remote assist calls within Teams through Copilot.

 

Managers will be able to create, update, and manage work orders effortlessly across web, Outlook, and Teams interfaces.

 

Microsoft Dynamics 365 Finance

 

Microsoft Dynamics 365 Finance continues its journey of leading in autonomous finance, using AI to transform common end-to-end financial processes.

 

This release focuses on in-app copilot capabilities, immersive persona-based user experiences, expanding country coverage, electronic invoicing enhancements, business performance analytics and planning enhancements, and autonomous reconciliation capabilities.

 

Microsoft Copilot for Finance

 

Microsoft Copilot for Finance is expanding data reconciliation capabilities in Excel with assisted data sanitization and preparation routines. Extending variance analysis capabilities with support from additional data sources and enabling collaboration on findings with stakeholders will also be a focus in the upcoming wave.

 

Additionally, the Teams integration will facilitate collections calls with suggested scripts and automated recording of action items in the financial system.

 

Microsoft Dynamics 365 Supply Chain Management

 

Microsoft Dynamics 365 Supply Chain Management is advancing along the path of an autonomous supply chain by integrating intelligence, automation, and analytics into every facet of business procedures, thereby improving user productivity and enhancing organizational adaptability.

 

In this update, the spotlight is on improving order-promising capabilities for manufacturers. Demand planning is upgraded to incorporate forecasting with external signals, and the inclusion of Copilot weaves insights and analyses directly into workflows, identifying trends and irregularities, while also allowing for specific data inquiries at the cell level.

 

Additionally, Traceability Copilot keeps track of actual products in production and compiles a comprehensive historical record of related activities.

 

Microsoft Dynamics 365 Project Operations

 

Microsoft Dynamics 365 Project Operations is focused on enhancing usability, performance, and scalability in key areas such as project planning, invoicing, time entry, and core transaction processing.

 

The spotlight is on AI-assisted core functionality improvements in estimation, proposal generation, journals, approvals, and contract management, with added mobile capabilities and scale improvements to handle larger projects and invoices at an increased scale.

 

Finance and Operations Cross-app Capabilities

 

Finance and Operations cross-app capabilities will continue to invest in capabilities applying to Finance, Supply Chain Management, Microsoft Dynamics 365 Commerce, Microsoft Dynamics 365 Human Resources, and Project Operations.

 

Microsoft is infusing copilot experiences across applications, including natural language chat, embedded AI, and intelligent process automation, and enabling extensibility for copilot scenarios.

 

Microsoft will also bring more value and insights to finance and operations apps data and enhancements to ensure continued enterprise-grade security and compliance at scale.

 

Microsoft Dynamics 365 Human Resources

 

Microsoft Dynamics 365 Human Resources continues to build intelligence, develop automation and analytics around the hire-to-separate process, increase user productivity, and empower business agility.

 

Microsoft is enhancing recruiting with AI-driven assessments and offers management, improving experiences for employees and HR business partners in benefits and performance management, and advancing analytics, insights, and planning through business performance planning and analytics capabilities.

 

Microsoft Dynamics 365 Commerce

 

Microsoft Dynamics 365 Commerce is using the power of AI to empower retailers to streamline their operations and drive increased customer loyalty and conversions. With Copilot, retail managers, sales associates, and merchandisers will gain new AI-powered insights into customer buying patterns and preferences, recommendations for positioning and selling products, and business intelligence on store performance.

 

Improvements to the self-checkout POS make customer checkouts more efficient, and user experience updates to Store Commerce app streamline daily tasks for faster, more efficient sales and service.

 

Microsoft Dynamics 365 Business Central

 

Microsoft Dynamics 365 Business Central is focused on maintaining service reliability performance and security standards. Microsoft will continue enhancing productivity by optimizing core processes with Copilot, expanding to cover more than 170 countries, and offering enhanced reporting with more than 80 Microsoft Power BI reports.

 

Additionally, integration with Field Service will be expanded, along with new financial management features. Microsoft will also enhance development tools and governance, along with improved data privacy and compliance management.

 

Wave Highlights for Microsoft Power Platform

 

Microsoft Power Apps

 

Microsoft Power Apps will continue to transform app experiences with infused intelligence, enabling users to be more productive by using Copilot to work with data, get insights, and improve their apps.

 

Makers will continue to benefit from AI-assisted development, enabling rich and complex applications to be built with monitoring, control, and unmatched governance for admins, ensuring organizations can adopt low-code and AI transformation at scale.

 

Microsoft Power Pages

 

Microsoft Power Pages will expedite site building for a low-code maker or pro developer to build intelligent sites that reimagine the way you interact with your employees, customers, and partners.

 

Microsoft Power Automate

 

Microsoft Power Automate will continue to make it easier to build flows by using natural language and multi-modal generative AI capabilities across cloud flows and desktop flows, troubleshooting runs, and managing your automation estate with an end-to-end view.

 

This, along with improvements in process mining to jumpstart creation of automation through Microsoft 365 integration and ongoing improvements to scaling, means it’ll be easier than ever for new users to get started and scale.

 

Microsoft Copilot Studio

 

Microsoft Copilot Studio is advancing copilot capabilities and IVR support with Customer Service and will expand geographically to the United Arab Emirates and Germany.

 

Additionally, the team is improving software lifecycle management capabilities with topic-level import/export and role-based access control (RBAC), as well as enhancing governance and administration functionalities.

 

Key Dates for the 2024 Release Wave 2

 

You can access additional information regarding the key dates for the 2024 release wave 2 here.

 

If your goals are to improve and optimize your business processes, ensure data security in the cloud, make application usage simpler in the long term and seek assistance in upgrading your Dynamics 365 versions to newer versions, we are excited about the possibility for potential collaboration. Reach out to us here.

A Big Step Forward for the Macedonian Food Giant: Vitaminka with a Successful Full Implementation of Dynamics 365 Finance and Operations

With the successful implementation of Dynamics 365 Finance and Operations, the Macedonian food giant opened the doors to full technological improvement and digitalization of the business.

 

Founded more than 66 years ago, Vitaminka is synonymous with quality, a company that cares to always satisfy the taste of its consumers, known for its audacity in introducing innovations and following innovation trends.

 

To make a big step forward in its operational efficiency, modernization of its operations, management, and implementation of best practices, Vitaminka decided to invest in the latest technologies, and as its partner in this significant step towards complete technological transformation chose Axapta Masters.

 

 

By joining forces, after an intensive period of work and cooperation, in January 2024 the implementation of D365 F&O was successfully completed. Today, Vitaminka has a fully integrated platform that unites the warehouse, production, and financial aspects of their work.

 

D365 F&O offers a fully integrated system, which allows companies complete control and visibility of all aspects of business operations.

 

Benefits of the Implementation

 

  • Increased Efficiency: The system enables a significant improvement in operational efficiency, which will lead to a reduction in the time required to carry out certain activities and a reduction in costs.

 

  • Accurate and Fast Financial Reports: The implementation of D365 F&O allows the generation of accurate financial reports in real time, which significantly improves the management of finances.

 

  • Improvement of Warehouse Operations and Production Process: The system provides efficient management of the warehouse operation and production processes, which enables better control and monitoring of the real situation in the warehouse and production.

 

  • Better User Experience and Growth Opportunities: D365 F&O will improve and facilitate the work process of teams in the company. The system is designed to adapt to the needs of companies, making it an ideal choice for businesses that are constantly growing and investing in innovation.

 

Dynamics 365 Finance and Operations is much more than just a sophisticated system. D365 F&O is the key to successful operations management and business growth in today’s digital age.

 

Therefore, with the successful implementation, Vitaminka remains a leader in its industry with innovative and technologically advanced solutions. This significant transformation will provide the company with not only an economic advantage, but also financial stability in the long term.

 

With Axapta Masters on its side, Vitaminka opened the way to new successes and heights in its successful Macedonian business story.

2023 Release Wave 2 Plans for Microsoft Dynamics 365 and Power Platform

On July 18, 2023, Microsoft published the 2023 release wave 2 plans for Microsoft Dynamics 365 and Microsoft Power Platform, a compilation of new capabilities planned to be released between October 2023 and March 2024.

 

The second release wave of the year offers hundreds of new features, including AI capabilities and enhancements, demonstrating Microsoft’s continued investment to power digital transformation for their customers and partners.

 

The new capabilities empower new ways to make informed decisions with AI-guided insights and suggested actions, easier ways to automate tasks and processes, and collaboration seamlessly integrated into the flow of work, plus, new low-code ways for anyone to build solutions.

2023 Release Wave 2 Features Available for Early Access Period

 

Starting July 31, 2023, company users and partners will be able to validate the latest features in a non-production environment. These features include user experience enhancements that will be automatically enabled for users in production environments during October 2023.

 

In the contents of this blog post, we have succinctly outlined a selection of the features from the second release wave.

 

Wave Highlights for Microsoft Dynamics 365

 

Microsoft Dynamics 365 Marketing

 

Microsoft Dynamics 365 Marketing will bring enhancements to Copilot features and will bring unprecedented levels of personalization to email content, images, and layouts.

 

Additionally, business-to-business (B2B) dashboards and directly assigning leads to the right sales rep will align marketers and sellers, enabling them to act as a unified team across the buying journey.

 

Microsoft Dynamics 365 Field Service

 

Microsoft Dynamics 365 Field Service updates will include new capabilities for frontline workers, service managers, and dispatchers. Microsoft will deliver several top requests such as converting quotes to work orders, enhancing inspections, and evolving resource scheduling capabilities.

 

Microsoft Dynamics 365 Sales

 

Microsoft Dynamics 365 Sales will focus on enabling sales organizations to prioritize and manage digital sales processes through enhanced sequence capabilities.

 

Microsoft will allow users to assign and monitor lead assignment status with enhanced lead assignment capabilities by providing recommendations, summarizing data, retrieving information, and performing actions in context and within the flow of work.

 

Microsoft Dynamics 365 Customer Service

 

Microsoft Dynamics 365 Customer Service will continue to empower agents to work more efficiently through Copilot capabilities, Join Me On Teams, visual enhancements to the agent workspace, ability to see live chats and voice calls in Inbox and personalizing size of conversational control.

 

Additionally, Microsoft is making enhancements to the voice channel, call dialer improvements, and routing calls to agents with longest idle time.

 

Microsoft Dynamics 365 Finance

 

Microsoft Dynamics 365 Finance is focused on enhancing organizations’ visibility into their data, continued enhancements for accounts payable and bank statement automation, and expanding out-of-the-box country coverage in Latin America.

 

Additionally, the team will deliver further automation of complex tax scenarios and e-invoicing requirements for new countries and provide organizations ability for business model expansion and agility.

 

Microsoft Dynamics 365 Supply Chain Management

 

Microsoft Dynamics 365 Supply Chain Management continues to improve and optimize business processes to deliver the agility and resilience needed for businesses to thrive in an increasingly complex business environment. The sales and procurement processes will be further enhanced, manufacturers will enjoy greater flexibility, and warehouse processes related to counting, customer returns, and product receipts will be improved.

 

Microsoft Dynamics 365 Project Operations

 

Microsoft Dynamics 365 Project Operations is investing in enhancements to services procurement scenarios and project contracting and new functionalities and scenarios in pricing models will support the evolving patterns in the service-centric economy.

 

Additionally, improvements to intelligent resource recommendations will provide suggestions based on experience, cost, and utilization across employees and subcontractors.

 

Microsoft Dynamics 365 Human Resources

 

Microsoft Dynamics 365 Human Resources will be improving recruiting experiences that target recruiters, candidates, and hiring managers. Microsoft will expand the human capital management ecosystem to include learning management system integration through public APIs using Microsoft Dataverse along with expanding our payroll partner network.

 

Microsoft Dynamics 365 Commerce

 

Microsoft Dynamics 365 Commerce uses the power of AI to enable the effortless creation of engaging product content for digital commerce sites. New B2B investments allow distributors to view, accept, and reject orders from a centralized dashboard that enables B2B sellers, distributors, and buyers to all work in the same place.

 

Wave Highlights for Power Platform

 

Microsoft Power Apps

 

Microsoft Power Apps is expanding the use of Copilot to bring AI-assisted experiences to increase developer productivity, bring natural language to all users, and give insights to admins. Microsoft will bring modern controls and rich collaborative experiences to users, as well as improved deployment and governance support to ensure low-code can be enabled organization wide.

 

Microsoft Power Pages

 

Microsoft Power Pages continues to make strides in the Copilot maker experience to enable building a site. Managed environments will include Power Pages capabilities for maker usage and onboarding. For data, you will be able to connect easily to data where it exists today. Low-code makers can collaborate and detect co-presence.

 

Microsoft Power Automate

 

Microsoft Power Automate will continue to make it easier to get started building new flows by using natural language across cloud flows and desktop flows, and by improving process mining to jumpstart creation of automation and authoring experiences. Additionally, Microsoft is making it easier to manage work at scale by introducing unified activity view and deeper notifications on capabilities across the product.

 

Microsoft Power Virtual Agents

 

Microsoft Power Virtual Agents will bring general availability for capabilities including Multi-Lingual bot support, Generative Answers and Actions, Standalone interactive voice response (IVR) and IVR integration with Dynamics 365 Customer Service, and integration with the Conversational Language Understanding service. Additionally, Microsoft will offer their customers new Enterprise Trust capabilities.

 

Key Dates for the 2023 Release Wave 2

 

Here you can access additional information regarding the key dates for the 2023 release wave 2.

 

If your aim is to enhance and optimize your business processes, simplify application usage for long-term convenience, ensure data security in the cloud, and seek assistance in upgrading your Dynamics 365 systems to newer versions, we welcome the opportunity for potential collaboration. Reach out to us here.

Export Multiple CSV Files in One Go

One of our colleagues recently had a requirement for having a dialog form with multiple toggle buttons to export several different files.

 

So, the standard procedure for exporting to CSV in D365 is:

 

  • to create a ‘CommaStreamIo’ object,
  • fill it with data
  • and then send a file to the user (File::SendFileToUser(stream, filename)) which file then gets downloaded from the browser.

 

However, the issue with this approach appears when we try to export multiple files with the same function, i.e. ‘File::SendFileToUser(stream, filename)’. In such a case, only the last file gets downloaded.

 

The solution to this is to use temporary storage, get the link from it and open it in a new tab.

 

 

We hope that this blog post is helpful, especially if you have found yourself in some simmliar situation.

 

______________________________________________________________________________________________________________________________

 

If you are interested to join our team, check out our careers page, we have open positions for Microsoft Dynamics enthusiasts in every field.

Application Insights with D365 F&O

What is Application Insights?

 

Application Insights, a feature of Azure Monitor, is an extensible Application Performance Management (APM) service for developers and DevOps professionals. Use it to monitor your live applications. It will automatically detect performance anomalies, and includes powerful analytics tools to help you diagnose issues and to understand what users do with your app.

 

It’s designed to help you continuously improve performance and usability. It works for apps on a wide variety of platforms including .NET, Node.js, Java, and Python hosted on-premises, hybrid, or any public cloud. It integrates with your DevOps process and has connection points to a variety of development tools. It can monitor and analyze telemetry from mobile apps by integrating with Visual Studio App Center.

 

 

Application Insights can be used to log:

 

  1. Events Azure Application Insights Telemetry Data Model – Event Telemetry – Azure Monitor | Microsoft Docs
  2. Exceptions Azure Application Insights Exception Telemetry Data model – Azure Monitor | Microsoft Docs
  3. Requests Data model for request telemetry – Azure Application Insights – Azure Monitor | Microsoft Docs
  4. Metrics Data model for metric telemetry – Azure Application Insights – Azure Monitor | Microsoft Docs
  5. Traces Azure Application Insights Data Model – Trace Telemetry – Azure Monitor | Microsoft Docs

 

How to create Application Insights Create Application Insights | Microsoft Docs

 

Something more about the Application insights Application Insights Overview | Microsoft Docs

 

How We Can Connect D365 with Azure Application Insights

 

Open your environment in the browser and navigate to the System Administration -> Setup -> Monitoring and telemetry parameters form.

 

 

From here, you can enable the different telemetry types that are currently supported. More will be added over time. Each type has the Dynamics terminology followed by the Application Insights terminology in parenthesis. This will help you know where to locate it in Application Insights as well as do further learning on docs.microsoft.com.

 

 

Setup your environments, by copying the LCS Environment ID into the setup screen and mapping it to an Environment Type:

 

 

Thereafter, you can map environment types to Application Insights destinations:

 

 

The instrumentation key is retrieved from your Application Insights resource within Azure: 

 

 

As you copy your Finance and Operations database between environments, it will instantly pick up the new Application Insights configuration and automatically send telemetry to the correct location. If you copy your database to an environment which is not configured, then the environment will gracefully do nothing, and no telemetry will be sent.

 

D365 Standard Class Used for Application Insights

 

  • SysGlobalTelemetry class has methods to log text to Azure Application Insights.

 

We can use these methods to log metrics for Interfaces to see for how much time the file is exported and uploaded to blob.

 

    • logMetrics() – Tracks how long, on average, a compute node takes to download the required text file.
    • logEvents() – Tracks interesting events to capture.
    • global_pre_error() – logs error.

 

Example:

 

 

Creating Custom C# dll

 

Application Insights is a very popular (and FREE) approach to monitoring your websites and desktop applications. It works best with websites hosted by IIS, however it can be built into any product.

 

Create a custom C# dll to implement the methods you need to consume the Microsoft.ApplicationInsights.dll to make it easier to use from X++.

 

The handler DLL will enable to:

 

  • Set context properties like user, operation, version & custom global properties;
  • Instance and track telemetry for Events, Exceptions, Requests, Metrics, Traces;
  • Add custom properties & custom metrics related with Events, Exceptions, Requests, Metrics, Traces.

 

Let’s start by building our own C# library which uses the latest NuGet package for AppInsights:

 

 

After you have your C# library setup and the NuGet package installed, we can start developing class that can handle our events.
Here is the example of the code from my C# class. This code is only to instance and track telemetry for Exceptions and Requests.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.DependencyCollector;
using Microsoft.ApplicationInsights.Web;

namespace AppInsightsHandler
{
    public class AppInsightsHandler
    {
        
        private TelemetryClient 	Client;

        private RequestTelemetry 	requestTelemetry;
        private ExceptionTelemetry 	exceptionTelemetry;

        string objectType;

        List<KeyValuePair<string, string>> properties = new List<KeyValuePair<string, string>>();
        List<KeyValuePair<string, string>> ContextGlobalProperties = new List<KeyValuePair<string, string>>();
        List<KeyValuePair<string, Double>> metrics = new List<KeyValuePair<string, Double>>();

        public void instantiateClient(string _instrumentationKey, string _objectType)
        {

            if (string.IsNullOrEmpty(_instrumentationKey))
            {
                throw new ArgumentNullException(nameof(_instrumentationKey), "Instrumentation key is required.");
            }
            if (string.IsNullOrEmpty(_objectType))
            {
                throw new ArgumentNullException(nameof(_objectType), "Object type is required.");
            }
            objectType = _objectType;
            TelemetryConfiguration config = new TelemetryConfiguration(_instrumentationKey);
            Client = new TelemetryClient(config);
            switch (objectType)
            {
                case "ExceptionTelemetry":
                    exceptionTelemetry = new ExceptionTelemetry();
                    break;
                case "RequestTelemetry":
                    requestTelemetry = new RequestTelemetry();
                    break;
            }

        }

        public void addProperty(string _key, string _value)
        {
            KeyValuePair<string, string> property = new KeyValuePair<string, string>(_key, _value);
            if (!properties.Exists(item => item.Key == _key))
            {
                properties.Add(property);
            }
        }

        public void addContextGlobalProperty(string _key, string _value)
        {
            KeyValuePair<string, string> property = new KeyValuePair<string, string>(_key, _value);
            if (!ContextGlobalProperties.Exists(item => item.Key == _key))
            {
                ContextGlobalProperties.Add(property);
            }
        }
        public void addMetrics(string _key, Double _value)
        {
            KeyValuePair<string, Double> metric = new KeyValuePair<string, Double>(_key, _value);
            if (!metrics.Exists(item => item.Key == _key))
            {
                metrics.Add(metric);
            }
        }

        public void setContextUserInfo(string _accountId, string _authenticatedUserId, string _userId = "", string _userAgent = "")
        {
            switch (objectType)
            {
                case "ExceptionTelemetry":
                    exceptionTelemetry.Context.User.AccountId = _accountId;
                    exceptionTelemetry.Context.User.AuthenticatedUserId = _authenticatedUserId;
                    exceptionTelemetry.Context.User.Id = _userId;
                    exceptionTelemetry.Context.User.UserAgent = _userAgent;
                    break;
                case "RequestTelemetry":
                    requestTelemetry.Context.User.AccountId = _accountId;
                    requestTelemetry.Context.User.AuthenticatedUserId = _authenticatedUserId;
                    requestTelemetry.Context.User.Id = _userId;
                    requestTelemetry.Context.User.UserAgent = _userAgent;
                    break;
            }
        }
        public void setContextOperation(string _operationId, string _operationName, string _parentId = "")
        {
            switch (objectType)
            {
                case "ExceptionTelemetry":
                    exceptionTelemetry.Context.Operation.Id = _operationId;
                    exceptionTelemetry.Context.Operation.Name = _operationName;
                    exceptionTelemetry.Context.Operation.ParentId = _parentId;
                    break;
                case "RequestTelemetry":
                    requestTelemetry.Context.Operation.Id = _operationId;
                    requestTelemetry.Context.Operation.Name = _operationName;
                    requestTelemetry.Context.Operation.ParentId = _parentId;
                    break;
            }
        }
        public void setContextComponentVersion(string _version)
        {
            switch (objectType)
            {
                case "ExceptionTelemetry":
                    exceptionTelemetry.Context.Component.Version = _version;
                    break;
                case "RequestTelemetry":
                    requestTelemetry.Context.Component.Version = _version;
                    break;
            }
        }

        public void setContextGlobalProperties()
        {
            foreach (KeyValuePair<string, string> element in ContextGlobalProperties)
            {
                
                switch (objectType)
                {
                    case "ExceptionTelemetry":
                        exceptionTelemetry.Context.GlobalProperties.Add(element);
                        break;
                    case "RequestTelemetry":
                        requestTelemetry.Context.GlobalProperties.Add(element);
                        break;
                }
            }
        }
       
        public void setsysExceptionTelemetryValues(Exception _exception, string _message, string _problemId, int _severityLevel)
        {
            if (exceptionTelemetry != null)
            {

                exceptionTelemetry.Exception = _exception;
                exceptionTelemetry.Message = _message;
                exceptionTelemetry.ProblemId = _problemId;
                switch (_severityLevel)
                {
                    case 4:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Critical;
                        break;
                    default:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Information;
                        break;
                }
                exceptionTelemetry.Timestamp = DateTimeOffset.UtcNow;
                foreach (KeyValuePair<string, string> element in properties)
                {
                    exceptionTelemetry.Properties.Add(element);
                }
                foreach (KeyValuePair<string, Double> element in metrics)
                {
                    exceptionTelemetry.Metrics.Add(element);
                }

            }
        }
  public void TrackTelemetry()
        {
            if (Client != null && objectType != "")
            {
                switch (objectType)
                {
                    case "ExceptionTelemetry":
                        Client.TrackException(exceptionTelemetry);
                        break;
                    case "RequestTelemetry":
                        Client.TrackRequest(requestTelemetry);
                        break;
                }
                Client.Flush();
            }
        }
        public void setExceptionTelemetryValues(string _exceptionMessage, string _exceptionSource, string _message, string _problemId, int _severityLevel)
        {
            if (exceptionTelemetry != null)
            {
                Exception e = new Exception(_exceptionMessage);
                e.Source = _exceptionSource;
                exceptionTelemetry.Exception = e;
                exceptionTelemetry.Message = _message;
                exceptionTelemetry.ProblemId = _problemId;
                switch (_severityLevel)
                {
                    case 0:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Verbose;
                        break;
                    case 1:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Information;
                        break;
                    case 2:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Warning;
                        break;
                    case 3:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Error;
                        break;
                    case 4:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Critical;
                        break;
                    default:
                        exceptionTelemetry.SeverityLevel = SeverityLevel.Information;
                        break;
                }
                exceptionTelemetry.Timestamp = DateTimeOffset.UtcNow;
                foreach (KeyValuePair<string, string> element in properties)
                {
                    exceptionTelemetry.Properties.Add(element);
                }
                foreach (KeyValuePair<string, Double> element in metrics)
                {
                    exceptionTelemetry.Metrics.Add(element);
                }

            }
        }
    
        public void setRequestTelemetryValues(string _requestName, string _requestId, Boolean _success, string _responseCode, string _source, string _uriString, Double _duration)
        {
            if (requestTelemetry != null)
            {
                requestTelemetry.Name = _requestName;
                requestTelemetry.Timestamp = DateTimeOffset.UtcNow;
                requestTelemetry.Success = _success;
                requestTelemetry.Id = _requestId;
                requestTelemetry.ResponseCode = _responseCode;
                requestTelemetry.Source = _source;
                requestTelemetry.Duration = TimeSpan.FromSeconds(_duration);
                if (_uriString != "")
                {
                    Uri uri = new Uri(_uriString);
                    requestTelemetry.Url = uri;
                }

                foreach (KeyValuePair<string, string> element in properties)
                {
                    requestTelemetry.Properties.Add(element);
                }
                foreach (KeyValuePair<string, Double> element in metrics)
                {
                    requestTelemetry.Metrics.Add(element);
                }
            }
        }

    }
}

 

After that create an X++ project in your solution and add a reference to your C# library:

 

 

Thereafter, let’s create an X++ class which makes use of our telemetry library:

 

 

Let us know if this helped you, and if you are interested to work with Microsoft Dynamics 365 you can check out our careers page for the open job positions. 

 

Processing an Excel File in Batch Using the FileUpload Functionality Together with SysOperationFramework

Sometimes in D365 things happen which are either human or system error, which will leave you with faulty data in your system.

 

That kind of thing happened some time ago for one of our clients, when a daily batch job removed all the loads for the purchase orders which had lines who have ‘Registered’ quantities, and left them with more than 3000 purchase orders for which they couldn’t create and post a product receipt journal, because they didn’t have the load associated with them, and going with the logic of creating a new batch job for posting product receipts for quantity = ‘Registered’ would’ve broke their workflow.

 

So, they exported the purchase orders that they wanted to update, and after seeing that the update should be done for more than 3000 orders, I knew that I should extend the SysOperationFramework, so the update could be done in batch processing on the server, and the users wouldn’t experience any performance issues on the interface itself.

 

When talking about extending the SysOperationFramework parts, you probably already know that we will have the well-known structure of classes in order to design our batch process: the controller class, responsible for running the operation and modifying the contract, the contract class, responsible for passing parameters and values from the user to the logic that processes operation, the service class, responsible for providing the logic which is being executed (in our example, iterating through the Excel file, getting the purchase orders IDs and posting a product receipt for them), and the User Interface builder (UIBuilder) class, responsible for the actual looks and event handlers of the dialog that is presented to the user.

 

Let’s have a look at what our code changes will look like in the D365 user interface, before scheduling the actual batch job:

 

 

Analyzing this dialog, we will see that it looks like every other batch dialog, with only one parameter: a file.

 

Below, we will see the code which is taking care of the design and functionality for this batch process.

 

The Controller Class:

 

/// <summary>
/// Controller class for creating & posting PO packing slips
/// </summary>
class AXMPostPOReceiptsController extends SysOperationServiceController
{
	/// <summary>
    /// Creates new instance of <c>AXMPostPOReceiptsController</c>
    /// </summary>
    public void new()
    {
        super();
     
        this.parmClassName(classStr(AXMPostPOReceiptsService));
        this.parmMethodName(methodStr(AXMPostPOReceiptsService, processOperation));
     
        this.parmDialogCaption("Create packing slips");
    }
	
	/// <summary>
    /// Sets the caption of the job
    /// </summary>
    /// <returns>Caption of the job</returns>
    public ClassDescription caption()
    {
        return "Create packing slips";
    }
	
	/// <summary>
    /// Method which is run while calling the corresponding menu item
    /// </summary>
    /// <param name = "args">Arguments passed from the menu item</param>
    public static void main(Args args)
    {
        AXMPostPOReceiptsController controller;
     
        controller = new AXMPostPOReceiptsController();
        controller.startOperation();
    }
}

 

Looking at the code for the AXMPostPOReceiptsController, we see that it has 3 methods, of which 2 are overridden: new and caption. Above every method there is a summary explanation of what that method is doing. We can see that in the new method, we are initializing a new instance of the controller class and are defining the processing class and method (the service class), in our case, AXMPostPOReceiptsService class.

 

Please don’t be confused about the caption and the dialog caption for the batch job, ‘Create packing slips’, we know that sometimes we also refer to the product receipts as packing slips.

 

The Data Contract Class:

 

/// <summary>
/// Data contract class for creating & posting PO packing slips
/// </summary>
[   DataContract,
    SysOperationContractProcessing(classStr(AXMPostPOReceiptsUIBuilder))
]
class AXMPostPOReceiptsDataContract
{
    container       storageResult;

	/// <summary>
    /// Parameter method which holds values of the packed variables from <c>FileUploadTemporaryStorageResult</c> class
    /// </summary>
    /// <param name = "_storageResult">Packed instance of <c>FileUploadTemporaryStorageResult</c> class</param>
    /// <returns>Container with packed values</returns>
    [DataMemberAttribute('StorageResult')]
    public container parmStorageResult(container _storageResult =  storageResult)
    {
        storageResult = _storageResult;
        return storageResult;
    }
}
    

 

As said, the data contract class holds the parameters that user wants to pass to the logic which is being executed. In our case, we have one parameter that we’re passing, storageResult of type container. As explained in the summary, this variable holds the values of the packed variables of the FileUploadTemporaryStorageResult class instance, which in fact holds the upload result of the FileUpload control.

 

As for now, the only thing that you need to know is that FileUploadTemporaryStorageResult implements SysPackable, which means that we can do serialization on it, like pack and unpack the variables defined in the #CurrentList for the #CurrentVersion macro.

 

Note: Please visit the File upload control page, where you can find documentation on this control.

 

The UI Builder Class:

 

/// <summary>
/// UI Builder class for posting purchase orders packing slips
/// </summary>
class AXMPostPOReceiptsUIBuilder extends SysOperationUIBuilder
{
    private str                 availableTypes = ".csv, .xlsx";
    private const str           OkButtonName = 'CommandButton';
    private const str           FileUploadName = 'FileUpload';
	
    AXMPostPOReceiptsDataContract   contract;

	/// <summary>
    /// Overriden the <c>postBuild</c> method to add a <c>FileUpload</c> control
    /// </summary>
    public void postBuild()
    {
        DialogGroup      dialogGroup;
        FormBuildControl formBuildControl;
        FileUploadBuild  dialogFileUpload;

        super();

        contract = this.dataContractObject();
        
        dialogGroup = dialog.addGroup("File path");
        formBuildControl = dialog.formBuildDesign().control(dialogGroup.name());
       
        dialogFileUpload = formBuildControl.addControlEx(classstr(FileUpload), FileUploadName);
        dialogFileUpload.style(FileUploadStyle::MinimalWithFilename);
        dialogFileUpload.baseFileUploadStrategyClassName(classstr(FileUploadTemporaryStorageStrategy));
        dialogFileUpload.fileTypesAccepted(availableTypes);
        dialogFileUpload.fileNameLabel("@SYS308842");
    }

	/// <summary>
    /// Subscribes events to the dialog form
    /// </summary>
    /// <param name = "_formRun">The instance of the dialog form</param>
    private void dialogEventsSubscribe(FormRun _formRun)
    {
        FileUpload fileUpload = _formRun.control(_formRun.controlId(FileUploadName));
        fileUpload.notifyUploadCompleted += eventhandler(this.uploadCompleted);
        fileUpload.notifyUploadAttemptStarted += eventhandler(this.uploadStarted);
        _formRun.onClosing += eventhandler(this.dialogClosing);
    }
	
	/// <summary>
    /// Executes logic for unsubscribing the registered events on the form
    /// </summary>
    /// <param name = "sender"></param>
    /// <param name = "e"></param>
    [SuppressBPWarningAttribute('BPParameterNotUsed', 'This is event parameter not required to use')]
    private void dialogClosing(xFormRun sender, FormEventArgs e)
    {
        this.dialogEventsUnsubscribe(sender as FormRun);
    }
	
	/// <summary>
    /// Unsubscribes events from the dialog form
    /// </summary>
    /// <param name = "_formRun">The instance of the dialog form</param>
    private void dialogEventsUnsubscribe(FormRun _formRun)
    {
        FileUpload fileUpload = _formRun.control(_formRun.controlId(FileUploadName));
        fileUpload.notifyUploadCompleted -= eventhandler(this.uploadCompleted);
        fileUpload.notifyUploadAttemptStarted -= eventhandler(this.uploadStarted);
        _formRun.onClosing -= eventhandler(this.dialogClosing);
    }
	
    /// <summary>
    /// Executes additional logic once the upload of the file is completed
    /// </summary>
    protected void uploadCompleted()
    {
        var formRun = this.dialog().dialogForm().formRun();
        FileUpload fileUpload = formRun.control(formRun.controlId(FileUploadName));
        FileUploadTemporaryStorageResult uploadResult = fileUpload.getFileUploadResult();

        if (uploadResult != null && uploadResult.getUploadStatus())
        {
            contract.parmStorageResult(uploadResult.pack());
        }

        this.setDialogOkButtonEnabled(formRun, true);
    }
	
	/// <summary>
    /// Additional logic which is executed once the upload of the file has started
    /// </summary>
    private void uploadStarted()
    {
        var formRun = this.dialog().dialogForm().formRun();
        this.setDialogOkButtonEnabled(formRun, false);
    }

    /// <summary>
    /// Enables/Disables the OK button of the dialog
    /// </summary>
    /// <param name = "_formRun">The instance of the dialog form</param>
    /// <param name = "_isEnabled">Should the OK button be enabled?</param>
    protected void setDialogOkButtonEnabled(FormRun _formRun, boolean _isEnabled)
    {
        FormControl okButtonControl = _formRun.control(_formRun.controlId(OkButtonName));
        if (okButtonControl)
        {
            okButtonControl.enabled(_isEnabled);
        }
    }

    /// <summary>
    /// Override of the <c>postRun</c> method in order to add events subscriptions
    /// </summary>
    public void postRun()
    {
        super();

        FormRun formRun = this.dialog().dialogForm().formRun();
        this.dialogEventsSubscribe(formRun);

        this.setDialogOkButtonEnabled(formRun, false);
    }

}

    

We can see that in this class we have more methods and more logic. You can also notice that we have event handlers, which should run the specified code once the event is started or completed. Analyzing the code, first we can see that the method postBuild has been overridden. Here, we’re constructing the actual look of the dialog. We can see that first we’re creating a group for the file path, and after that we’re adding the FileUpload control, we’re setting the style and the file upload strategy (you can see the documentation in the referenced documentation for File upload). We can also set the available types that user will be able to choose and upload. You can see that the availableTypes is actually string variable with file extensions defined.

 

After we’re done with adding controls to the dialog, it’s time to make the form responsive, and that’s when the event handlers come into action. As for every event, first we need to do a subscription to a certain event, and after we’re finished, we unsubscribe from that event. So, next we will have a look at method postRun which is called once the dialog is built and ran.

 

In this method, we see that we’re taking instance of the current dialog (FormRun), we’re making event subscriptions for that FormRun instance and we’re calling the method setDialogOkButtonEnabled which as the name suggests, it’s either enabling/disabling the ‘OK’ button, which is actually submitting the form displayed on the dialog. The solution here is only enabling the ‘OK’ button once we have successfully uploaded a file.

 

Now, let’s review the logic for subscribing and unsubscribing to an event. Looking at method dialogEventsSubscribe, we see that we’re retrieving the FileUpload control that we’ve created in postBuild method, and we’re adding (subscribing) to events for once the upload has attempted to start and once the upload is completed. The event handlers for these events are respectively methods uploadStarted and uploadCompleted. After that, we’re assigning an event handler for the onClosing event of the FormRun, which is basically calling another method, dialogEventsUnsubscribe, which is basically subtracting (unsubscribing) the event handlers from the events.

 

Looking at the event handlers, we can see that event handler uploadStarted doesn’t do anything special, but only disables the dialog ‘OK’ button. However, the other event handler, uploadCompleted, we’re once again retrieving the FileUpload, but this time, because the upload is completed, it means that we can take the upload result and store it somewhere (or do additional logic with it).

 

After taking the result of the file upload, as explained before, I am packing the result and sending it as a parameter to our contract class, so I can later use it in our service class, where all the logic for creating and posting the product receipts is located.

 

The Service Class

 

/// <summary>
/// Service class which is executing the logic for creating & posting PO packing slips
/// </summary>
class AXMPostPOReceiptsService extends SysOperationServiceBase
{
    #File
    container               currentLine;
    CommaTextStreamIo       localStream;
    PurchId                 currentPurchId;
    PurchTable              purchTable;

    /// <summary>
    /// The actual logic of the process
    /// </summary>
    /// <param name = "_contract">Instance of the <c>AXMPostPOReceiptsDataContract</c> class</param>
    public void processOperation(AXMPostPOReceiptsDataContract _contract)
    {
        if (_contract.parmStorageResult() != conNull())
        {
            FileUploadTemporaryStorageResult fileUploadResult = new FileUploadTemporaryStorageResult();

            fileUploadResult.unpack(_contract.parmStorageResult());

            if (fileUploadResult != null)
            {
                try 
                {
                    localStream = CommaTextStreamIo::constructForRead(File::UseFileFromURL(fileUploadResult.getDownloadUrl()));

                    if (localStream.status() != IO_Status::Ok)
                    {
                        throw error(strfmt('Is not possible to open the file. Error %1',enum2str(localStream.status())));
                    }
   
                    localStream.inFieldDelimiter("\,");
                    localStream.inRecordDelimiter("\n");
   
                    currentLine = localStream.read();
   
                    while(currentLine)
                    {
                        currentPurchId = conPeek(currentLine, 1);

                        purchTable = PurchTable::find(currentPurchId);

                        if (purchTable)
                        {
                            Num psNumber = strFmt("%1_PS", currentPurchId);

                            PurchFormLetter     purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
                            purchFormLetter.update(purchTable, psNumber, systemDateGet(), PurchUpdate::Recorded, AccountOrder::None, NoYes::No, NoYes::No);
                        }
            
                        currentLine = localStream.read();
                    }
                }
                catch (Exception::Error)
                {
                    error("@RET433");
                }
            }
        }
    }
}

 

Since we’re only doing a creation and posting of a product receipt for a certain purchase orders, the logic here will be pretty simple. We can see that we have once method, processOperation, which is taking an instance of the data contract class. With the help of the data contract, we can transfer the packed values of the file upload result from the UI builder to the service class.

 

Once we have unpacked the result, we’re constructing an IO stream, to which we’re using a file from URL, and that URL is generated with the help of FileUploadTemporaryStorageResult based on the unpacked values. I have wrapped all of the logic in try – catch block, and the code iterates trough the file that the user has uploaded previously, and it’s getting column values (in my case, it’s getting only the values from the first column, since I don’t have additional columns).

 

Once the value is taking, code is checking whether a purchase order exists for that purchase ID, and if it does, it proceeds with creating and posting the product receipt with the help of the PurchFormLetter class, and as you can see the parameters for the update are a buffer of the purchase table, a number for the packing slip (which in this case is generated manually, but that can be done via number sequences too), the date of the posting, the update parameter (in this case, only ‘Registered’ lines will be included), the account order set to ‘None’, and the settings for the proforma and whether the packing slip should be printed or not (both options set to ‘No’).

 

This was everything for processing a file in batch using the SysOperationFramework that you should know for starters. I really hope that I have well explained the bits of code which were presented.

 

Please note that there is also another way to solve this, and that would be to create a data entity and a table in which you will place your values (for this example, purchase order IDs), and also a batch classes and a query against the newly created table, so you can process the data that you have implemented. Both solutions work well, and although the data entity solution is more extendible, the one with the file upload is quicker and less painful.

What Is Performance Testing and Why Do You Need One?

Digital transformation is not an option for a long time ago, and many businesses are doing it. Only entering into the digital world is not sufficient anymore, you also need to build a culture of continuous improvements, that should help you to maintain the leadership position by meeting customer and business demands.

 

On one hand you have your business, which is fully automated with high expectations on stability, reliability, and capability of their applications towards achieving their goals. Any downtime or malfunction might lead to huge losses.

 

On the other hand, you have your smart and digitally aware customers that expect responsive systems, around-the-clock availability, immediate / on-time order fulfillment, quick invoicing, and zero errors. And these are the most common drivers of progress that shouldn’t be disappointed.

 

How Can Performance Testing Help You in Achieving Your Strategic Goals?

 

Performance testing is a powerful tool that applied against a variety of use case scenarios provides valuable insights to identify a company’s digital infrastructure performance risks.

 

Companies can and must be proactive in the identification of those risks that might damage their reputation, cause revenue and/or opportunity losses, but also in their mitigation, by devoting a certain amount of resources to perform performance testing and act upon the results. 

  

When Is the Best Time to Run Performance Testing?

 

Our recommendation is to perform performance testing:

 

Before Going Live

 

Once the solution is stable from a functionality perspective, it’s time to run performance testing to uncover what needs to be improved before they go live. 

 

Before Deploying Major Changes  

 

Any change in the system is potentially dangerous with certain risks associated with it and must be approached carefully. Especially when you have major phase releases, performance testing is a mandatory step to verify the existing and new functionalities from the perspective of performance and scalability.

 

Periodical Verification that System Can Handle Peaks

 

It is common that the load on a productive system is not constant over time, and there are certain events that can trigger business activities to cause meaningful fluctuations in the load. Such events can be caused by business behavior to handle certain tasks at a certain time of a day or month, legal requirements, or some special days such as Christmas or Black Friday that dictate consumer behavior that directly or indirectly challenges the scalability of business applications. The peak load from such a usage pattern can be significantly higher than the average load. 

  

How Can Axapta Masters Help You?

 

Axapta Masters has years of technical and business expertise working with Microsoft Dynamics solutions across many industries. We are leveraging that experience to help our customers to build an adapted approach based on their business needs. Our approach is unique and is consist of two major directions, that joined together are a guarantee for success: 

 

  • 24/7 production monitoring, and  
  • Performance Testing using a non-production environment. 

 

24/7 Production Monitoring

 

24/7 monitoring over a period of time is a crucial activity that helps us to capture valuable system metrics from a production environment, that are available only at that particular moment, without the possibility to retrieve them afterward.

 

Metrics such as AOS, SQL utilization, head-blockers, slow queries, batch job executions, integration points and exceptions are captured mainly in real-time, collected, and organized into a daily or weekly report. 

 

 

Performance Testing

 

Performance testing itself is a complex process that involves many steps to be successfully performed to get the desired outcome. 

Capture Requirements 

 

Discuss with business and IT users to understand exact requirements, day-to-day processes, and known issues, to design representative test cases with a focus on specific areas of interest. 

 

Test Environment

 

Usually a non-production environment.

 

Identify Test Scenarios

 

Work closely with the business and IT users to identify and agree on exact test scenarios taking into consideration multiple factors such as current system load, known issues/challenges, painful areas, and expected growth in the future. 

 

Plan and Design Tests

 

Create and agree on the schedule, test data, the specific configuration of the environment, and the team that will perform the testing.

 

Configure Test Environment

 

Our engineers will inspect the environment prior to testing, to assess its health and apply certain configuration changes required to support the testing and capture test results.

 

Test Execution

 

Execute test cases, monitor the executions, environment utilization metrics, and capture the statistics and trace log files. 

 

If you have more questions or you are interested in a performance review testing, contact us here and schedule a meeting!

 

And if you are interested in potential career opportunities, check out our careers page.

Error During Platform Update – “UpdateRetailSelfService.ps1 failed”

Starting the process of digital transformation for your company it’s not easy. In one of our previous blog posts, we shared how to install a deployable package like platform update/D365 version, and one of the errors we encountered in the Sync AX Database step.

 

As many of you know during the installation of the platform update you might encounter various errors. This time we would like to share a quick fix for the following error: “UpdateRetailSelfService.ps1 failed”

 

 

For this error try to start the Azure Storage Emulator on your D365 environment. As soon as you get the confirmation that the storage emulator is running you can click on the resume in LCS or rerun the failed step in your already opened cmd:

 

AXUpdateInstaller.exe execute -runbookid=”runbook1″ -rerunstep=52

 

 

Now the error is fixed.

 

No need to thanks us, we are glad to help you. So, if you are in need of someone to upgrade your systems from Microsoft Dynamics AX to Dynamics 365, we are open to future collaboration. Reach out to us here.

 

And if you are interested to be part of our team, check out our careers page we have open job vacancies all the time!

Sync AX Database Error – Installing Platform Update Deployable Package

If you are reading this blog post, you have encountered the same issues as us, so don’t worry you are not alone in this process.

 

For you who are for the first time here, you should check our previous blog post, learn how to install a deployable package like platform update/D365 version, and start the digital transformation of your company.

 


 

During the installation of the platform update package on your environment, you might get an error in the Sync AX Database step. Although there might be different errors when this step is executed the most common is the following (usually if you perform the installation on a local VM):

 

 

“The running command stopped because the preference variable “ErrorActionPreference” or common parameter is set to Stop: System.Management.Automation.RuntimeException: An exception of type System.Net.WebException occurred when making an http request to: http://127.0.0.1:80/ReportServer. Refer to the log file for more details.”

 

The error can easily be resolved following the steps below.

 

1. Open the SQL Reporting Services Configuration Manager (as an administrator).

 

 

2. Before clicking on the connect button check if the “Server Name” is the same as Computer Name.

 

 

3. The next step would be starting the SSRS server. If the server is already up and running please stop it and then again click on the start button.

 

 

4. As soon as you get a confirmation that the Report server is up and running you can continue with the installation of the deployable package using the command:

 

AXUpdateInstaller.exe execute -runbookid=”<name of the runbook>” -rerunstep=<step id where the update failed>

 

In our case this would be:

AXUpdateInstaller.exe execute -runbookid=”runbook1″ -rerunstep=25

 

Another error you can encounter in the process is “UpdateRetailSelfService.ps1 failed”, and here you can find our solution for it.

 

If you are in need of someone to upgrade your systems from Microsoft Dynamics AX to Dynamics 365, we are open to future collaboration. Reach out to us here.

 

And if you are interested in potential career opportunities, check out our careers page.

Installing a Deployable Package – Platform Update D365 Version

The digital transformation of your company will fundamentally change how you operate and deliver value to the end customer. No matter the industry you are in if you are using an older version of Dynamics, you should consider updating to Dynamics 365 version.

 

So, in this blog post, we are sharing the steps for installing a deployable package like platform update/D365version.

 

  1. Download the deployable package from LCS.
  2. Customize the necessary files for the update.
  3. Execute the commands using the axupdateinstaler.exe.

 

Before we jump into the process of installing a deployable package we would like to point out that you’ll need to:

 

1.1. Download the deployable package from LCS. When the file is downloaded check the general properties and make sure that they are like in the photo. (if there is a checkbox “unlock” make sure it’s marked)

 

 

1.2. Unzip the file in a new location. For example, C:\package. This should be done because of the length of the file path (just avoid using downloads or temp and MAKE SURE your folder doesn’t have space characters)

 

1.3. The package should look like this:

 

 

2.1. In that folder find the file: DefaultTopologyData.xml Right click and edit. Leave the notepad window open.

 

 

2.2  In the same folder open cmd as an administrator

 

 

2.3. Execute the command: AXUpdateInstaller.exe list

 

 

2.4. Copy all of the services you’ve got from the cmd command into the DefaultTopologyData.xml file ( <string>XXX</string> ) and save the file.

 

<ServiceModelList>

<string>AOSService</string>

<string>DevToolsService</string>

<string>ALMService</string>

<string>BIService</string>

<string>DIXFService</string>

<string>MROneBox</string>

<string>PayrollTaxModule</string>

<string>PerfSDK</string>

<string>ReportingService</string>

<string>RetailCloudPos</string>

<string>RetailHQConfiguration</string>

<string>RetailSDK</string>

<string>RetailSelfService</string>

<string>RetailServer</string>

<string>RetailStorefront</string>

<string>SCMSelfService</string>

<!– DefaultTopologyData are only for dev vhd, which we only support AOS update–>

<!– Create a new topology data for your Cloud AX topology–>

</ServiceModelList>

 

3.1. On the currently running cmd windows execute this command:

 

AXUpdateInstaller.exe generate -runbookid=”runbook1″ -topologyfile=”DefaultTopologyData.xml” -servicemodelfile=”DefaultServiceModelData.xml” -runbookfile=”runbook1.xml”

 

(note: the “runbook1” and “runbook1.xml” are just an example, type your text as you want)

 

This command would generate the runbook that will provide step-by-step instructions for updating the environment.

 

3.2. Next, execute the following command:

 

AXUpdateInstaller.exe import -runbookfile=”runbook1.xml”

 

3.3. And the last step is:

AXUpdateInstaller.exe execute -runbookid=”runbook1″

After successful deployment, the cmd will look like this (the number of steps may vary but you need to get the last step completed and get a clean command line)

 

 

After all the steps are done the D365 should have the desired platform update/ version.

 

*Note: If any of the steps fail you can use this command to rerun the deployment from the step that failed after troubleshooting it:

 

AXUpdateInstaller.exe execute -runbookid=”runbook1″ -rerunstep=25

 

If you are in need of someone to upgrade your systems from Microsoft Dynamics AX to Dynamics 365, we are open to future collaboration.

 

Reach out to us here, and if you are interested in potential career opportunities, check out our careers page.

AZCOPY for Easier and Faster Download of Files

Those of you who are familiar with the struggle of waiting hours for downloading a file from LCS (either for the Platform Update zip files or the Database backups from the Asset Library) can now benefit from the AzCopy app.

 

First things first and that means downloading the azcopy application which can be found here.

 

After downloading it, extract the zip file into the desired location (in my case is the “C:\” Drive).

 

 

 

 

Now, to use it we need to open cmd from the folder where you’ve extracted the zip file (or open cmd and navigate to that folder).

 

 

The command that we are going to use is:

 

azcopy copy “<Source Destination>” “<Desired/Target Destination>” –recursive=true

 

Based on the command above we can see that we have two parameters which be changed based on our activity.

 

As an example, I am trying to download the PlatformUpdate package to my local VM and for that first, I’ve logged in to the LCS and picked up the desirable package from the AssetLibrary but only to get the download link which I’ll use in the command.

 

 

Now equipped with what we need we can modify the command to suit us.

 

*NOTE: Please look at the end of the second parameter. You can notice that I’ve named my file as “pu10_16.zip”. If you don’t specify the name and especially the type of file your downloading, the azopy will download it as type “file” and you don’t want that cause it will be of no use for you.

 

azcopy copy “https://uswedpl1catalog.blob.core.windows.net/product-navproductname/6567e2af-004a-4f7b-91a1-d41fcca4e095/NavProductName-22-10-6ffd92c1-b99d-4d62-9a2c-4f3278adc44d-6567e2af-004a-4f7b-91a1-d41fcca4e095?sv=2015-12-11&sr=b&sig=yTbGuo9taddUO%2FtpUzrr65XZkTE58O5rA9PEhU9dVjc%3D&se=2021-01-29T09%3A37%3A05Z&sp=r” “C:\Platform_Update\pu10_16.zip” –recursive=true

 

 

You can see that my 5GB were downloaded in less than 20 minutes (way faster than using the regular download). Satisfied with the results I can now continue with deploying the platfrom_update package to my local D365 VM.

If you need to do the same there is another blog regarding the installation of platform update packages on the following link.

 

If you are interested in optimizing/improving your business processes, making the experience while using the application a whole lot easier in the long run, having the data secured in the cloud at the same time, and in need for someone to upgrade your systems from Microsoft Dynamics AX to Dynamics 365, we are open for future collaboration.

 

Reach out to us here, and if you are interested in potential career opportunities, check out our careers page.

The First Features Release Wave for 2021 Is Here – Dynamics 365

Brace yourselves, the first release wave for 2021 is here and it has some cool features. The newest release wave describes the new features releasing from April until September this year, and the first sneak peek can be accessed today.

 

The features are going to cover a broad range of functional areas, which we summarized it in a few points, and for the details, you can read more in the release plan online. Be prepared to take the chance, test, and validate all the new features and capabilities that will be a part of the 2021 release, before they are live for your users.

 

Finance and Operations

 

Dynamics 365 Finance

 

Dynamics 365 Finance continues with the lead in bringing in intelligence and automation to the users. With this release users experience out-of-the-box machine learning for their different financial operations.

 

Also, this release in core finance is focused on incorporating capabilities into the cash flow forecast and continuous enhancements across all financial areas.

 

Dynamics 365 Supply Chain Management

 

Dynamics 365 Supply Chain Management is expanding the inventory and logistic scenarios for chain management increasing transparency and efficiency for Asset Management users. Another thing is that it’ll help in reducing training time and cost, and increasing productivity of warehouse workers with a fresh, user-friendly mobile application.

 

Dynamics 365 Project Operations

 

Dynamics 365 Project Operations in the 2021 release wave 1, Microsoft will deliver functionally rich experiences in several areas such as the ability to forecast, use, and invoice nonstock materials on projects.

 

It will enable the ability to set up contractual commitments like billing methods and chargeability rules by the task or a work breakdown schedule element, and it will enable customers using the Dynamics 365 Project Service Automation application to upgrade to Project Operations.

 

Dynamics 365 Guides

 

Dynamics 365 Guides is a mixed-reality application that displays step-by-step holographic instructions right where the work happens, enabling employees to quickly learn and execute complex tasks.

 

In this release wave, the Dynamics 365 Guides team is focusing on intelligent workflows. Additionally, new entities for completion time will enable customers to build Power Automate flows that support their unique enterprise needs.

 

Commerce

 

As we mentioned in one of our previous blog posts, this year Microsoft has big plans for commerce, especially by introducing cloud for retail. Besides that, commerce expands the native integrations with Bing for Commerce search for product search, as well as Customer Service and Power Virtual Agents.

 

Human Resources

 

Through integration APIs and strategic partnership Dynamics 365 Human Resources continues to broaden the human capital, providing a better employee experience with a consolidated view of benefits for employees.

 

Sales

 

On the other hand, Dynamics 365 for Sales is focused on adding productivity enhancement for sellers, helping them in the decision-making process by providing data-driven insights. The updates will tackle automation, conversation intelligence, and enhancement to the mobile dashboard for a better experience for sellers on the go.

 

Dynamics 365 Customer Insights

 

The audience insights will enable every company better understanding of the customer data by adding customization and extensibility capabilities of the customer view, additional connectors for data ingestion, better controls for AI-based unification, and much more.

 

Besides that, the engagement insights capabilities will enable individual and holistic analytics over different device usage.

 

Customer Voice

 

Will take the customer’s feedback on a whole another level, by expanding the capabilities to collect feedback with a lot of different customized survey options. Additionally, creating follow-up action workflows will be much easier with the Power survey response trigger.

 

Service

 

With the all-in-one contact center, the Dynamics 365 Customer Service will ship with a logistic and integrated first-party voice and chat solution, which will enable customers to be up and running quickly.

 

Marketing

 

The improvements in Dynamics 365 for Marketing definitely are going to enhance marketer’s reach, analysis and with the help of AI, are going to deliver deeper personalization and different channels for customer engagement.

 

SMB

 

Dynamics 365 Business Central with the new features will simplify and improve the way Microsoft Partners administer tenants, and how the managing of licensing and permissions is done. The integration will also include Microsoft Teams and Visual Studio Code, which will help in providing modern development tools.

 

Check all the key dates for the 2021 release wave 1 here.

 

If you are interested in optimizing/improving your business processes, making the experience while using the application a whole lot easier in the long run, having the data secured in the cloud at the same time, and in need for someone to upgrade your systems from Microsoft Dynamics AX to Dynamics 365, we are open for future collaboration. Reach out to us here.

 

And if you are interested in potential career opportunities, check out our careers page.

Save a Predefined Query to Use for All the Users

If you have a business requirement that requires saving the filtered query to use it later for all the users (whenever the user opens some form, this form will be opened as it is on the predefined query)– that means that you would need to make new development.

 

My requirement was the following: For all users whenever they open this form “All project quotation” from “All Customers” the form should be opened as It is on the predefined query, and they wanted to be able to change this query when is needed.

 

Step-by-step Instructions for Dynamics 365

 

1. The first step is to create a new table where you can save a filtered query. The field should be a type of container to save the query run. I made the logic for this table in such a way that there will always have only one record.

 

 

2. Then we should create a new service class, controller, and contract to save the query.

 

For my requirement, I needed to save the SalesQuotationListPage_Proj query which is set on the property on the MenuItemDisplay – the menu item for the “All Project Quotation” form.

 

 

 

 

 

3. We need to create a new action menu item set the controller class on it, and to place this menu item somewhere in AX client so the user will be able to set this query as he wants.

 

4. After saving this query on the table now we should change the query on the original form with the saved one. For this purpose, I made the extension on the CustTable form (because my requirement was this form to be opened by All customers). I added a new Command button and copy the event handler Clicked to write the logic.

 

 

5. I created a new display menu item for the “All Project quotation” form and set the Form View Option to GRID. I made this because whenever I opened the form the detailed view was opened, this change helps me to solve that problem.

 

 

6. I Wrote a new event handler class and paste the event handler for the clicked method. You need to include the args.initialQuery()to set the saved query.

 

 

Note: Also there is another way to change the query on the existing form, you can use Chain Of Command. New extension class for the “All project quotation ” from and put this code args.initialQuery(query) in the Init() method before next().

Determining the Difference Between Dynamics AX(7) and Dynamics 365

The ERP world is shifting to the cloud causing rifts in this space because of the difference in cloud and on-premise installations; this blog Dynamics AX(7) versus Dynamics 365 Enterprise Edition hopes to explain the new functions, terms, and how Dynamics 365 relates to the new Dynamics AX (7).

 

How to Get Dynamics AX 7?

 

The new release of Dynamics AX (7) can be purchased now for over 20 users in the public cloud; it will be offered on premise sometime in 2017. The New Dynamics AX is a game changer for ERP in that it can be used anytime, anywhere, on any device and it includes development space. A package deal including CRM will soon also be available on Microsoft Azure cloud platform by subscribing to Microsoft Dynamics 365 Enterprise Edition plan 2 (see more details on our site).

 

What is Microsoft Dynamics 365?

 

Microsoft Dynamics 365 is evolving into a total business software package allowing Microsoft’s current CRM and ERP cloud solutions to be deployed in one cloud service with new role based subscriptions with purpose-built apps to help manage specific business functions like field service, customer service, and project service automation. Using the common data model, Dynamics 365 includes analytics from Cortana Intelligence and Power BI, and the productivity power of Office 365.

 

The Dynamics 365 apps are designed so they can be easily and independently deployed. Your business can start with the apps you need, and as your business demands, you can adopt additional capabilities with ease as all the apps work together.

 

Dynamics 365 is available to purchase a subscription on November 1st.

 

Dynamics 365 Enterprise Plan 1 includes CRM and these Apps:

 

  • Optimized for 250+ Employees;
  • Microsoft Dynamics CRM and light ERP;
  • Min 20 seats on select offers;
  • Powerapps that use the Microsoft common data model (see below);
  • Flow (New App – see more below);
  • Sales;
  • Field Service;
  • Customer Service;
  • Project Service Automation.

 

Plan one does not include operations whereas Dynamics 365 plan 2 includes plan 1 and operations or AX(7). AX (7) will be referred to as Operations in the Dynamics 365 Enterprise Edition.

 

Dynamics 365 Plan 2:

 

  • Includes everything in plan 1;
  • Dynamics AX (7) also referred to as the New Dynamics AX;
  • Adobe Marketing Cloud.

 

The Differences Between Dynamics AX7 versus Dynamics 365

 

The difference of Dynamics AX7 versus Dynamics 365 Enterprise Edition is that your company can purchase plans and not just an on premise application. The plans for Dynamics 365 are offered in two ways: plan 1 & plan 2.