Category: Uncategorized

  • Multi-Agent Architecture in enterprise languages

    Multi-Agent Architecture in enterprise languages

    Introduction:

    When most businesses talk about “adding AI,” they imagine it as a magic switch, plug it in, and suddenly every process runs itself. But the reality is very different. Just like hiring a new employee, an AI model comes with general intelligence but no knowledge of your business until you train it, give it access to tools, and guide it with clear workflows. That’s where the concept of multi-agent architecture comes in.

    Instead of relying on one giant AI to do everything, you build a team of digital employees, specialized agents, each with a clear role, connected together under an orchestrator. These agents can think (LLMs), remember (RAG), act (Tools/APIs), and know when to work (Triggers). Together, they mirror the way real organizations operate, collaborating, checking each other’s work, and scaling as your business grows. This approach turns AI from a “nice-to-have chatbot” into a true digital workforce that supports every department.

    Multi-Agent Architecture

    When you think about building AI systems, the word multi-agent architecture can sound intimidating. But here’s a simple way to picture it: imagine running a company.

    In a company, you don’t hire one person and expect them to do everything marketing, sales, HR, accounts, customer service. That would be chaos (and probably burn them out!). Instead, you hire specialists, train them, give them the right tools, and put managers in place to coordinate work.

    Organizational Org Chart.

    In Multi-Agent Orchestration, you can think of every employee in your company having their own digital counterpart (an AI agent) that mirrors their role, responsibilities, and workflows.

    How these things you can organize in Copilot Studio to create your agents, let’s understand technical things in normal language.

    Outcome in AI agents based on:

    Outcome = LLM (brain) + Context (RAG) + Tools/Actions (APIs) + Workflow (agents) + Feedback loop

    Generative AI / LLM (Generative AI orchestration in Copilot Studio):

    LLMs are great generalists. They’ve learned language, patterns, reasoning tricks. but by default, they:

    1. don’t know your latest prices, processes, or edge cases,
    2. can’t hit your systems (Odoo, D365, WhatsApp, SharePoint) without tools, and
    3. aren’t trained to follow your policies (discount limits, legal phrases, PII rules).

    so, if you ask them for company-specific answers without context, they hallucinate, politely and confidently.

    Context (RAG):

    RAG = Retrieval + Generation

    • Retrieval: AI fetches relevant pieces of information (like SOPs, price lists, or FAQs) from your enterprise data store.
    • Generation: AI uses that retrieved info to create an answer.

    Think of it like this:
     A human employee doesn’t memorize the entire company handbook. Instead, they look up the page they need when answering a customer.

    Tools/Actions (APIs):

    Tools like adding skill to your AI agent to perform things. For you are giving employee accounting software to perform account work. Think of a human employee.

    • Their brain = reasoning and language (like an LLM).
    • Their hand/keyboard = the ability to act (send an email, update CRM, generate a report).

    LLMs on their own are just the “brain.” They can think and talk, but they can’t actually do anything in your business systems.

    That’s why we give them Tools.
     And in practice, Tools = APIs, scripts, or connectors the AI can call.

    Triggers

    In the context of AI agents (or automation in general), a Trigger is the event that starts the process. For example, you are assigning work to employees and asking them to start on Monday. So scheduled task to him to perform on fix time or event.

    Think of it like this:

    • In a company, a trigger could be: “Customer walks into the office,” or “A support ticket is filed.”
    • For AI agents, a trigger is: “WhatsApp message received,” “New lead created in CRM,” or “Invoice overdue by 7 days.”

    No trigger → no action.

    By combining LLMs as the brain, RAG as the memory, Tools (APIs) as the hands, and Triggers as the starting point, you can create a true digital employee—an AI agent that doesn’t just talk but can actually understand, decide, and act. These agents can then be connected with each other in a multi-layered architecture, where each one has a specific role—like sales, support, or compliance—while an orchestrator coordinates their work. Just like in a real company, they collaborate, pass tasks along, and validate each other’s outputs. This interconnected system of digital employees is what we call a multi-agent architecture: not one giant AI doing everything, but a structured team of specialized agents working together to achieve enterprise goals.

    Conclusion

    Multi-agent architecture isn’t just a buzzword, it’s the future of how businesses will work with AI. Instead of expecting a single model to do everything (and getting frustrated when it doesn’t), we should think of AI the same way we think of people in an organization: each role has a purpose, each employee has tools, and they all work together under clear processes. By giving AI agents a brain (LLMs), memory (RAG), hands (APIs/Tools), and a clock (Triggers), we transform them into digital employees who can handle real business tasks with accuracy and accountability. And when these agents are connected in layers, coordinated, specialized, and scalable, you don’t just have automation, you have a digital workforce ready to grow with your business. The companies that succeed with AI won’t be the ones that add a chatbot and hope for the best, but the ones that build a well-structured team of agents that mirrors their organization and delivers results every single day.

  • Disaster Recovery in Business Central: How to Automate Full Backups Beyond 28 Days

    Disaster Recovery in Business Central: How to Automate Full Backups Beyond 28 Days

    Introduction:

    While Microsoft’s built-in 28-day backup is helpful for short-term recovery, many organizations require longer retention, audit compliance, or the ability to manually restore data at any point in the future.

    In this blog, we’ll walk through how to implement a custom backup strategy using PowerShell, Azure Blob Storage, and Automation to create daily BACPAC exports of your Business Central database, extending your DR capability beyond 28 days.

    Why Go Beyond 28 Days?

    • Regulatory compliance (GST, audit, tax)
    • Long-term recordkeeping
    • Ability to restore historic data for reporting/testing
    • Business continuity planning

    Tools You’ll Use:

    ToolPurpose
    PowerShell + BC Admin APITrigger export of BACPAC
    Azure Storage (Blob)Store backups securely
    Azure AutomationSchedule daily exports
    SSMSView or restore BACPAC if needed

    Step-by-Step: Automate Daily Full BACPAC Backup

    1. Set Permissions

    • Assign yourself the role: Business Central Administrator
    • Add D365 BACKUP/RESTORE permission set in BC

    2. Create Azure Blob Storage

    • Set up Blob container (e.g., bc-daily-backups)
    • Generate a SAS token or use Key Vault

    3. Write PowerShell Script

    $envName = “Production” $bacpacName = “Backup_$(Get-Date -Format yyyyMMdd).bacpac” $storageUrl = “https://yourblob.blob.core.windows.net/backups/$bacpacName?{SAS_TOKEN}”

    $token = Get-BCAdminToken

    Invoke-RestMethod -Method Post -Uri “https://api.businesscentral.dynamics.com/admin/v2.11/applications/businesscentral/environments/$envName/databaseExport” -Headers @{ “Authorization” = “Bearer $token” } ` -Body (@{ “storageAccountUrl” = $storageUrl } | ConvertTo-Json)

    4. Schedule in Azure Automation

    • Create a Runbook
    • Securely store token and keys
    • Trigger backup daily at 2 AM or off-peak hours

    How to Check or Restore Data

    1. Download .bacpac from Blob
    2. Use SQL Server Management Studio (SSMS)
    3. Right-click on Databases → Import Data-tier Application
    4. Review table data using SQL queries

    Bonus: Optional Restore for Testing

    • Restore BACPAC to Azure SQL or local server
    • Use for:
      • Training environments
      • Testing integrations
      • Backup validation

    Conclusion:

    For advanced disaster recovery, regulatory compliance, and peace of mind, implementing a custom BACPAC export pipeline allows you to retain control of your Business Central data, beyond Microsoft’s default limitations. It’s an essential best practice for mature businesses relying on ERP continuity.

  • Disaster Recovery in Business Central: Leveraging Microsoft’s Built-In 28-Day Backup

    Disaster Recovery in Business Central: Leveraging Microsoft’s Built-In 28-Day Backup

    Introduction:
    In the world of business-critical ERP systems, disaster recovery (DR) is not optional. it’s a necessity. Microsoft Dynamics 365 Business Central SaaS provides robust built-in backup capabilities that allow administrators to recover environments within a 28-day window. This blog explains how Microsoft handles these backups and how you can restore your environment if things go wrong.

    Microsoft’s Built-In Backup and Restore Features

    Microsoft automatically backs up all Business Central online environments (Production and Sandbox) daily, with retention of 28 days.

    Key Features:

    • Automated Daily Backups (no manual action required)
    • Restore to any point in time within 28 days
    • 1-minute precision for restores
    • Available via the Admin Center
    • Geo-redundancy for added disaster resilience

    🧭 How to Restore a Business Central Environment

    Navigate to Admin Center:
     URL: https://businesscentral.dynamics.com/{tenantId}/admin

    Select the Environment you want to restore (typically “Production”)

    Click Restore and choose the desired date and time from the last 28 days

    Give your new environment a unique name (you can’t overwrite the current one)

    The restored environment will be created as a Sandbox.

    🛠️ What’s Included in the Backup?

    IncludedNot Included
    Tenant databaseAttachments stored in Azure Blob
    Configuration and app dataApp source code or extensions
    Point-in-time dataAny data past 28 days

    When to Use This:

    • Accidental deletion of records
    • Data corruption or integration errors
    • Testing rollback after major changes
    • User error affecting production data

     Limitations

    • No manual export of full backup
    • Backup cannot be downloaded
    • Restore cannot overwrite production — only create new sandbox
    • Retention capped at 28 days

    Best Practice

    Always monitor critical operations and note significant data changes so that, if needed, you can restore precisely to just before the issue occurred.

    Conclusion:

    Microsoft’s built-in disaster recovery features for Business Central SaaS provide a strong first layer of protection. The 28-day rolling backup and self-service restore make it easy to recover quickly from most common issues without extra configuration. For long-term backup or regulatory requirements, however, you’ll need to extend this capability, and that’s what we cover in the next blog.

  • Build a Power Automate Flow to Analyze Sentiment of Emails from Your Manager

    Build a Power Automate Flow to Analyze Sentiment of Emails from Your Manager

    Introduction:

    Ever wondered how you can automatically analyze the tone of your manager’s emails and get instant alerts?

    With Power Automate and AI capabilities, you can create a smart email workflow that does exactly that. In this blog, we’ll walk you through building a flow that triggers new emails, checks if the sender is your manager, converts the email content to plain text, and uses AI sentiment analysis to determine whether the message is positive or negative. You’ll even receive a push notification with the results, all without writing a single line of code!

    Overview of Flow:

    This Power Automate flow intelligently monitors your inbox, checks if an incoming email is from your manager, and instantly analyzes its tone using AI sentiment analysis. By converting the email body to plain text, the flow ensures accurate sentiment detection (positive, neutral, or negative) and sends you a real-time push notification with the results. This automation helps you prioritize important emails, understand their tone at a glance, and respond quickly and appropriately. This is the flow we are going to create step by step.

    Step-by-Step Guide to Create This Flow :

    Step 1: Create a New Automated Flow

    1. Go to Power Automate.
    2. Click on Create > Automated cloud flow.
    3. Name your flow, for example, “Send a notification with the sentiment of manager’s email using AI Builder.
    4. Select the trigger “When a new email arrives (V3)” from Outlook.
    5. Click Create.

    Step 2: Get Your Profile Information

    1. Add a new step.
    2. Search for Office 365 Users connector.
    3. Select “Get my profile (V2)”.
    4. This step retrieves your details, including your manager’s ID.

    Step 3: Retrieve Your Manager’s Details

    1. Add another step with Office 365 Users.
    2. Select “Get manager (V2)”.
    3. This will fetch the manager’s email ID, which you will use for comparison.

    Code line for User (UPN) – ‘outputs(‘Get_my_profile’)?[‘body/userPrincipalName’]’

    Step 4: Add a Condition to Check if the Email is from Your Manager

    1. Add a Condition control.
    2. Set it to compare the From (Email) of the incoming email with the Mail field of your manager (from the Get manager step).

    Code line – ‘@equals(triggerOutputs()?[‘headers’]?[‘From’], body(‘Get_manager_(V2)’)?[‘mail’])’

    • If True, the flow continues; if False, it does nothing.

    Step 5: Convert HTML Email to Plain Text

    1. In the True branch, add the action “Html to text” (Data Operations).
    2. Select the Body content from the email.

    Step 6: Analyze Sentiment of the Email

    1. Add a new step with AI Builder.
    2. Choose “Analyze positive or negative sentiment in text”.
    3. Pass the output of Html to text to the input of this step.

    Step 7: Send a Push Notification

    1. Add Notifications connector.
    2. Select “Send me a mobile notification”.
    3. Include details like:

    Subject: @{triggerOutputs()?[‘body/subject’]}


    Sentiment: @{outputs(‘Analyze_positive_or_negative_sentiment_in_text’)?[‘prediction’]}

    Step 8: Test and Save

    1. Save the flow.
    2. Send a test email from your manager’s account.
    3. Check your mobile notification with the sentiment results.

    Conclusion

    With just a few steps, you can create a powerful automation that not only monitors emails from your manager but also provides instant sentiment insights using AI. This flow saves time, ensures you never miss important emails, and helps you gauge the tone of communication before even opening the message. By leveraging Power Automate and AI Builder, you can bring intelligence and efficiency to your everyday workflow.

  • Automate Sales Document Approvals Using Power Automate: Step-by-Step Guide

    Automate Sales Document Approvals Using Power Automate: Step-by-Step Guide

    Approvals are a crucial part of any sales process. Whether it’s a quote, proposal, or sales contract, routing it to the right approver and getting timely feedback can often be time-consuming. In this guide, I’ll walk you through how to build a sales document approval workflow using Power Automate.

    This flow automatically triggers when a sales document is submitted, fetches the right data, identifies the approver, waits for their decision, and sends emails based on the outcome. Let’s dive in.

    Step 1: Trigger the Flow When Approval is Requested

    We begin by using the trigger: “When a sales document approval is requested (V3)”.

    This trigger fires the moment a new approval request is raised from your system (for example, from a model-driven app or another form submission). It ensures the rest of the flow runs only when needed.

    Here’s how we’ve configured it:

    • Environment: PRODUCTION
    • Company: Perfact Design (or STW Services LLP if preferred) (CRONUS IN)
    • DocumentType: Quote
    • Status: Open
    • AmountIncludingVAT: Greater than 0

    This setup ensures that the flow only runs when:

    1. A sales quote (not order or invoice) is submitted.
    2. The status is marked as “Open” (i.e., still under processing).
    3. The amount is more than zero (we skip zero-value quotes).

    These filters help make the workflow efficient by only processing valid, actionable quotes and avoiding noise from draft or empty documents.

    Step 2: Retrieve Required Data

    After the trigger, we use several steps to gather information:

    • Get record – This fetches the full details of the sales document submitted for approval.
    • Get URL – This step constructs a direct link to the document so the approver can open it quickly.
    • Get direct approver – The flow then determines who the approver should be, usually based on the requestor’s reporting manager or business logic.
    • Get requestor user details – This pulls user profile information (like name and email) so we can use it later in emails or logs.

    Step 3: Start the Approval Process

    Now that we have everything ready, we send out the approval request using “Start and wait for an approval”.

    This step sends a prompt (via Teams, email, etc.) to the approver with details of the sales document and waits for them to either approve or reject it. It supports parallel or first-response approvals if you have more than one person involved.

    Here’s how the approval is configured:

    • Title: “Request for Quote” — this is what the approver sees in their notification.
    • Assigned to: This pulls in the direct approver’s email or user ID dynamically, based on earlier steps.
    • Details field: This provides a summary of the approval request.
       The format used here is:
       “An approval requested by [Requestor Name] for Sales Quote #[Quote Number] totaling [AmountIncludingVAT] for [Customer Name] must be approved.”
       This message gives the approver everything they need to make a decision without having to dig for more info.
    • Item link: This includes a link to open the sales quote directly in Business Central’s web client.
    • Item link description: It will simply show something like “Sales Quote #1007” as a clickable link.

    Under advanced settings:

    • Requestor: This is pulled from the Microsoft 365 user profile of the person who created the quote.
    • Enable notifications: Yes — this ensures the approver is notified via email or Teams.
    • Enable reassignment: Yes — allows the approver to delegate if needed.

    Step 4: Track Responses

    Once the approval request is out, we initialize a response summary. This is where we store the outcome of the approval.

    • Initialize response summary – Creates a variable to hold the outcome.
    • Apply to each – In case there are multiple approvers, this loops through each of their responses.
    • Finalize response summary – Once all responses are collected, we finalize and summarize the decision.

    Step 5: React Based on the Outcome

    After summarizing the outcome, we branch the flow based on the decision.

    The three possibilities are:

    1. Approved
      1. The system performs whatever “approve action” is defined (e.g., update a record, change document status).
      1. There’s a condition to check if an email should be sent.
      1. If yes, an email is sent to notify the requestor that their document has been approved.
    2. Rejected
      1. The “reject action” runs (e.g., log the reason, update status).
      1. Again, we check whether an email should be sent.
      1. If yes, the requestor gets notified of the rejection and possibly the reason.
    3. Cancelled or No Response (Default)
      1. The system performs a cancel or timeout handling action.
      1. It checks if cancellation emails are enabled and notifies the requestor accordingly.

    These conditional checks are helpful because in some cases, you might not want to send an email for every scenario—especially in testing or internal flows.

    Step 6: Optional Email Notifications

    The email sending logic is wrapped inside conditions. You can easily toggle whether emails should go out for each scenario (approved, rejected, cancelled) by adjusting these flags.

    This setup is useful if you want to control email noise or if you want the flexibility to turn off certain messages for a temporary phase.

    Summary

    This Power Automate flow is a simple but powerful tool to streamline your sales approval process. It ensures documents don’t get stuck waiting, and everyone is kept in the loop.

    Here’s what we achieved:

    • Automatically triggered approval process
    • Dynamic approver selection
    • Full decision tracking
    • Smart conditional email alerts

    Whether you’re using this with Dataverse, SharePoint, or any custom app, the steps remain largely the same.

    If you’d like to extend this further, you could add due date reminders, escalate overdue approvals, or log everything in a SharePoint list for historical tracking.

    Let me know if you’d like help adapting this for your business—happy to assist!

  • Building an Autonomous Travel Assistant with Copilot Studio

    Building an Autonomous Travel Assistant with Copilot Studio

    Imagine planning a trip and having all your travel questions answered instantly—whether it’s about visa requirements, safety guidelines, or finding reliable information on local regulations. That’s the idea behind Safe Travels, a virtual assistant built using Microsoft’s Copilot Studio.

    Recently, I explored how easy it is to build a powerful AI-driven agent that feels like a real assistant rather than a robotic chatbot. Here’s my experience setting it up.

    Step by Step by guide for Safe Travels

    At its core, Safe Travels is designed to answer common travel questions while guiding users with health and safety advice. Think of it as your personal travel advisor, but with a touch of AI magic.

    The dashboard begins with a simple Overview page. From here, you define:

    1. Name – Our assistant is aptly called “Safe Travels.”
    2. Description – A short, human-like summary of its purpose:
       “Provides answers to common travel questions and related health and safety guidelines.”
    3. Response Model – We use the GPT-4o model to give Safe Travels a conversational and intelligent voice.
    4. Orchestration – The option to enable AI-driven orchestration ensures that the assistant chooses the best possible responses based on user queries.

    What is “Instructions” in Copilot Studio?

    Instructions act as the core personality and behavior guide for your AI assistant. Instruction is the core of an autonomous agent where you give directions to the agent about what to do. Example Prompt

    You are Safe Travels AI, an autonomous travel agent focused on ensuring safe, seamless, and stress-free journeys. Your role is to plan and manage every aspect of a traveler’s trip while prioritizing safety, comfort, and verified information. Always think step-by-step and act as a proactive travel concierge.

    Your responsibilities include:**

    1. Destination & Risk Assessment: Suggest only safe destinations based on real-time data (weather, political climate, health advisories).
    2. Itinerary Planning: Create optimized travel plans including flights, hotels, local transport, and activities with safety checks.
    3. Emergency Preparedness: Provide advice on insurance, emergency contacts, embassy details, and local safety tips.
    4. Compliance & Documentation: Ensure passports, visas, health requirements, and travel regulations are met.
    5. Continuous Monitoring: Track the trip in real time and notify the traveler of any changes, delays, or safety alerts.

    Your goal: Act as a trusted, proactive AI agent who ensures the traveler’s journey is safe, well-planned, and enjoyable.

    Generate:**

    • A detailed trip plan template (with safety checkpoints).
    • 3 real-time monitoring features for autonomous travel safety.
    • A short pitch (30 words) describing SafeTravel AI.”

     They determine:

    • Tone of voice (e.g., polite, professional, or casual)
    • Scope of knowledge (e.g., focus on travel, health, or safety)
    • Response style (e.g., short answers, detailed explanations, or step-by-step guides)
    • Knowledge base: you can specify which knowledge base you need to use for which information.
    • Tools: You can also guide the agent to perform certain tasks which tool you need to select.

    What is the Knowledge Section?

    This section allows you to add data, files, and trusted resources to help the AI provide accurate and reliable responses. Instead of relying solely on its pre-trained data, the AI can reference the knowledge sources you define.

    In most cases, we don’t have information from when you are dealing with your own business or organization. In that case you can have web search disabled.

    Adding Tools, Triggers, and Agents

    This is where Copilot Studio shines:

    • Tools: You can plug in APIs or functions to let the agent perform tasks beyond answering questions.
    • Triggers: These activate the assistant when certain events happen (think “send an alert when new travel rules appear”).
    • Agents: You can connect Safe Travels with other specialized agents, each handling a part of the workflow. For example, one agent could handle visa queries while another manages safety regulations.

    Conclusion:

    In just a few hours, I was able to build, test, and customize a virtual travel assistant. The no-code interface makes it approachable for non-developers, while advanced users can integrate APIs and workflows to take things up a notch.

  • Mastering the Compose Action in Power Automate

    Mastering the Compose Action in Power Automate

    Introduction

    In Power Automate, the Compose action plays a crucial role in handling data within a flow. It allows you to store values—such as text, numbers, arrays, or complex JSON structures—temporarily, making them easy to reference and reuse. Whether you’re simplifying expressions, storing intermediate results, or preparing data for further actions, Compose provides a clean and efficient way to manage data logic. This is especially useful when dealing with structured outputs from services like HTTP requests or databases, where you need to extract and manipulate specific fields without repeatedly writing complex expressions.

    Compose action

    The Compose action in Power Automate is used to create and store data temporarily within a flow. It can be used to build or manipulate structured data like JSON, strings, numbers, or arrays, and then reference that data later in the flow without recalculating or repeating logic.

    Why Compose is Most Commonly Used:

    • Simplify Expressions
      You can write a long expression once in Compose (like concat(…), formatDateTime(…), etc.), give it a name, and reference it later. This improves readability and makes your flow easier to maintain.

      Example
      formatDateTime(utcNow(), ‘yyyy-MM-dd’)
    • Hold Intermediate Values
      Store intermediate results between actions (like extracted text, filtered data, or calculated totals).
    • Build JSON or Arrays
      Use Compose to build structured data that will be passed to APIs, loops, or other systems.
    • Debug and Inspect Values
      Since Compose outputs are visible in run history, it’s a quick way to test and see what your expression returns.

    Example Json Data –

    { “body”: { “headers”: [ { “sha1”: “08f96a6ac4300”, “headers”: [ { “Subject”: “You missed a VM= | Transcription Available Play Now 02min57se= 3pm|Friday-February-2024 12:21 PM” }, { “Message-Id”: “170811486211.6420.16697328371498069029@takahashibussho.co.jp” }, { “Content-Transfer-Encoding”: “7bit” } ], “filename”: “rawHeaders.txt”, “sha256”: “89525511f796c492eb” } ], “addresses”: { “to”: [ “jeom” ] }, “links”: [], “phishml”: { “confidence_spam”: “0.0002689999237190932”, “confidence_clean”: “0.00001319524653808912”, “category”: “threat”, “confidence_threat”: “0.9997478127479553” }, “history”: [ { “date”: “2024-02-16T16:08:21-05:00”, “events”: { “phishrip_started”: { “queried_fields”: [ “from”, “subject” ], “time_range”: { “start_time”: “2024-02-15T16:08:15-05:00”, “end_time”: “2024-02-16 21:08:15 +0000” }, “quarantine”: “true”, “id”: “7dd22796-c400-4b9f-9c74-3f198272a36d”, “status”: “processing” } }, “causer_name”: “Threat Email Notification for Reporter” }, { “date”: “2024-02-16T16:08:15-05:00”, “trigger_name”: “One of three different names here”, “causer_type”: “Action”, “event_type”: “other”, “trigger_type”: “User”, “events”: { “emails”: [ { “action_email_id”: “c4ba53c9-8932-40a7-a347-f0cb74d04f15”, “to”: [ “” ], “email”: “Threat Email Notification for Reporter”, “status”: null } ], “changed_fields”: { “action_status”: [ “received”, “resolved” ] } }, “causer_name”: “Threat Email Notification for Reporter” }, { “date”: “2024-02-16T16:07:56-05:00”, “trigger_name”: null, “causer_type”: “User”, “event_type”: “other”, “trigger_type”: null, “events”: { “changed_fields”: { “viewed”: [ false, true ] } }, “causer_name”: “NAME HERE” }, { “date”: “2024-02-16T15:22:35-05:00”, “trigger_name”: null, “causer_type”: “Action”, “event_type”: “other”, “trigger_type”: null, “events”: { “emails”: [ { “action_email_id”: “0ebd75cc-23ea-4f91-8459-023f81e6c891”, “to”: [ “” ], “email”: “Threat Email Notification for Admin”, “status”: null } ], “tags”: { “added”: [ “MANUAL” ] }, “changed_fields”: { “severity”: [ “unknown_severity”, “critical” ], “category”: [ “unknown”, “threat” ] } }, “causer_name”: “Threat Notification for Admin” }, { “date”: “2024-02-16T15:22:34-05:00”, “trigger_name”: null, “causer_type”: “Rule”, “event_type”: “other”, “trigger_type”: null, “events”: { “tags”: { “added”: [ “KB4:SPF_PASS” ] }, “changed_fields”: { “pipeline_status”: [ “processing”, “processed” ] } }, “causer_name”: “KB4:URGENCY” }, { “date”: “2024-02-16T15:22:26-05:00”, “trigger_name”: null, “causer_type”: “Intert”, “event_type”: “other”, “trigger_type”: null, “events”: { “report”: { “name”: “VirusTotal”, “results”: [ { “field”: “attachment”, “value”: “JPQN.png” }, { “field”: “autoscan”, “value”: “SHA-256 not found.” } ] }, “tags”: { “removed”: [ “VT_PENDING” ], “added”: [ “VT_HASH_NOT_FOUND” ] } }, “causer_name”: “VirusTotal” }, { “date”: “2024-02-16T15:22:22-05:00”, “trigger_name”: null, “causer_type”: “Integrations::PhishMl::Report”, “event_type”: “other”, “trigger_type”: null, “events”: { “report”: { “name”: “Phish ML”, “results”: [ { “field”: “clean”, “value”: “0.00” }, { “field”: “spam”, “value”: “0.03” }, { “field”: “threat”, “value”: “99.97” } ] }, “tags”: { “added”: [ “PML:THREAT” ] } }, “causer_name”: “Phish ML” }, { “date”: “2024-02-16T15:22:10-05:00”, “events”: { “part”: { “name”: “JPQN.png” } }, “causer_name”: null }, { “date”: “2024-02-16T15:22:10-05:00”, “causer_name”: null } ], “bad_links”: [], “tags”: [ “SUCCESS_TAG” ] } }

    For example, if you’re receiving this data from a source like an HTTP call or a database in plain text or JSON format, you’ll first need to parse it to access specific values like the subject. In such cases, the Compose action is very helpful — you can use it to temporarily hold the parsed data or just extract the Subject using an expression, making it easier to reuse later in your flow.

    I will hold json value in compose action:

    We can also pass compose value in variable; here I am using ‘varObject’ to store compose output value –

    Now If I want to get first header subject value, I can use low code/ no code expression to get value –

    variables(‘varObject’)[‘body’][‘headers’][0][‘headers’][0][‘Subject’]

    Which we can assign to a variable like this:

    And we will be able to extract subject value in variable ’varSubject‘.

    Conclusion

    The Compose action in Power Automate is a powerful yet simple tool that helps streamline flows by reducing complexity and improving maintainability. Whether you’re working with raw JSON, intermediate results, or dynamic expressions, Compose allows you to hold, inspect, and reuse data efficiently without redundancy. In scenarios involving nested JSON—like extracting the ‘Subject’ line from email headers, it enables a clean, low-code approach to access values quickly and assign them for further use. By leveraging Compose strategically, you not only simplify your flow logic but also make debugging and future updates much easier.

  • How to Schedule a Recurring Teams Message for Internal Status Updates Using Power Automate

    How to Schedule a Recurring Teams Message for Internal Status Updates Using Power Automate

    Keeping your internal teams updated consistently is essential. Whether it’s about project status, weekly goals, compliance reminders, or team motivation messages, manual follow-ups can be inefficient and inconsistent.

    Let’s walk through a practical business case using Microsoft Power Automate and Microsoft Teams, where we schedule a recurring message that gets posted in a group chat at a fixed time every few weeks. The example is simple but powerful and can be easily adapted for real-world usage across different departments like HR, IT, or Project Management.

    Step 1: Set Up Recurrence Trigger

    The first step in your flow is a Recurrence trigger. And fill out parameters like this image.

    This tells Power Automate how often the flow should run.

    • Interval: 2
    • Frequency: Week
    • Day: Monday
    • Time: 10:00 AM
    • Time zone: (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi

    This configuration means that every 2 weeks, at 10:00 AM IST on a Monday, the flow will initiate. It’s ideal for scheduling periodic events like strategy reminders, reviews, or compliance messages.

    Step 2: Post a Message in Teams

    Next, we add the “Post message in a chat or channel” action to send the message to Microsoft Teams.

    Here’s how it’s configured:

    • Post as: Flow bot
    • Post in: Group chat
    • Group chat name: Internal Status Updates
    • Message: “Recurring message”

    In a real scenario, your message might be something like:

    Reminder:

    It’s time to begin the next planning cycle.
    Please start gathering updates from your departments and be ready for the review meeting scheduled in 2 weeks.

    PMO Team

    This message is sent automatically, no manual intervention required. It appears to team members as if posted by the Flow Bot, ensuring visibility and formality.

    Testing

    Let’s test using manual and see flow is working or not, and it worked.

    We got a message in Microsoft Teams.

    Conclusion

    Automating recurring messages in Microsoft Teams using Power Automate can streamline your internal communication and remove unnecessary manual effort. Whether you’re sending reminders, alerts, or morale boosters, flows like these can improve accountability and consistency across your organization.

    If you’d like to set up a similar flow or customize it for your department, feel free to reach out, we can help you design and deploy the right automation for your business needs.

  • Automate Teams Alerts When a Purchase Order Is Released in Business Central

    Automate Teams Alerts When a Purchase Order Is Released in Business Central

    Introduction

    Imagine you’re managing procurement in your organization and want to instantly alert your team on Microsoft Teams whenever a purchase order (PO) is created in Business Central. Sounds useful? With Microsoft Power Automate and Adaptive Cards, this automation is not only possible—it’s seamless and code-free!

    In this blog post, I’ll Walk you through how to build a real-time notification system that triggers when a PO is released in Dynamics 365 Business Central and sends a beautifully formatted Adaptive Card to Microsoft Teams.

    Use Case

    Notify a team on Microsoft Teams whenever a purchase order is released in Business Central. To implement this automation, you’ll need a few essential tools: Microsoft Power Automate (Flow) for building the workflow, Dynamics 365 Business Central as the ERP system where purchase orders are managed, Microsoft Teams for team collaboration and notifications, and Adaptive Cards, which are built into Power Automate and allow you to create rich, interactive messages for Teams.

    Step-by-Step Guide to Build This Flow

    Step 1: Trigger on PO Release in Business Central

    • Create a new flow in Power Automate.
    • Use the trigger: When a business event occurs (V3).
    • Set the Environment to Production.
    • Set the Event to:
      Purchase order released – 1.0 (Microsoft)

    This ensures the flow is triggered as soon as a PO is finalized and marked ready in Business Central.

    Step 2: Add Adaptive Card

    • Add the “Adaptive Card” action.
    • This action is used to structure your notification using a card layout.
    • You can add dynamic content here such as:
      ⦁ PO Number
      ⦁ Vendor Name
      ⦁ Amount
      ⦁ Release Date

    Step 3: Set the Adaptive Card Title

    • Insert an action to update the title or header of the Adaptive Card.
    • Use the PO details in the title:

    ‘New Purchase Order Released: PO #[PurchaseOrderNumber]’

    This helps in making the alert more readable and informative at a glance.

    Step 4: Post the Card in Teams

    • Add the action: Post card in a chat or channel.
    • Configure:
      ⦁ Post as: Flow bot
      ⦁ Post in: Your chosen Team & Channel
      ⦁ Card content: The Adaptive Card created earlier

    Now your team will receive the PO details instantly in their Teams chat.

    Testing the Flow

    Once everything is set up, simply go to Business Central and release a new Purchase Order. As soon as the PO is released, a notification will automatically appear in the configured Microsoft Teams channel within seconds, keeping your team instantly informed.

    Example Output in Teams

    New Purchase Order Released: PO #10456
    Vendor: AR Day Property Management
    Amount: $6,770.00 Date: April 25, 2025

    Wow, flow worked

    Benefits of This Automation

    This automation enables real-time communication with your team, ensuring that everyone stays informed as soon as a purchase order is released. It significantly reduces the need for manual updates and follow-ups, saving time and minimizing errors. By streamlining the process, it also ensures faster approvals and processing, keeping your procurement cycle efficient. Additionally, the solution is highly customizable, allowing you to adapt it for other Business Central events such as invoice postings, payment confirmations, and more.

    Conclusion

    Business automation doesn’t need to be complicated. By combining the power of Dynamics 365 Business Central, Power Automate, and Microsoft Teams, you can streamline your procurement process and keep your team in the loop—automatically!

    Need help customizing this for your business? Let’s connect and take your workflows to the next level.