Logging is an essential part of application development, especially in cloud environments where monitoring and debugging are crucial. In Azure Functions, there is no built-in provision to log application-level details into a centralized database, making it challenging to check logs every time in the Azure portal. This blog focuses on integrating NLog into Azure Functions to store all logs in a single database (Cosmos DB), ensuring a unified logging approach for better monitoring and debugging.
Begin by creating an Azure Function project using the Azure Function template in Visual Studio.
To enable logging using NLog, install the following NuGet packages:
Install-Package NLog
Install-Package NLog.Extensions.Logging
Install-Package Microsoft.Azure.Cosmos
NLog uses an XML-based configuration file to define logging targets and rules. Create a new file named Nlog.config in the project root and configure it with the necessary settings.
Refer to the official NLog documentation for database target configuration: NLog Database Target
Important: Set Copy to Output Directory to Copy Always in the file properties to ensure deployment.
Create an Azure Cosmos DB account with the SQL API.
Sample Cosmos DB Database and Container
In the local.settings.json file, define the Cosmos DB connection string.
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "CosmosDBConnectionString": "AccountEndpoint=https://your-cosmosdb.documents.azure.com:443/;AccountKey=your-account-key;" } }
Modify Startup.cs to configure NLog and instantiate database connection strings and log variables.
using Microsoft.Azure.Functions.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using Microsoft.Azure.Cosmos; [assembly: FunctionsStartup(typeof(MyFunctionApp.Startup))] namespace MyFunctionApp { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddLogging(loggingBuilder => { loggingBuilder.ClearProviders(); loggingBuilder.SetMinimumLevel(LogLevel.Information); loggingBuilder.AddNLog(); }); builder.Services.AddSingleton(new CosmosClient( Environment.GetEnvironmentVariable("CosmosDBConnectionString"))); } } }
To ensure efficient logging, add logs based on the following log level hierarchy:
Example Logging in Function Code:
using System; using System.Threading.Tasks; using Microsoft.Azure.Cosmos; using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; public class MyFunction { private readonly ILogger<MyFunction> _logger; private readonly CosmosClient _cosmosClient; private readonly Container _container; public MyFunction(ILogger<MyFunction> logger, CosmosClient cosmosClient) { _logger = logger; _cosmosClient = cosmosClient; // Initialize Cosmos DB container _container = _cosmosClient.GetContainer("YourDatabaseName", "YourContainerName"); } [FunctionName("MyFunction")] public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer) { var logEntry = new { id = Guid.NewGuid().ToString(), timestamp = DateTime.UtcNow, logLevel = "Information", message = "Function executed at " + DateTime.UtcNow }; // Insert log into Cosmos DB await _container.CreateItemAsync(logEntry, new PartitionKey(logEntry.id)); _logger.LogInformation("Function executed at {time}", DateTime.UtcNow); } }
Once the function is ready, deploy it to Azure Function App using Visual Studio or Azure DevOps.
Deployment Considerations:
By following these steps, you can successfully integrate NLog into your Azure Functions for efficient logging. This setup enables real-time monitoring, structured log storage, and improved debugging capabilities.
]]>Power Fx is a low-code language expressing logic across the Microsoft Power Platform. It’s a general-purpose, strong-typed, declarative, and functional programming language described in human-friendly text. Makers can use Power Fx directly in an Excel-like formula bar or Visual Studio Code text window. Its concise and straightforward nature makes everyday programming tasks easy for both makers and developers.
Power Fx is expressed in human-friendly text. It’s a low-code language that makers can use directly in an Excel-like formula bar or Visual Studio Code text window. The “low” in low-code is due to the concise and straightforward nature of the language, making everyday programming tasks easy for both makers and developers.
Power Fx enables the full spectrum of development, from no-code makers without any programming knowledge to pro-code for professional developers. It enables diverse teams to collaborate and save time and effort.
To use Power Fx as an expression language in a desktop flow, you must create one and enable the respective toggle button when creating it through Power Automate for the desktop’s console.
Each Power Fx expression must start with an “=” (equals to sign).
If you’re transitioning from flows where Power Fx is disabled, you might notice some differences. To streamline your experience while creating new desktop flows, here are some key concepts to keep in mind:
With Power Fx Disabled
Give your collection a name (e.g., myCollection) in the Variable Name field.
In the Value field, define the collection. Collections in PAD are essentially arrays, which you can define by enclosing the values in square brackets [ ].
Action: Set Variable
Variable Name: myNumberCollection
Value: [1, 2, 3, 4, 5]
Action: Set Variable
Variable Name: myTextCollection
Value: [“Alice”, “Bob”, “Charlie”]
You can also create collections with mixed data types. For example, a collection with both numbers and strings:
Action: Set Variable
Variable Name: mixedCollection
Value: [1, “John”, 42, “Doe”]
If you want to use the dollar sign ($) followed by a opening curly brace sign ({) within a Power Fx expression or in the syntax of a UI/Web element selector and have Power Automate for desktop not treat it as the string interpolation syntax, make sure to follow this syntax: $${ (the first dollar sign will act as an escape character)
For the complete list of all available functions in Power Automate for desktop flows, go to Formula reference – desktop flows.
Yes, use Power Fx if your flow needs custom logic, data transformation, or integration with Power Apps and you’re comfortable with the learning curve.
No, avoid it if your flows are relatively simple or if you’re primarily focused on automation tasks like file manipulation, web scraping, or UI automation, where Power Automate Desktop’s native features will be sufficient.
]]>In the ever-evolving world of software development, efficiency is key. App developers must balance shipping high-quality features quickly while maintaining code integrity and performance. The rise of AI-driven development tools like GitHub Copilot is transforming the way code is written—boosting productivity and allowing developers to focus on what truly matters: innovation.
Every developer faces the challenge of delivering features quickly without sacrificing code quality. Businesses demand rapid feature releases to remain competitive, but writing robust, scalable, and error-free code takes time— often leading to technical debt, extended debugging cycles, and software delivery bottlenecks.
GitHub Copilot is changing the equation. By leveraging AI-driven coding assistance, developers can work smarter, not harder—bridging the gap between speed and quality without compromise.
Imagine you’re tasked with setting up an API integration for a new feature. Instead of manually writing boilerplate code, you simply prompt GitHub Copilot:
“Copilot, I need to set up an API integration for our new feature. Can you get me started on the structure?”
Instantly, Copilot generates the framework, providing essential functions and error handling. It doesn’t stop there—it proactively suggests performance optimizations and asks:
“Shall I enhance error management to handle specific edge cases?”
This level of AI-driven code assistance transforms software development workflows. With GitHub Copilot handling repetitive coding tasks, developers can concentrate on building custom features that differentiate their applications.
From a business perspective, the benefits of AI-driven development tools extend beyond individual productivity gains:
AI-driven development tools like GitHub Copilot are not just the future—they are the present. As AI evolves, developers will increasingly shift from manual coding to strategic problem-solving, driving greater innovation across industries.
At Perficient, we help organizations unlock the full potential of AI in software development, integrating these tools to build faster, smarter, and more resilient applications.
GitHub Copilot is more than just an assistant—it’s a force multiplier for developers. If you’re looking to accelerate software development and enhance coding efficiency, now is the time to explore how Copilot can transform your workflow.
This blog is part of a larger conversation on how Microsoft Copilot is transforming the workplace. Our latest video showcases Copilot’s impact across various business roles—including this app developer use case—demonstrating how AI is driving efficiency and innovation.
If you’d like to explore how AI can enhance your development workflow, let’s connect!
]]>In today’s fast-paced digital landscape, efficiency and productivity are paramount. Customizing AI to meet your business needs is key to maintaining a competitive edge. Enter Copilot Agents – specialized intelligent AI assistants designed to streamline workflows by automating repetitive tasks, providing actionable insights, and seamlessly integrating with your existing tools and data sources. Whether you’re managing projects, supporting customers, or conducting research, Copilot Agents empower you to achieve more with less effort.
Copilot agents are now available on the Web and Work tabs of Copilot Chat, in addition to other workflows and tools you already use.
You can use pre-built agents, agents created by others in your organization, or create your own.
Copilot Agents offer a range of business benefits that can significantly enhance operations and drive growth. Here are some key advantages:
The versatility and potential use cases for Copilot Agents is vast:
Category | Use Case | Description |
Healthcare | Patient Management | Automate patient scheduling, reminders, and follow-ups to ensure timely care and reduce administrative workload. |
Medical Research | Assist in compiling and analyzing research data, generating reports, and identifying trends in medical studies. | |
Telemedicine | Facilitate virtual consultations by managing appointments, patient records, and follow-up actions. | |
Finance | Fraud Detection | Monitor transactions for suspicious activity and alert relevant personnel for further investigation. |
Financial Planning | Automate budget management, financial forecasting, and investment analysis to optimize financial strategies. | |
Customer Support | Handle customer inquiries, process transactions, and provide personalized financial advice. | |
Retail | Inventory Management | Track stock levels, predict demand, and automate reordering processes to ensure optimal inventory levels. |
Customer Engagement | Provide personalized shopping experiences, recommend products, and handle customer inquiries. | |
Sales Optimization | Analyze sales data, identify trends, and suggest strategies to boost sales and improve customer satisfaction. | |
Manufacturing | Production Planning | Automate scheduling, resource allocation, and workflow management to optimize production processes. |
Quality Control | Monitor production quality, identify defects, and suggest corrective actions to maintain high standards. | |
Supply Chain Management | Track shipments, manage supplier relationships, and optimize logistics to ensure timely delivery. | |
Education | Student Support | Assist with enrollment, course selection, and academic advising to enhance the student experience. |
Research Assistance | Compile research data, generate reports, and provide insights to support academic research. | |
Administrative Tasks | Automate administrative processes such as scheduling, record-keeping, and communication with students and faculty. | |
Human Resources | Recruitment | Automate candidate screening, interview scheduling, and onboarding processes to streamline recruitment. |
Employee Management | Handle employee inquiries, manage records, and assist with performance evaluations. | |
Training and Development | Provide personalized training recommendations, track progress, and suggest development opportunities. | |
Customer Service | Support Ticket Management | Automate ticket routing, response generation, and resolution tracking to improve customer support efficiency. |
Feedback Analysis | Analyze customer feedback, identify trends, and suggest improvements to enhance customer satisfaction. | |
Virtual Assistants | Provide instant responses to customer inquiries, guide them through processes, and offer personalized assistance using AI-driven automation tools. |
Explore Existing Agents
Agents can be found in the app store in Microsoft Teams, the Microsoft 365 Copilot app, Microsoft 365 Apps like Word or Excel, or the web and work tabs of Copilot Chat.
Getting Started
Microsoft offers several tools to help you create your own agent, including:
These tools are designed to be user-friendly and flexible, enabling you to create agents tailored to your specific needs without requiring extensive coding knowledge.
Microsoft provides many pre-built agents and agent templates to get you started! Here is a list of some of the agents:
Category | Agent | Description |
Project Management | Project Manager | Automates project management in Planner. |
Customer Support | Website Q&A | Answers common questions from users using your website content. |
IT Helpdesk | Resolves issues and creates/view support tickets. | |
Case Management | Offers automated support and creates cases. | |
Self-Help | Helps customer service agents resolve issues faster. | |
Customer KM Agent | Keeps knowledge articles up to date. | |
Case Management Agent | Automates tasks through the case life cycle. | |
Virtual Assistants | Provide instant responses to customer inquiries, guide them through processes, and offer personalized assistance using AI-driven automation tools. | |
Retail and Store Operations | Store Operations | Provides access to store procedures and policies. |
Travel and Health | Safe Travels | Answers travel questions and health guidelines. |
Wellness Check | Conducts automated wellness checks. | |
Human Resources | Benefits | Shares personalized employee benefits information. |
Awards and Recognition | Streamlines employee recognition processes. | |
Leave Management | Manages leave requests and time-off processes. | |
Employee Self-Service Agent | Answers policy questions and performs HR/IT tasks. | |
Career Coach | Personalized career advice and action plans. | |
Sustainability | Sustainability Insights | Provides insights on sustainability goals. |
Government | Citizen Services | Assists citizens with information about services. |
Finance | Financial Insights | Retrieves information from financial documents. |
Finance Reconciliation Agent | Simplifies the financial period close process. | |
Account Reconciliation Agent | Match and clear transactions. | |
Time and Expense Agent | Manages time entry and expense tracking. | |
Sales and Marketing | Sales Qualification Agent | Focuses on high-priority sales opportunities. |
Sales Order Agent | Automates the order intake process. | |
Supplier Communications Agent | Manages collaboration with suppliers. | |
Customer Intent Agent | Discovers new intents from customer conversations. | |
Scheduling Operations Agent | Provides optimized schedules for technicians. | |
Sales Chat | Accelerates the sales cycle with insights from CRM data, pitch decks, meeting notes, emails, and the web. | |
Sales Agent | Qualifies new leads, contacts customers, sets up meetings, and closes small deals. | |
Sales Research Agent | Offers a natural language interface for querying data and generating real-time dashboards and insights. |
To summarize, Copilot Agents are specialized AI assistants designed to enhance efficiency and productivity by automating repetitive tasks, providing insightful suggestions, and integrating seamlessly with existing tools and data sources. They offer a range of business benefits, including increased efficiency, cost savings, improved accuracy, enhanced customer experience, scalability, and data-driven insights. With versatile use cases across various industries such as healthcare, finance, retail, manufacturing, education, human resources, and customer service, Copilot Agents can significantly enhance operations and drive growth. Microsoft provides many pre-built agents and templates to help organizations get started quickly and tailor agents to their specific needs, making it easier to leverage the power of AI in the digital age.
Ready to transform your business with Copilot Agents? Contact us for more information on Microsoft Copilot Studio and how these AI assistants can improve your workflow and support your organization’s goals.
]]>The global business landscape is complex, and responsible design has emerged as a critical imperative for organizations across sectors. It represents a fundamental shift from viewing design merely as a creative output to recognizing it as an ethical responsibility embedded within institutional structures and processes.
True transformation toward responsible design practices cannot be achieved through superficial initiatives or isolated projects. Rather, it requires deep institutional commitment—reshaping governance frameworks, decision-making processes, and organizational cultures to prioritize human dignity, social equity, and environmental stewardship.
This framework explores how institutions can move beyond performative gestures toward authentic integration of responsible design principles throughout their operations, creating systems that consistently produce outcomes aligned with broader societal values and planetary boundaries.
The Institutional Imperative
What is Responsible Design?
Responsible design is the deliberate creation of products, services, and systems that prioritize human wellbeing, social equity, and environmental sustainability. While individual designers often champion ethical approaches, meaningful and lasting change requires institutional transformation. This framework explores how organizations can systematically embed responsible design principles into their core structures, cultures, and everyday practices.
Why Institutions Matter
The imperative for responsible design within institutions stems from their unique position of influence. Institutions have extensive reach, making their design choices impactful at scale. They establish standards and expectations for design professionals, effectively shaping the future direction of the field. Moreover, integrating responsible design practices yields tangible benefits: enhanced reputation, stronger stakeholder relationships, and significantly reduced ethical and operational risks.
Purpose of This Framework
This article examines the essential components of responsible design, showcases institutions that have successfully implemented ethical design practices, and provides practical strategies for navigating the challenges of organizational transformation. By addressing these dimensions systematically, organizations can transcend isolated ethical initiatives to build environments where responsible design becomes the institutional default—creating cultures where ethical considerations are woven into every decision rather than treated as exceptional concerns.
Defining Responsible Design
Responsible design encompasses four interconnected dimensions: ethical consideration, inclusivity, sustainability, and accountability. These dimensions form a comprehensive framework for evaluating the ethical, social, and environmental implications of design decisions, ultimately ensuring that design practices contribute to a more just and sustainable world.
Interconnected Dimensions
These four dimensions function not as isolated concepts but as integrated facets of a holistic approach to responsible design. Ethical consideration must guide inclusive practices to ensure diverse stakeholder perspectives are genuinely valued and incorporated. Sustainability principles should drive robust accountability measures that minimize environmental harm while maximizing social benefit. By weaving these dimensions together throughout the design process, institutions can cultivate a design culture that authentically champions human wellbeing, social equity, and environmental stewardship in every project.
A Framework for the Future
This framework serves as both compass and blueprint, guiding institutions toward design practices that meaningfully contribute to a more equitable and sustainable future. When organizations fully embrace these dimensions of responsible design, they align their creative outputs with their deepest values, enhance their societal impact, and participate in addressing our most pressing collective challenges. The result is design that not only serves immediate business goals but also advances the greater good across communities and generations.
Ethical Consideration
Understanding Ethical Design
Ethical consideration: A thoughtful evaluation of implications across diverse stakeholders. This process demands a comprehensive assessment of how design decisions might impact various communities, particularly those who are vulnerable or historically overlooked. Responsible designers must look beyond intended outcomes to anticipate potential unintended consequences that could emerge from their work.
Creating Positive Social Impact
Beyond harm prevention, ethical consideration actively pursues opportunities for positive social impact. This might involve designing solutions that address pressing social challenges or leveraging design to foster inclusion and community empowerment. When institutions weave ethical considerations throughout their design process, they position themselves to contribute meaningfully to social equity and justice through their creations.
Implementation Strategies
Organizations can embed ethical consideration into their practices through several concrete approaches: establishing dedicated ethical review panels, conducting thorough stakeholder engagement sessions, and developing robust ethical design frameworks. By placing ethics at the center of design decision-making, institutions ensure their work not only reflects their core values but also advances collective wellbeing across society.
Inclusive Practices
Understanding Inclusive Design
Inclusive practices: Creating designs that meaningfully serve and represent all populations, particularly those historically marginalized. This approach demands that designers actively seek diverse perspectives, challenge their inherent biases, and develop solutions that transcend physical, cognitive, cultural, and socioeconomic barriers. By centering previously excluded voices, inclusive design creates more robust and universally beneficial outcomes.
Empowering Marginalized Communities
True inclusive design transcends mere accommodation—it fundamentally shifts power dynamics by elevating marginalized communities from subjects to co-creators. This transformation might involve establishing paid consulting opportunities for community experts, creating accessible design workshops in underserved neighborhoods, or forming equitable partnerships where decision-making authority is genuinely shared. When institutions embrace these collaborative approaches, they produce designs that authentically address community needs while building lasting relationships based on mutual respect and shared purpose.
Implementation Strategies
Organizations can systematically embed inclusive practices by recruiting design teams that reflect diverse lived experiences, conducting immersive community-based research with appropriate compensation for participants, and establishing measurable inclusive design standards with accountability mechanisms. By integrating these approaches throughout their processes, institutions not only create more accessible and equitable designs but also contribute to dismantling systemic barriers that have historically limited full participation in society.
Sustainability
Definition and Core Principles
Sustainability: Minimizing environmental impact and resource consumption across the entire design lifecycle. This comprehensive approach spans from raw material sourcing through to end-of-life disposal, challenging designers to eliminate waste, preserve natural resources, and significantly reduce pollution. Sustainable design necessitates careful consideration of long-term environmental consequences, including addressing critical challenges like climate change, habitat destruction, and biodiversity loss.
Beyond Harm Reduction
True sustainability transcends mere harm reduction to actively generate positive environmental outcomes. This transformative approach creates products and services that harness renewable energy, conserve vital water resources, or restore damaged ecosystems. When institutions fully embrace sustainability principles, they contribute meaningfully to environmental resilience and help foster regenerative systems that benefit both present and future generations.
Implementation Strategies
Organizations can embed sustainability through strategic, measurable approaches including rigorous lifecycle assessments, integrated eco-design methodologies, and significant investments in renewable energy infrastructure and waste reduction technologies. By elevating sustainability to a core organizational value, institutions can dramatically reduce their ecological footprint while simultaneously driving innovation and contributing to planetary health and wellbeing.
Accountability
Definition and Core Principles
Accountability: Taking ownership of both intended and unintended outcomes of design decisions. This principle demands establishing robust systems for monitoring and evaluating design impacts, along with mechanisms for corrective action when necessary. Accountable designers maintain transparency throughout their process, actively seek stakeholder feedback, and acknowledge responsibility for any negative consequences, even those that were unforeseen. This foundation of responsibility ensures designs serve their intended purpose while minimizing potential harm.
Learning and Growth
True accountability transcends mere acknowledgment of errors—it transforms mistakes into catalysts for improvement. This transformative process involves critically examining design failures, implementing process refinements, enhancing designer training, and establishing more comprehensive ethical frameworks. When institutions embrace accountability as a pathway to excellence rather than just a response to failure, they cultivate stakeholder trust while continuously elevating the quality and integrity of their design practices.
Implementation Strategies
Organizations can foster a culture of accountability by establishing well-defined responsibility chains, implementing comprehensive monitoring systems, and creating accessible channels for feedback and remediation. Effective implementation includes regular ethical audits, transparent reporting practices, and systematic incorporation of lessons learned. By prioritizing accountability at every organizational level, institutions ensure their designs consistently uphold ethical standards, promote inclusivity, and advance sustainability goals.
Patagonia’s Environmental Responsibility
Environmental Integration in Design
Patagonia has revolutionized responsible design by weaving environmental considerations into the fabric of its product development process. The company’s groundbreaking “Worn Wear” program—which actively encourages repair and reuse over replacement—emerged organically from the organization’s core values rather than as a response to market trends. Patagonia’s governance structure reinforces this commitment through rigorous environmental impact assessments at every design stage, ensuring sustainability remains central rather than peripheral to innovation.
Sustainability Initiatives
Patagonia demonstrates unwavering environmental responsibility through comprehensive initiatives that permeate all aspects of their operations. The company has pioneered the use of recycled and organic materials in outdoor apparel, dramatically reduced water consumption through innovative manufacturing processes, and committed to donating 1% of sales to grassroots environmental organizations, a pledge that has generated over $140 million in grants to date. These initiatives represent the concrete manifestation of Patagonia’s mission rather than superficial corporate social responsibility efforts.
Environmental Leadership as a Competitive Advantage
Patagonia’s remarkable business success powerfully illustrates how environmental responsibility can create lasting competitive advantage in the marketplace. By elevating environmental considerations from afterthought to guiding principle, the company has cultivated a fiercely loyal customer base willing to pay premium prices for products aligned with their values. Patagonia’s approach has redefined industry standards for sustainable business practices, serving as a compelling case study for organizations seeking to integrate responsible design into their operational DNA while achieving exceptional business results.
IDEO’s Human-Centered Evolution
Organizational Restructuring
IDEO transformed from a traditional product design firm into a responsible design leader through deliberate organizational change. The company revolutionized its project teams by integrating ethicists and community representatives alongside designers, ensuring diverse perspectives influence every creation. Their acclaimed “Little Book of Design Ethics” now serves as the foundational document guiding all projects, while their established ethics review board rigorously evaluates proposals against comprehensive responsible design criteria before approval.
Ethical Integration in Design Process
IDEO’s evolution exemplifies the critical importance of embedding ethical considerations throughout the design process. By incorporating ethicists and community advocates directly into project teams, the company ensures that marginalized voices are heard, and ethical principles shape all design decisions from conception to implementation. The “Little Book of Design Ethics” functions not simply as a reference manual but as a living framework that empowers designers to navigate complex ethical challenges with confidence and integrity.
Cultural Transformation
IDEO’s remarkable journey demonstrates that responsible design demands a fundamental cultural shift within organizations. The company has cultivated an environment where ethical awareness and accountability are celebrated as core values rather than compliance requirements. By prioritizing human impact alongside business outcomes, IDEO has established itself as the preeminent leader in genuinely human-centered design. Their case offers actionable insights for institutions seeking to implement responsible design practices while maintaining innovation and market leadership.
Addressing Resistance to Change
Institutional transformation inevitably encounters resistance. Change disrupts established routines and challenges comfort zones, often triggering reactions ranging from subtle hesitation to outright opposition. Overcoming this resistance requires thoughtful planning, transparent communication, and meaningful stakeholder engagement throughout the process.
Why People Resist Change
Resistance typically stems from several key factors:
• Fear of the unknown and potential failure
• Perceived threats to job security, status, or expertise
• Skepticism about the benefits compared to required effort
• Attachment to established processes and organizational identity
• Past negative experiences with change initiatives
Effective Strategies for Change Management
• Phased implementation with clearly defined pilot projects that demonstrate value
• Identifying and empowering internal champions across departments to model and advocate for new approaches
• Creating safe spaces for constructive critique of existing practices without blame
• Developing narratives that connect responsible design to institutional identity and core values
Keys to Successful Transformation
By implementing these strategies, institutions can cultivate an environment that embraces rather than resists change. Transparent communication creates trust, active stakeholder engagement fosters ownership, and focusing on shared values helps align diverse perspectives. When people understand both the rationale for change and their role in the transformation process, resistance diminishes and the foundation for responsible design practices strengthens.
Balancing Competing Priorities
The complex tension between profit motives and ethical considerations demands sophisticated strategic approaches. Modern institutions navigate a challenging landscape of competing demands: maximizing shareholder value, meeting evolving customer needs, and fulfilling expanding social and environmental responsibilities. Successfully balancing these interconnected priorities requires thoughtful deliberation and strategic decision-making that acknowledges their interdependence.
Tensions in Modern Organizations
These inherent tensions can be effectively managed through:
• Developing comprehensive metrics that capture long-term value creation beyond quarterly financial results, including social impact assessments and sustainability indicators
• Identifying and prioritizing “win-win” opportunities where responsible design enhances market position, builds brand loyalty, and creates competitive advantages
Strategic Decision Frameworks
• Creating robust decision frameworks that explicitly weigh ethical considerations alongside financial metrics, allowing for transparent evaluation of tradeoffs
• Building compelling business cases that demonstrate how responsible design significantly reduces long-term risks related to regulation, reputation, and resource scarcity
Long-term Value Integration
By thoughtfully integrating ethical considerations into core decision-making processes and developing nuanced metrics that capture multidimensional long-term value creation, institutions can successfully reconcile profit motives with responsible design principles. This strategic approach enables organizations to achieve sustainable financial success while meaningfully contributing to a more just, equitable, and environmentally sustainable world.
Beyond Token Inclusion
Meaningful participation requires addressing deep-rooted power imbalances in institutional structures. Too often, inclusion is reduced to superficial gestures—inviting representatives from marginalized communities to consultations while denying them genuine influence over outcomes and decisions that affect their lives.
The Challenge of Meaningful Participation
To achieve authentic participation, institutions must confront and transform these entrenched power dynamics. This means moving beyond symbolic representation to creating spaces where traditionally excluded voices carry substantial weight in shaping both processes and outcomes.
Key Requirements for True Inclusion:
• Redistributing decision-making authority through participatory governance structures that give community members voting rights on critical decisions
• Providing fair financial compensation for community members’ time, expertise, and design contributions—recognizing their input as valuable professional consultation
• Implementing responsive feedback mechanisms with sufficient authority to pause, redirect, or fundamentally reshape projects when community concerns arise
• Establishing community oversight boards with substantive veto power and resources to monitor implementation
Building Equity Through Empowerment
By fundamentally redistributing decision-making authority and genuinely empowering marginalized communities, institutions can transform design processes from extractive exercises to collaborative partnerships. This shift ensures that design benefits flow equitably to all community members, not just those with pre-existing privilege. Such transformation demands more than good intentions—it requires concrete commitments to equity, justice, and collective accountability.
The Microsoft Inclusive Design Transformation
Restructuring Design Hierarchy
Microsoft fundamentally transformed its design process by establishing direct reporting channels between accessibility teams and executive leadership. This strategic restructuring ensured inclusive design considerations could not be sidelined or overridden by product managers focused solely on deadlines or feature development. Additionally, they created a protected budget specifically for community engagement that was safeguarded from reallocation to other priorities—even during tight financial cycles.
Elevating Accessibility Teams
This structural change demonstrates a commitment to inclusive design that transcends corporate rhetoric. By elevating accessibility specialists to positions with genuine organizational influence and providing them with unfiltered access to executive leadership, Microsoft ensures that inclusive design principles are embedded in strategic decisions at the highest levels of the organization. This repositioning signals to the entire company that accessibility is a core business value, not an optional consideration.
Dedicated Community Engagement
The protected budget for community engagement reinforces this commitment through tangible resource allocation. By dedicating specific funding for meaningful partnerships with marginalized communities, Microsoft ensures diverse voices directly influence product development from conception through launch. This approach has yielded measurable improvements in product accessibility and market reach, demonstrating how institutional transformation of design processes can simultaneously advance inclusion, equity, and business outcomes.
Regulatory Alignment
Anticipating Regulatory Changes
Visionary institutions position themselves ahead of regulatory evolution rather than merely reacting to it. As global regulations on environmental sustainability, accessibility, and data privacy grow increasingly stringent, organizations that proactively integrate these considerations into their design processes create significant competitive advantages while minimizing disruption.
Case Study: Proactive Compliance
Consider this example:
• European medical device leader Ottobock established a specialized regulatory forecasting team that maps emerging accessibility requirements across global markets
• Their “compliance plus” philosophy ensures designs exceed current standards by 20-30%, virtually eliminating costly redesigns when regulations tighten
Benefits of Forward-Thinking Regulation Strategy
Proactive regulatory alignment transforms compliance from a burden into a strategic asset. Organizations that embrace this approach not only mitigate financial and reputational risks but also establish themselves as industry leaders in responsible design. This strategic positioning requires continuous environmental scanning and a genuine commitment to ethical design principles that transcend minimum requirements.
Market Differentiation
Rising Consumer Expectations
The evolving landscape of consumer expectations presents strategic opportunities to harmonize responsible design with market advantage. Today’s consumers are not merely preferring but actively demanding products and services that demonstrate ethical production standards, environmental sustainability practices, and social responsibility commitments. Organizations that authentically meet these heightened expectations can secure significant competitive advantages and cultivate deeply loyal customer relationships.
Real-World Success Stories
Consider these compelling examples:
• Herman Miller revolutionized the furniture industry through circular design principles, exemplified by their groundbreaking Aeron chair remanufacturing program
• This innovative initiative established a premium market position while substantially reducing material consumption and environmental impact
Creating Win-Win Outcomes
When organizations strategically align responsible design principles with market opportunities, they forge powerful win-win scenarios that simultaneously benefit business objectives and societal wellbeing. Success in this approach demands both nuanced understanding of evolving consumer expectations and unwavering commitment to developing innovative solutions that address these expectations while advancing sustainability goals.
Beyond Good Intentions
Concrete measurement systems are essential for true accountability. While noble intentions set the direction, only robust metrics can verify real progress in responsible design. Organizations must implement comprehensive measurement frameworks to track outcomes, identify improvement opportunities, and demonstrate genuine commitment.
Effective Measurement Systems
Leading examples include:
• IBM’s Responsible Design Dashboard, which provides quantifiable metrics across diverse product lines
• Google’s HEART framework (Happiness, Engagement, Adoption, Retention, Task success) that seamlessly integrates ethical dimensions into standard performance indicators
• Transparent annual responsible design audits with publicly accessible results that foster organizational accountability
Benefits of Implementation
By embracing data-driven measurement systems, organizations transform aspirational goals into verifiable outcomes. This approach demonstrates an authentic commitment to responsible design principles while creating a foundation for continuous improvement. The willingness to measure and transparently share both successes and challenges distinguishes truly responsible organizations from those with merely good intentions.
Incentive Restructuring
The Power of Aligned Incentives
Human behavior is fundamentally shaped by incentives. To foster responsible design practices, institutions must strategically align rewards systems with desired ethical outcomes. When designers and stakeholders are recognized and compensated for responsible design initiatives, they naturally prioritize these values in their work.
Implementation Strategies
Organizations are achieving this alignment through concrete approaches:
• Salesforce has integrated diversity and inclusion metrics directly into executive compensation packages, ensuring leadership accountability
• Leading firms like Frog Design have embedded responsible design outcomes as key criteria in employee performance reviews
• Structured recognition programs celebrate and amplify exemplary responsible design practices, increasing visibility and adoption
Creating a Culture of Responsible Design
Thoughtfully restructured incentives transform organizational culture by signaling what truly matters. When ethical, inclusive, and sustainable practices are rewarded, they become embedded in institutional values rather than treated as optional considerations. This transformation requires rigorous assessment of current incentive frameworks and bold leadership willing to realign reward systems with responsible design principles.
Institutional Culture and Learning Systems
Responsible design flourishes within robust learning ecosystems. Rather than a one-time achievement, responsible design represents an ongoing journey of discovery, adaptation, and refinement. Organizations must establish comprehensive learning infrastructures that nurture this evolutionary process and ensure design practices remain ethically sound, inclusive, and forward-thinking.
Key Components of Learning Infrastructure
An effective learning infrastructure incorporates:
• Rigorous post-implementation reviews that critically assess ethical outcomes and user impact
• Vibrant communities of practice that facilitate knowledge exchange and cross-pollination across departments
• Strategic partnerships with academic institutions to integrate cutting-edge ethical frameworks and research
• Diverse external advisory boards that provide constructive critique and alternative perspectives
Benefits of Learning Systems
By investing in robust learning infrastructure, organizations cultivate a culture of continuous improvement and adaptive excellence. These systems ensure responsible design practices evolve in response to emerging challenges, technological shifts, and evolving societal expectations. Success requires unwavering institutional commitment to evidence-based learning, collaborative problem-solving, and transparent communication across all levels of the organization.
The Philips Healthcare Example
The Responsibility Lab Initiative
Philips Healthcare established a groundbreaking “Responsibility Lab” where designers regularly rotate through immersive experiences with diverse users from various backgrounds and abilities. This innovative rotation system ensures that responsible design knowledge becomes deeply embedded across the organization rather than remaining isolated within a specialized team.
Benefits of Experiential Learning
This approach powerfully demonstrates how experiential learning catalyzes responsible design practices. By immersing designers directly in the lived experiences of diverse users, Philips enables them to develop profound insights into the ethical, social, and environmental implications of their design decisions—insights that could not be gained through traditional research methods alone.
Organizational Knowledge Distribution
The strategic rotation system ensures that valuable ethical design principles flow throughout the organization, transforming responsible design from a specialized function into a shared organizational capability. This case study exemplifies how institutions can build effective learning systems that not only foster a culture of responsible design but also make it an integral part of their operational DNA.
The Institutional Journey
A Continuous Transformation
Institutionalizing responsible design is not a destination but a dynamic journey of continuous evolution. It demands skillful navigation through competing priorities, entrenched power dynamics, and ever-shifting external pressures. Forward-thinking institutions recognize that responsible design is not merely adjacent to their core mission—it is fundamental to their long-term viability, relevance, and social license to operate in an increasingly conscientious marketplace.
Beyond Sporadic Initiatives
By addressing these dimensions systematically and holistically, organizations transcend fragmentary ethical initiatives to achieve truly institutionalized responsible design. This transformation creates environments where ethical considerations and responsible practices become the natural default—woven into the organizational DNA—rather than exceptional efforts requiring special attention or resources.
Embrace the Journey of Continuous Growth
Immerse yourself in a transformative journey that thrives on continuous learning, adaptive thinking, and cross-disciplinary collaboration. This mindset unlocks the potential for design practices that fuel a more just, equitable, and sustainable world. By embracing this profound shift, institutions can drive real change.
Achieving this radical transformation requires visionary leadership, ethical conduct, and an innovative culture. It demands the united courage to challenge outdated norms and champion a brighter future. When institutions embody this ethos, they become beacons of progress, inspiring others to follow suit.
The path forward is not without obstacles, but the rewards are immense. Institutions that lead with this mindset will not only transform their own practices but also catalyze systemic change across industries. They will set new standards, reshape markets, and pave the way for a more responsible, inclusive, and sustain.
Effective communication is key to engaging the audience in today’s fast-paced digital world. Whether sending newsletters, promotional offers, or internal updates, how we present the information can significantly impact the recipient’s engagement levels. One power tool that can help create interactive mail is Power Automate. This blog will explore how to leverage Power Automation to create emails with embedded images and links, enhancing communication strategy. I’ll walk you through two examples: one where we simply embed an image and another where we embed an image that links to a specific URL.
Interactive emails are more engaging than traditional static emails. They include elements like embedded images and links.
Imagine yourself as the marketing manager of a company that keeps employees informed about company changes, training sessions, and new projects. By enabling employees to click on images that direct them to further resources or surveys, you may engage them in addition to providing information in your email. Here’s how to use Power Automate to accomplish this.
Let’s move on to the second example, where we’ll embed an image that links to a specific URL.
We’ve successfully learned how to embed images in your emails using Power Automate, both as standalone images and as clickable links and you can significantly enhance your communication efforts within your organization. This approach makes your emails more visually appealing and encourages employee engagement through interactive elements.
]]>
AI is no longer a futuristic concept—it’s here, transforming the way we work in real time. Organizations worldwide making AI a strategic priority, harnessing its power to enhance efficiency, accelerate decision-making, and drive growth. In fact, generative AI adoption has skyrocketed from 55% in 2023 to 75% in 2024, contributing to an estimated global economic impact of $19.9 trillion. To stay ahead, businesses must align AI investments across applications, platforms, data, and infrastructure to maximize value and maintain a competitive edge.
Watch our latest video to see Microsoft Copilot in action and how AI is reshaping workflows across every role.
“In the evolving landscape of AI, the future hinges on our ability to not just experiment, but to strategically pivot—transforming experimentation into sustainable innovation,” said Rick Villars, group vice president, Worldwide Research at IDC. “As we embrace AI, we need to prioritize relevance, urgency, and resourcefulness to forge resilient enterprises that thrive in a data-driven world.”
Success with AI isn’t just about adopting new technology—it requires a clear vision, a strong strategy, and the right expertise to turn possibilities into real-world impact. As a Microsoft partner, Perficient is at the forefront of AI transformation, helping businesses navigate this evolving landscape. Our upcoming Microsoft Copilot video showcases exactly how AI is reshaping everyday workflows, with real-world examples of how different roles—from executives to developers—are leveraging Copilot to work smarter and more efficiently. The world is changing, and AI is advancing at an unprecedented pace. Now is the time to lead, innovate, and unlock the full potential of AI in your organization.
Microsoft Copilot is an AI-powered assistant designed to enhance productivity across Microsoft applications and services. It leverages advanced language models and integrates seamlessly with Microsoft 365, Dynamics 365, and GitHub to provide real-time assistance, automate tasks, and offer intelligent suggestions.
Key Features:
Microsoft Copilot uniquely integrates web intelligence, organizational data, and user context to provide powerful assistance. It enhances workflows across roles—from sales teams managing customer interactions, to HR professionals optimizing employee support, to developers accelerating coding projects. With privacy and security at the forefront, Copilot empowers every end user to work smarter and achieve more.
Organizations are leveraging Copilot to streamline operations, enhance productivity, and drive business success. Here are the top use cases where our clients and prospects see the most value:
Each of these use cases is explored in depth in our Microsoft Copilot video, where we demonstrate real-world applications of AI across various industries and roles.
The next phase of AI transformation will continue to reshape industries. As Microsoft’s Chairman and CEO Satya Nadella explains, “2025 will be about model-forward applications that reshape all application categories. More so than any previous platform shift, every layer of the application stack will be impacted. It’s akin to GUI, internet servers, and cloud-native databases all being introduced into the app stack simultaneously. Thirty years of change is being compressed into three years!”
Key advancements to watch:
Perficient and Microsoft can help your organization confidently scale AI solutions, no matter where you are on your AI journey. Our Microsoft AI solutions are designed to unlock new levels of productivity, drive innovation, fuel growth, and ensure secure AI integration across all business functions. Let’s shape the future together. Read more about our Copilot and AI capabilities here.
]]>Visual Studio Code (VS Code) has become a ubiquitous tool in the software development world, prized for its speed, versatility, and extensive customization options. At its heart, VS Code is a lightweight, open-source code editor that supports a vast ecosystem of extensions. These extensions are the key to unlocking the true potential of VS Code, transforming it from a simple editor into a powerful, tailored IDE (Integrated Development Environment).
This blog post will explore the world of VS Code extensions, focusing on how they can enhance your development team’s productivity, code quality, and overall efficiency. We’ll cover everything from selecting the right extensions to managing them effectively and even creating your own custom extensions to meet specific needs.
Extensions are essentially plugins that add new features and capabilities to VS Code. They can range from simple syntax highlighting and code completion tools to more complex features like debuggers, linters, and integration with external services. The Visual Studio Code Marketplace hosts thousands of extensions, catering to virtually every programming language, framework, and development workflow imaginable.
Popular examples include Prettier for automatic code formatting, ESLint for identifying and fixing code errors, and Live Share for real-time collaborative coding.
The benefits of using VS Code extensions are numerous and can significantly impact your development team’s performance.
As software development teams grow and projects become more complex, managing IDE tools effectively becomes crucial. A well-managed IDE environment can significantly impact a team’s ability to deliver high-quality software on time and within budget.
Effectively managing VS Code extensions within a team requires a strategic approach. Here are some best practices to consider:
While VS Code extensions offer numerous benefits, they can also introduce security risks if not managed properly. It’s crucial to be aware of these risks and take steps to mitigate them.
In some cases, existing extensions may not fully meet your team’s specific needs. Creating custom VS Code extensions can be a powerful way to add proprietary capabilities to your IDE and tailor it to your unique workflow. One exciting area is integrating AI Chatbots directly into VS Code for code generation, documentation, and more.
Identify the Need: Start by identifying the specific functionality that your team requires. This could be anything from custom code snippets and templates to integrations with internal tools and services. For this example, we’ll create an extension that allows you to highlight code, right-click, and generate documentation using a custom prompt sent to an AI Chatbot.
Learn the Basics: Familiarize yourself with the Visual Studio Code Extension API and the tools required to develop extensions. The API documentation provides comprehensive guides and examples to help you get started.
Set Up Your Development Environment: Install the necessary tools, such as Node.js and Yeoman, to create and test your extensions. The Yeoman generator for Visual Studio Code extensions can help you quickly scaffold a new project.
Develop Your Extension: Write the code for your extension, leveraging the Visual Studio Code Extension API to add the desired functionality. Be sure to follow best practices for coding and testing to ensure that your extension is reliable, maintainable, and secure.
Test Thoroughly: Test your extension in various scenarios to ensure that it works as expected and doesn’t introduce any new issues. This includes testing with different configurations, environments, and user roles.
Distribute Your Extension: Once your extension is ready, you can distribute it to your team. You can either publish it to the Visual Studio Code Marketplace or share it privately within your organization. Consider using a private extension registry to manage and distribute your custom extensions securely.
Developing robust and efficient VS Code extensions requires careful attention to best practices. Here are some key considerations:
Resource Management:
context.subscriptions.push()
method to register disposables, which will be automatically disposed of when the extension is deactivated.deactivate()
function to clean up any resources that need to be explicitly released when the extension is deactivated.Asynchronous Operations:
async/await
to handle asynchronous operations in a clean and readable way. This makes your code easier to understand and maintain.try/catch
blocks. Log errors and provide informative messages to the user.vscode.window.withProgress
to provide feedback to the user during long operations.Security:
Performance:
Code Quality:
User Experience:
By following these best practices, you can develop robust, efficient, and user-friendly VS Code extensions that enhance the development experience for yourself and others.
Let’s walk through creating a custom VS Code extension that integrates with an AI Chatbot to generate documentation for selected code. This example assumes you have access to an AI Chatbot API (like OpenAI’s GPT models). You’ll need an API key. Remember to handle your API key securely and do not commit it to your repository.
1. Scaffold the Extension:
First, use the Yeoman generator to create a new extension project:
yo code
2. Modify the Extension Code:
Open the generated src/extension.ts
file and add the following code to create a command that sends selected code to the AI Chatbot and displays the generated documentation:
import * as vscode from 'vscode'; import axios from 'axios'; export function activate(context: vscode.ExtensionContext) { let disposable = vscode.commands.registerCommand('extension.generateDocs', async () => { const editor = vscode.window.activeTextEditor; if (editor) { const selection = editor.selection; const selectedText = editor.document.getText(selection); const apiKey = 'YOUR_API_KEY'; // Replace with your actual API key const apiUrl = 'https://api.openai.com/v1/engines/davinci-codex/completions'; try { const response = await axios.post( apiUrl, { prompt: `Generate documentation for the following code:\n\n${selectedText}`, max_tokens: 150, n: 1, stop: null, temperature: 0.5, }, { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${apiKey}`, }, } ); const generatedDocs = response.data.choices[0].text; vscode.window.showInformationMessage('Generated Documentation:\n' + generatedDocs); } catch (error) { vscode.window.showErrorMessage('Error generating documentation: ' + error.message); } } }); context.subscriptions.push(disposable); } export function deactivate() {}
3. Update package.json
:
Add the following command configuration to the contributes
section of your package.json
file:
"contributes": { "commands": [ { "command": "extension.generateDocs", "title": "Generate Documentation" } ] }
4. Run and Test the Extension:
Press F5
to open a new VS Code window with your extension loaded. Highlight some code, right-click, and select “Generate Documentation” to see the AI-generated documentation.
Once you’ve developed and tested your custom VS Code extension, you’ll likely want to share it with your team or the wider community. Here’s how to package and distribute your extension, including options for local and private distribution:
1. Package the Extension:
VS Code uses the vsce
(Visual Studio Code Extensions) tool to package extensions. If you don’t have it installed globally, install it using npm:
npm install -g vsce
Navigate to your extension’s root directory and run the following command to package your extension:
vsce package
This will create a .vsix
file, which is the packaged extension.
2. Publish to the Visual Studio Code Marketplace:
To publish your extension to the Visual Studio Code Marketplace, you’ll need to create a publisher account and obtain a Personal Access Token (PAT). Follow the instructions on the Visual Studio Code Marketplace to set up your publisher account and generate a PAT.
Once you have your PAT, run the following command to publish your extension:
vsce publish
You’ll be prompted to enter your publisher name and PAT. After successful authentication, your extension will be published to the marketplace.
3. Share Privately:
If you prefer to share your extension privately within your organization, you can distribute the .vsix
file directly to your team members. They can install the extension by running the following command in VS Code:
code --install-extension your-extension.vsix
Alternatively, you can set up a private extension registry using tools like Azure DevOps Artifacts or npm Enterprise to manage and distribute your custom extensions securely.
Visual Studio Code extensions are a powerful tool for enhancing the capabilities of your development environment and improving your team’s productivity, code quality, and overall efficiency. By carefully selecting, managing, and securing your extensions, you can create a tailored IDE that meets your specific needs and helps your team deliver high-quality software on time and within budget. Whether you’re using existing extensions from the marketplace or creating your own custom solutions, the possibilities are endless. Embrace the power of VS Code extensions and unlock the full potential of your development team.
As businesses expand their global footprint, the need for a flexible, scalable, and secure networking solution becomes paramount. Enter Azure Virtual WAN (VWAN), a cloud-based offering designed to simplify and centralize network management while ensuring top-notch performance. Let’s dive into what Azure VWAN offers and how to set it up effectively.
Azure Virtual WAN, or VWAN, is a cloud-based network solution that connects secure, seamless, and optimized connectivity across hybrid and multi-cloud environments.
It provides:
This diagram depicts a high-level architecture of Azure Virtual WAN and its connectivity components.
Follow these steps to configure Azure VWAN:
Azure Monitor tracks performance, availability, and network health in real time and provides insights into traffic patterns, latency, and resource usage.
Diagnose network issues with tools like packet capture and connection troubleshooting. Quickly identify and resolve any bottlenecks or disruptions.
Set up alerts for critical issues such as connectivity drops or security breaches. Use detailed logs to analyze network events and maintain robust auditing.
Azure VWAN is a powerful tool for businesses looking to unify and optimize their global networking strategy. Organizations can ensure secure, scalable, and efficient connectivity by leveraging features like ExpressRoute, VNet Peering, and VPN Gateways. With the correct setup and monitoring tools, managing complex networks becomes a seamless experience.
]]>In this blog, we’ll explore Power Apps, the concept of components, and how they enhance app efficiency and scalability.
Microsoft Power Apps is a low-code/no-code platform that allows users and businesses to create custom applications with minimal coding. It enables app development for web browsers, mobile devices, and tablets. It seamlessly integrates with Microsoft services like SharePoint, Office 365, Teams, and third-party data sources such as Salesforce and SQL databases.
Now that we have a brief introduction to Power Apps,, let’s explore its key aspect: Components. These powerful building blocks can take your Power Apps development to the next level!
Power Apps components are reusable elements that help create consistent, efficient app designs. They encapsulate functionality, styling, and logic into a single unit, making them easy to use across multiple screens and apps.
1) Reusability: Reduce duplication and maintain consistency across different apps.
2) Efficiency: Speed up development by streamlining app creation and updates.
3) Maintainability: Simplify updates with centralized component management.
4) Customization: Tailor components to specific business needs while ensuring uniformity.
5) Collaboration: Enable multiple developers to work on different components simultaneously.
Now that we understand the components of Power Apps, let’s build one from scratch. In this blog, we will create a Menu component, not just any regular menu bar. This menu bar is easy to customize, allows adding new items using collections, and leverages the custom properties of components (which will be explained later in the blog).
For this component, we will use Collections—like data arrays—along with the component’s custom properties to seamlessly pass data from the screen to the element. This allows users to easily add new menu items by simply updating the collection, and the changes will automatically be reflected in the component. Users only need to adjust the height and width as required.
Before we get into the actual logic of the component, let’s add the Menu component and the data for the menu items.
Below is a preview of how the collection should be initialized in the app’s OnStart property. This serves as a demo of the expected data structure, but you can customize it with any menu items based on your needs.
In this collection shown above, we have:
To add the component, navigate to the component tab in the Power Apps tree view. You should have an option called new component; click it, and a new component will be created.
Once clicked, you will see the screen below with your newly created component.
The above image shows that it looks similar to the screen tab, with a properties pane, a tree view, and the ability to add controls to the component just like you would on a screen. The only difference is that you cannot test the component directly; you need to add it to a screen to test it.
If you notice in the properties tab, there is a section called Custom Properties at the bottom. These properties are game changers for components as they function as input and output variables—input allows data to flow from the screen to the component, and output allows data to pass from the component back to the screen.
In this case, we only need Input properties since we do not need to pass any data back to the screen; we just need the menu items to be displayed.
When creating a custom property, you will see a new tab where you can add a name, choose the property type (Input or Output), and select the data type (such as Number, Date, Table, Boolean, and so on…).
The picture (above) shows the properties you can add when creating a custom property. You also have the option to Raise the OnReset when the property’s value changes.
So, we would be creating two input properties:
This is the basic setup you need before starting to create the component.
First, let’s add the menu icon that will be used to expand and collapse the menu control when it is clicked and also the gallery where we will be displaying the menu items:
In this case, I am using a Hamburger icon as my menu icon, but you can choose any icon. The icon and gallery should look like the image below once you’ve added the icon and gallery.
In this case, I have adjusted the width and height of my component to fit my needs (Width: 165, Height: 640), but you can set them to whatever works best for you.
To display the menu items, we will add the following controls within the gallery:
The component should now look like this:
You can see that the component is starting to take shape. Now that we have added the required controls let’s build the logic that brings the component to life.
First, let’s set up the custom property of the Menu Items. Navigate to the Components property tab (highlighted in red in the image), select the MenuCollection custom property, and check what it displays.
If you look at the table above, it isn’t in the same format as the data we defined earlier, so let’s fix that. Update the property names and their corresponding values to match the correct format. These are just base values to help the component understand what to expect. The final table should look something like this:
Let’s set up a variable that will control the gallery’s visibility. On the Hamburger icon’s OnSelect property, create a variable called MenuClicked and set it as shown below:
Add this variable to the Gallery’s Visible property. This will allow the gallery to toggle open and close when you click the Hamburger icon (as shown in the demo below):
If you notice, when the gallery closes, the white component space remains visible. To fix this, we can use another Component Property to dynamically adjust the width and height of the component. This ensures it doesn’t interfere with other controls on the screen.
Before proceeding to the next part, enable the Access App scope (shown below). This setting is essential because it allows you to use the variables created on the component side within the component itself. This setting is in the principal component’s property tab on the right.
Just like we did for the MenuCollection property, go to the component’s property dropdown and set the value of the ComponentSize property to the Boolean variable (MenuClicked) we created, as shown below:
Now, we can use this property to adjust the width and height of the component when it is clicked.
Width
Height
This means that when you click the menu to open it, the component size will change, and the same will happen when you close the menu.
Now, all that’s left is to add the MenuCollection property to the gallery as the items and map the values to the gallery controls.
Gallery Items
Label Text
Icon value
I have added an extra button that sits on top of all the controls in the gallery, I have done this so that I can get a pointer when I hover over the menu item, as well as also added the navigate function to that button to navigate to the particular screen.
Make sure the overlapping button colors are transparent so that it does not show up when you hover over them.
Overlapping Button OnSelect logic
The component is ready! You might wonder where all the menu items we declared before are. We still need to add that part, but it comes from the screen level. For now, we’re done with the component level.
To insert the component into the screen, you should see a new dropdown in the Insert tab called Custom. This will contain all the elements you’ve created. Once you find the component you made, simply drag and drop it into place, just like you would with a regular control.
Once that’s done, you’ll see the component on the screen. You might still wonder why the menu items you created aren’t showing up. Remember the MenuCollection custom property we made as an input property. The collection we set up in the app’s OnStart property will be passed to this input property. This will, in turn, send the data to the component side, displaying the created menu items.
App OnStart
The red highlight is the menu collection we created
MenuCollection (Custom component property)
Just follow the previous steps to add the menu component to other screens so you can navigate back and forth, and you’ll be all set!
Another helpful feature of Power Apps is the ability to export and import components across different apps, eliminating the need to recreate them from scratch. Let’s explore how to export and use this menu component in a new app.
1. Go back to the Components screen. Next to the ‘Add New Component’ option, you’ll see two buttons. The one highlighted in the red box is the export button, while the other is the import button. Click the export button.
After clicking the button, a popup will appear, confirming that the file is ready for download. Simply click the download button to save the components as a .msapp package, which can be used in another application.
2. Once the file is downloaded, open the new application where you want to add your component. Then, navigate to the components screen and click the Import
After clicking the Import button, a new tab will appear, allowing you to either upload a file or select a component from other Power Apps applications. In our case, we will upload the file downloaded in the previous step.
As shown in the video above, once you upload the file, the components and their settings are automatically added to the new application. The only limitation is that all elements from the original app will be imported, so you may need to delete any that are not required.
Having explored how components function in Power Apps and created one, let’s now go over the pros and cons:
In this guide, we explored Power Apps’ components and how they can be used to create reusable building blocks for your app. We then walked through creating a simple, customizable menu component that can be used across multiple screens in your app. This approach helps maintain consistency in design, saves time, and makes updates easier. By using this menu component, you can ensure a smooth and uniform user experience throughout your app while keeping the development process efficient and flexible.
]]>Modern business workflows often require flexible and efficient ways to export, transform, and share data. By combining the capabilities of Power Apps, Power Automate, and Office Scripts, you can create a seamless process to dynamically customize and update Excel files with minimal effort.
This guide demonstrates how to dynamically export data from Power Apps, process it with Power Automate, format it in Excel using Office Scripts, and send the updated file via email. Let’s dive into the details.
This blog demonstrates a practical solution for automating data exports and dynamic reporting in Excel, tailored to users who expect dynamic column selection for report headers. Manual data preparation and formatting can be time-consuming and error-prone in many projects, especially those involving custom reporting.
With the process outlined in this blog, you can:
This solution integrates Power Apps, Power Automate, and Office Scripts to ensure that your reporting process is faster, error-free, and adaptable to changing requirements, saving you significant time and effort.
A collection in Power Apps serves as a temporary data storage container that holds the records you want to process. Here’s how to set it up:
Set(HeaderName, ["Name", "Age", "Country"])
This Variable specifies the column headers appearing in the exported Excel file.
Once the ExportData collection and HeaderName are set up, pass them as inputs to the Power Automate flow.
CustomizingDataExports.Run(JSON(ExportData), JSON(HeaderName))
Power Automate bridges Power Apps and Excel, enabling seamless data processing, transformation, and sharing. Follow these steps to configure your flow:
Add two Compose actions to process inputs.
For ExportData:
json(triggerBody()?['text'])
For HeaderName:
json(triggerBody()?['text_1'])
Add a Parse JSON action to structure the HeaderName input:
Content:
outputs('Compose_-_HeaderName')
Schema:
{ "type": "array", "items": { "type": "object", "properties": { "Value": { "type": "string" } }, "required": [ "Value" ] } }
Use a Select action to extract the values:
From:
body('Parse_JSON')
Map:
item()['Value']
Add a Get file content action to fetch a pre-defined Excel template from storage (e.g., SharePoint or OneDrive).
Use a Create file action to save the template as a new file:
Dynamic File Name:
guid().xlsx
Convert the ExportData to a CSV format:
From:
outputs('Compose_-_ExportData')
Office Scripts are used to dynamically process and format data in Excel. Here’s how you implement it:
Open Excel and navigate to the “Automate” tab.
Create a new Office Script and paste the following code:
function main(workbook: ExcelScript.Workbook, headersArray: string[], csvData: string) { let activeWorksheet = workbook.getWorksheet("Sheet1"); let csvRows = csvData.split('\n'); csvRows = csvRows.map(row => row.replace(/\r$/, '')); let headerRow = csvRows[0].split(','); // Create a mapping of column headers to their indices let columnIndexMap: { [key: string]: number } = {}; for (let i = 0; i < headerRow.length; i++) { let header = headerRow[i]; if (headersArray.includes(header)) { columnIndexMap[header] = i; } } // Create new Excel table with headers below the logo let range = activeWorksheet.getRangeByIndexes(0, 0, 1, headersArray.length); range.setValues([headersArray]); // Batch size for inserting data into Excel const batchSize = 500; let batchData: string[][] = []; let columncount = 0; // Loop through CSV data and filter/select desired columns for (let j = 1; j < csvRows.length; j++) { let rowData = parseCSVRow(csvRows[j]); let filteredRowData: string[] = []; for (let k = 0; k < headersArray.length; k++) { let header = headersArray[k]; let columnIndex = columnIndexMap[header]; filteredRowData.push(rowData[columnIndex]); } batchData.push(filteredRowData); // Insert data into Excel in batches if (batchData.length === batchSize || j === csvRows.length - 1) { let startRowIndex = j - batchData.length + 1; // Start after the logo and headers let startColIndex = 0; let newRowRange = activeWorksheet.getRangeByIndexes(startRowIndex, startColIndex, batchData.length, batchData[0].length); newRowRange.setValues(batchData); batchData = []; } columncount=j; } workbook.addTable(activeWorksheet.getRangeByIndexes(0, 0, columncount, headersArray.length), true).setPredefinedTableStyle("TableStyleLight8"); activeWorksheet.getRangeByIndexes(0, 0, columncount, headersArray.length).getFormat().autofitColumns(); // Release the lock on the workbook activeWorksheet.exitActiveNamedSheetView(); } // Custom CSV parsing function to handle commas within double quotes function parseCSVRow(row: string): string[] { let columns: string[] = []; let currentColumn = ''; let withinQuotes = false; for (let i = 0; i < row.length; i++) { let char = row[i]; if (char === '"') { withinQuotes = !withinQuotes; } else if (char === ',' && !withinQuotes) { columns.push(currentColumn); currentColumn = ''; } else { currentColumn += char; } } columns.push(currentColumn); // Add the last column return columns; }
Use the Run script action in Power Automate to execute the Office Script.
Pass the header array and CSV data as parameters.
Once the Excel file is updated with Office Scripts, you can send it to recipients via Outlook email.
Use the file path or identifier from the Create file action.
outputs('Create_file')?['body/Id']
outputs('Create_file')?['body/Name']
body('Get_file_content_-_Created_File')
Result:
Excel
This approach is tailored for scenarios where users require a dynamic selection of column headers for custom reporting. Instead of spending hours manually formatting data and preparing reports, this solution automates the process end-to-end, ensuring:
This workflow minimizes errors, accelerates the reporting process, and enhances overall project efficiency by automating repetitive tasks.
You can create robust, dynamic workflows for exporting and transforming data by combining Power Apps, Power Automate, and Office Scripts. This approach saves time, reduces manual effort, and ensures process consistency. Adding email functionality ensures the updated file reaches stakeholders without manual intervention. Whether you’re managing simple data exports or complex transformations, this solution provides a scalable and efficient way to handle Excel data.
]]>Visual Basic for Applications (VBA) projects are integral to Microsoft Office automation. From automating repetitive tasks in Excel to creating powerful macros for Word or Excel, VBA can significantly enhance productivity. However, protecting and securing your VBA projects is essential to safeguard your intellectual property, maintain data integrity, and prevent unauthorized access.
This blog will explore effective methods to protect your VBA projects from potential threats while ensuring compliance with best practices.
Microsoft Office allows you to lock VBA projects with a password. Here’s how:
Refer to the below screenshot:
“Protection” tab in VBA project properties.
Code obfuscation maintains the functionality of your VBA code while making it challenging to read or comprehend. Although VBA doesn’t have built-in obfuscation tools, third-party tools like VBA Compiler for Excel or Smart Indenter can help achieve this.
Adjusting the macro security settings allows you to limit who can run macros:
Sample Code: Enforcing macro security programmatically:
Enhancing macro security programmatically ensures that only authorized macros run in your environment. The code below checks macro security settings and prompts users to adjust if insecure settings are detected.
Sub CheckMacroSecurity() If Application.AutomationSecurity <> msoAutomationSecurityForceDisable Then MsgBox "Macros are not secure. Adjust your settings.", vbCritical End If End Sub
Digitally signing your VBA projects protects your code and assures users of its authenticity. To digitally sign a VBA project:
Note: Use trusted certificates from reputable authorities for enhanced security.
Avoid hardcoding sensitive information like passwords or API keys directly in your VBA code. Instead:
Sample Code: Reading data from an encrypted file:
Reading data from an encrypted file ensures that sensitive information is kept secure from unauthorized access. Combining encryption with secure storage methods effectively safeguards critical data.
Sub ReadEncryptedData() Dim filePath As String, fileData As String filePath = "C:\secure\data.txt" Open filePath For Input As #1 Input #1, fileData MsgBox "Decrypted Data: " & Decrypt(fileData) Close #1 End Sub Function Decrypt(data As String) As String ' Custom decryption logic here Decrypt = StrReverse(data) ' Example: reversing string End Function
Accidents happen. Ensure you maintain:
Protecting and securing your VBA projects is not just about locking your code; it’s about adopting a comprehensive approach to safeguarding your intellectual property, maintaining functionality, and ensuring trustworthiness. By implementing the steps outlined above, you can significantly enhance the security and reliability of your VBA solutions.
Have tips or experiences with VBA project security? Share them in the comments below. Let’s secure our projects together!
Start protecting your VBA projects today by setting up password protection, implementing digital signatures, or securing sensitive data. Explore the resources above for more advanced security techniques and strengthen your projects against potential risks.
Do you have insights or experiences with securing VBA projects? Share them in the comments below, and let’s work together to create safer, more reliable solutions!