Quantcast
Channel: Magnetism Solutions Dynamics CRM Blog
Viewing all 987 articles
Browse latest View live

Selenium with Dynamics CRM Automating Clicks in Navigation Groups

$
0
0

I’ve been experimenting with different types of test automation tools such as Selenium with Microsoft Dynamics CRM. So far, I’ve been experimenting with how I can navigate through a Microsoft Dynamics CRM solution such that I can simulate test cases and automate tests later on. Selenium is a tool suite to automate web browsers across many platforms, primarily used for test automation. It is a popular open-source software that can be deployed across Windows, Linux and Macintosh platforms.

Working with the Microsoft .NET stack and Microsoft Dynamics 365 means I can use the Visual Studio IDE to execute and automate my tests with Selenium. Using the Selenium WebDriver allows me to identify browser elements and execute various actions such as clicks, enter text and selecting option sets. With Visual Studio, I can use the Selenium WebDriver with the NUnit framework to run my automated tests and validated results (e.g. using Assert and Verify methods).

Web browsers usually have a navigation path contained in URL to indicate web pages or web content (for example: websiteURLexample.com/homepage/contactspage). Since components in Microsoft Dynamics 365 are composed primarily via forms and don’t show navigation paths via URL link, being able to automate and access the sitemap is crucial in making our test cases. Using Selenium with Visual Studio allows me to navigate the Dynamics CRM solutions with the following example code:

image

Easy as that right? Well, the problem in regards to navigating the sitemap with the following example code is that the areas in the sitemap don’t fully drop down to show all the groups and subareas when simulating to click the button. For the example code above, I wanted to automate navigation of the sitemap in Dynamics CRM by clicking the sitemap home button, then clicking the Sales area button, and then finally clicking the Accounts subarea button (which would hopefully take me to Accounts).

image

If you encounter a NoSuchElement Exception from this example test code, this means that the Accounts subarea element does not exist, in context with the WebDriver not being able to find and use the Accounts subarea element.  After further investigation, this exception occurs even though the button attribute is set as selected. Inspecting the browser elements shows the Sales button element is set as selected, and would also visually be shown as selected when conducting the automated test case.

I would usually execute all my manual testing with Internet Explorer 11 for Dynamics CRM but it was more convenient for me to learn Selenium by using the Chromium Chrome Web Driver. My final conclusion was that it was an unusual behaviour attributed to using Dynamics CRM with Chrome considering the various bugs that are evident with Dynamics CRM in Chrome.

Threading and Loading

The Threading class allows for parallel execution such that we can create applications that use more than one thread of execution. By stating the following line of code below, we can dictate to the current thread of execution to wait for an extended stated amount of time (e.g. 2 seconds) before automating the click action. This way, it gives the associated subareas and groups time to load, seeing as how the Selenium Web Driver automates browser functions quickly when simulated.

image

For our example code, test automation would execute and automate navigation of the sitemap in Dynamics CRM by clicking the sitemap home button, then clicking the Sales area button. It would then wait for 2 seconds after the FindElement() call to load all the attributed groups and subareas for the Sales area, and then finally clicking the Accounts subarea button (which would hopefully take me to Accounts). Voila!

For testers who are new to test automation or do not have a lot of programming experience with testing for web browser applications, I imagine it would be difficult to encounter weird behaviours such as this (seeing as how users may have already been accustomed to and familiar with the system you are testing). It is important to recognize unusual test automation behaviours compared to how we intend and expect our automations to execute. Hopefully, using the following solution can solve any similar problems relating to NoSuchElement exceptions and loading system components when conducting test automation. Best of luck my fellow testers!


Testing Applications that Import Excel Files into Microsoft Dynamics CRM

$
0
0

The ability to import data from spreadsheets is a powerful and useful functionality in Microsoft Dynamics CRM. It allows business users to collect massive amounts of data all into Microsoft Dynamics CRM such that users are able to keep track of customer information all into one place. This is because in the CRM game, information is power and data provides powerful business intelligence.

A common functionality regarding Microsoft Dynamics 365 is importing CSV files into the client. The Microsoft stack offers Microsoft Excel, a popular spreadsheet application tool. It allows users to store data into spreadsheets, and provides various useful tools such as applying formulas, creating visual graphs and statistical analysis. Many users and businesses are familiar with Microsoft Excel and have Microsoft Excel as their ‘go-to’ spreadsheet application tool. Users having the familiarity of using Excel for data entry and data analysis while also using Excel in their everyday business. This means the ability to import Excel csv files into Microsoft Dynamics CRM is fundamental.

Third applications are used by businesses to gather information from its customers. Not all businesses will use the ‘Import Data’ tool that is provided out-of-the-box by Microsoft Dynamics 365.  Third party applications can provide a more seamless and integrated approach to gather data into Excel files and importing these into Dynamics CRM. In the context of this blog we store information into Excel files, such that third party application can import Excel files into Dynamics CRM. Seamless integration of data importing from these third party apps into Dynamics CRM is key. As testers, we must ensure that importing Excel files into Microsoft Dynamics CRM is well tested and functional.

The most important thing to check and test with importing Excel files is data mapping and integration. Because what is the point of using our data if it does not provide useful and contextual information to its user? To ensure data accuracy, quality and integrity, we must ensure that the import functionality is reliable and tested for data mapping into CRM.

image

When your data mappings get messy during imports – not exactly useful is it?

This means primarily checking if the correct entity records are created, and checking if the data is correctly mapped to the fields. The Advanced Find functionality in Dynamics CRM is useful to test for data mappings. Instead of individually navigating through each entity record and checking each record fields (which is painstakingly inefficient), we can use a custom view in Advanced Find to view the data in the columns. We can create a custom view, alter the column order identical to the column headers in our Excel files, and compare whether the correct data under a column gets mapped to the appropriate fields. This way we can view a large amount of records to eyeball and validate, thus easily compare selective records.

image

Using Advanced Find to easily eyeball and validate data mappings for CRM records with the imported Excel spreadsheet. We can easily compare by altering the columns in our view to mimic the columns in the imported Excel spreadsheet.

Consider the following real-world scenario to test: given a console application, it prompts the user to import data file pairs into Microsoft Dynamics CRM.

image

From the above example, we can draw up a few test cases that can hopefully give you some ways in how to test the import functionality of Excel files into Microsoft Dynamics CRM.

Again, as testers, we assume that the system user can make mistakes, especially when it comes to dealing with large amounts of data entry. Users can be overwhelmed by the massive stream of information and the mental load regarding this means that mistakes can happen. Consider the following to test for the Excel file to be exported:

Consider User Mistakes in Excel Data Entry:

-    blank data file – will it prompt the user if there are contents in the Excel file to import?
-    empty columns in the Excel spreadsheet
-    empty rows in the Excel spreadsheet – does an empty row still create a record when imported in CRM?

image
Make sure that an empty line in your Excel spreadsheet does not create a default record in CRM (unless it is intended functionality). Records have been blurred out for demonstration purposes.

Validation of File Format when Reading the File to Import:

-    validating the correct file names that identify a file to be imported
-    correct file format to import (csv file type)
-    missing or incorrect file names to identify a file to import
-    duplicate detection of files to be imported
-    consider access verification of the folder location of file to import

Field Mappings:

-    missing column header on a column with data
-    duplicate column headers in an Excel spreadsheet
-    Are the appropriate CRM entities created correctly in CRM?
-    Are the CRM fields mapped correctly in CRM with the associated column header in the Excel file?

Relationships:

-    Are Excel data linked with other data from another Excel file/ sheet?
-    Does an Excel file to be imported require another linked Excel file/ spreadsheet before executing the import?

Another important feature to test is whether we want to bring in user interaction and friendliness into testing. As testers we want to simulate what the user is experiencing when using the system. As such, it is important to assume users do not have familiarity with using the system application and to always give user feedback regarding required actions, import process actions, and processing status updates. We must consider the following test cases for the Excel file to be exported:

Required Actions from the System User:

-    Does it require the user to manually choose the files to be imported?
-    Does it require any validation from the user to execute the import process? E.g. “Do you want to import the following import files: Y/N?”
-    Will it validate if the required actions from the user is correct? E.g. “Do you want to import the following import files: Y/N?”, expecting a ‘Y’ or ‘N’ input but entering an invalid text or a number

User Friendliness:

-    Does the user get updated by the system on what is going on and what the system status is?  e.g. connected to CRM, import data located at …., currently processing the following csv file, import process completed
-    Is the language simple enough for the user to understand and interpret? Will there be any jargon that can be confusing to the user?
-    Are the system statuses given by the system informative and useful to the user?

A good system to test must also be able to handle what happens when things don’t go as expected. The ability to detect an error and execute error handlers is key in testing for a robust system. We also want to think about how an error is not only informative to the system user, but to the developers as well. This is to ensure that:

Error rollback/ error handling during import, information to the user and to the developers/ support team

-    Will the user be notified of any errors and what the reason is during the import process?
-    Test how an error during the import process is handled by the system and rollback processes. E.g. The import process already creates the records in CRM, then midway through the import process error has occurred. A rollback method could be to stop failed import process and delete the created records.
-    A log file generated can be useful for testing purposes to detect any implementation errors, error handling such that we can find more bugs, record all errors and so that developers can further improve the system

We take into account other business requirements, specifications or functionality that is specific to the system and the project we are testing. We also want to consider a stress test for dealing with imports of large data files. Here we can possibly analyse and test functionality, limitations and the speed of the importing process and if the system can handle or break. Through stress testing we can identify system stability, reliability and detect other modes of failure dealing with larger data files

Above are some of the ways I approached my testing regarding an import functionality into Dynamics 365. Testing a functionality that deals with streams of data and information needs to be considered with certain scenarios involving the system user and system integration. A well tested and well thought out test execution process is essential to creating an accurate and robust system to import data into Dynamics CRM. While every test execution is different for every project and has many different specifications, requirements and functionalities, hopefully you can draw a few ideas into how to build your test cases based on the experience of my own testing. Let’s get testing!

Tips for Project Management

$
0
0

image

A month into my role and I have started a book relevant to the role and industry I am in. I have already learnt incredible tips from Scott Berkun who wrote “Making things happen: Mastering Project Management.” He has written from his programme management experience at Microsoft Corporation which is incredibly valuable for someone like me who is on my road to becoming a Project Manager.

I will share a few useful tips that I believe will benefit myself and those who are interested to head down the project management path.

  • Learn from failures and mistakes
  • Keep a simple view of your work
  • Avoid putting your own interest ahead of the project
  • Have the courage to take on challenges
  • Focus on the more important and challenging things e.g. programming effort or schedule, rather than the less important things e.g. spreadsheets and reports

It is never easy to face and accept your own failures or mistakes, but it is very important to learn from past failures and mistakes during projects. Honest project reviews need to be a priority.

In my previous workplaces, I met people who made complicated plans or policies, perhaps to show off their intellect, but they confused people who worked alongside them. More often than not, the solution was always to make them more reader or user-friendly. So why not make things simple at the start?

Scott Berkun discussed about the satisfaction most project managers derive from their work. In order to be effective, they need to be willing to delegate important tasks and share rewards with the entire team. It is easy to be caught up in your own self achievements and forget to look at the big picture - and the health of the team when they find out that you are claiming all the credit. Hence, it is important to learn to avoid putting your own interest ahead of the project.

When challenges come, it is only natural to look for an easy way out. However, it is through the challenges that one emerges stronger and more courageous.

Lastly, I have not encountered this, but I reckon I might get carried away with spreadsheets and reports and forget about the more important things. This is a reminder and challenge for myself to prioritise what is important.

Project management requires years of failing and trying in order to be successful. The tips above are difficult to achieve as they challenge us to think from a different perspective and not follow the norm. Nonetheless, they are tips that would bring great benefits in the long run.

Error while Adding Existing Processes in Dynamics 2016

$
0
0

Recently while working on a project I came across a weird error which prevented me from adding any kind of process to a solution. At the time, the solution I was attempting to add to did not contain many processes, having a single Business Process Flow, a single Workflow, and a couple of Business Rules with conditions using the Business Process Flow stages. In this solution, whenever I attempted to add an existing Process, by either going into the Processes section and clicking ‘Add Existing’ or going to Components and selecting ‘Add Existing’ then going down to the ‘Processes’ option, the error window would pop-up. It would then show a standard error message, two buttons to ‘Try Again’ or ‘Close’ and no option to download an error log.

image

While testing I was able to determine that this error would appear for two different cases. The first being whenever I used a Business Process Flow which contained branches with an else/if condition. If a Business Process Flow contained this condition, then the error would show whenever I attempted to add an existing process.

image

 

I also noticed that this error would not occur if the branches had an if and an else condition, so only if/else would cause it. It is worth noting that the error would only show for solutions that contained Business Process Flows with these if/else branches, so solutions without these Business Process Flows were free to add existing processes.

The second case would occur when a Business Rule, which contained a condition, was being shown as solution Component. In a solution it seems that whenever a new Business Rule is created or an existing Business Rule is edited or saved the Rule would be added as a Component area with Type ‘Process’. The Business Rule being added as a Component would not cause this error, but if the Rule contained a condition, such as “if field contains data”, it would.

image

After searching for an answer online, I found that Microsoft had released a fix for this particular issue with update 0.1 for Dynamic CRM 2016, stating ‘Adding existing Process to a Dynamics CRM 2016 solution fails with error message.’ in their update notes. Because this update was not available in the CRM system I was using I needed a workaround for this problem. There were a few ways to get around this problem. For the first case I found the simplest way was to remove the Business Process Flow, causing the error from the solution and re-adding it along with any new processes which needed to be added to the solution. This was any Business Process Flow which contained branches with an else/if condition. For the second case I was able to solve this problem by removing any Business Rules, which were being shown as Components from the solution. Doing this does not remove a Business Rule from the solution as they can still be found in the normal places, such as in the Entity -> Business Rules area, but they will no longer be shown in the Components area. For the solution I worked with I needed to apply both fixes to be able to view the existing processes I needed to add to the solution.

Why Microsoft CRM for Sales is Imperative

$
0
0

Sales people are expensive people to bring on-board.  We tend to know our own worth and are often motivated by winning and being well recompensed for our efforts. We will research a prospective employer and weigh up all aspects of the company including remuneration, sensible target and quota setting and culture.  In addition, sales people will assess your views on mobile working, how easy you make it for them to efficiently to do what you have hired them to do, find business, grow business and close business.

image

For employers, it’s a little trickier.  Finding and selecting the right salesperson for your team can be fraught.  You have to fully know your own strengths and weaknesses, and your goals.  Once you selected your salesperson and assessed their experience, how they will fit into your organisation, and agreed your expectations from the goals you have identified, you are good to go, it’s up to them now, right?

 

image

Finding the right salesperson is the just the start.  Having the right practises and measurements in place will not only enable that salesperson to exceed their target but will give you invaluable insights into your business and future goals.

A CRM system is the way to handle this.  Every good salesperson will embrace CRM if it makes their job easier.  Why wouldn’t they? It’s mobile, can hold all information they need to fully understand their clients and gives them a view on where they are on every deal and what they have to do to hit target.

 

For Sales managers, you are not only empowering and easily measuring your salespeople.  Driving best practise via CRM regulates how as a company you engage with your customers and provides the building blocks for a more meaningful, deeper relationship with your customers.  Data analytics further accurate target setting and help monitor the effectiveness of your company’s strategy, providing the ability to spot and react to trends.

Giving your sales team the right tools should be part of your investment in them, to enable your team and to deliver a better service to your customers.

Dynamics CRM Business Process Flow Tooltips

$
0
0

CRM 2013 introduced tooltips which would be shown when users hovered their mouse over a label on the form. These tooltips texts could be set when creating or editing a field in the ‘Description’ area. At the of writing this blog that same custom tooltip functionality is not available for any fields located in a Business Process Flow, where the user should see a descriptive message when they hover over these fields but instead are just seeing the name of the label. So when tasked with showing these tooltips for fields on a Business Process Flow, a simple workaround was needed, and this was done with the use of Javascript.

To start with, while testing a few things, I noticed that the tooltips for each Business Process Flow field was being set to the Step Name of each field. This made the workaround easier as this could be treated similar to how the Description area works. By setting the step name to a custom tooltip message the only remaining thing needed to be done would be setting the field label to the default name.

image

This was done using Javascript as I was able to edit the label names for the fields OnLoad of the form, and the code below shows the function used to achieve this. The array created contains a field, which references the name of the field to be changed, and a text, which is the text the selected label will be changed to. This array would then be iterated through and each field on the form will have its label changed.

image

It is important to note that if the same field is located on the form it will also be renamed. To avoid this and only change the Business Process Flow labels the commented line in the code above needs to replace the line above it. This just makes sure the field label being changed is located in the Business Process Flow by checking if the field contains “header_process_”. It is also important to note that this function is written to change all labels of the field name in the cases that the same field is located multiple times within a business process flow, whether it is located in different steps, different branches, or different processes. If this is not done, the only field label changed which be the first instance of that field.

image

The finished product can be seen above, when hovering over the ‘Budget Amount’ field in the Business Process Flow. Hopefully in future releases this functionality is added, but until then this little work around is a viable option.

Dynamics 365 Licensing and Pricing Simplified

$
0
0

On November the 1st, Microsoft announced general availability of Dynamics 365 along with licensing and pricing information.

You can download/view the full 43 page document from the link below
http://download.microsoft.com/documents/en-us/dynamics/pricing/Dynamics_365_Enterprise_edition_Licensing_Guide.pdf

To make it more digestible, we thought we would simplify the 43 page document into few bite size chunks.

Awesome

The new licensing model is awesome! it is a lot easier to understand and explain to clients. The amount of functionality included at different price points are amazing! Definitely knocks the socks off Oracle and Salesforce.

Two editions

The Business Edition - only available for the Cloud (i.e. no on-prem). Maximum of 300 users and includes Financials (Madeira).

The Enterprise Edition - available for  On-Prem and the Cloud (i.e. Dual use rights). No max. user limit and includes AX (referred to as Operations).

Two types of licenses

image

Within the two Editions, you can purchase two types of licences.

    Team Member license - allows read access to ALL Dynamics 365 applications, read+write access to accounts, contacts, activities, notes and custom activities (great for xRM).

    Full User license - this is broken down into two different flavours. Think of these as going to McDonalds and buying just fries or buying a combo which includes fries, drink and a burger.

        Per App, you can purchase components of Dynamics 365. i.e. just use sales or customer service or project automation.

        Per Plan, there are two plans:

            Plan 1 is ALL Dynamics 365 applications EXCEPT Operations.

            Plan 2 is EVERYTHING

A picture is worth a thousand words…

image

As you can see from the above image, the Team Member license will allow read access across ALL Dynamics 365 applications.

You then have the option of purchasing a specific Dynamics 365 application such as Marketing, Project Service, Power Apps or Sales.

Or you have the option of purchasing Plan 1 which comprises of everything except operations.

Or purchase Plan 2 which will give you everything.

So, now that we know about the different Dynamics 365 licensing options…

What about pricing?

Please note that these prices are indicative only, they might be different depending on the region you’re in, but they should be close enough.

image

Team Member license will cost you around $10

Per App is slightly more complicated, Power Apps being ~$40, Operations being ~$190 and all others being ~$95.

Plan 1 is around $115

Plan 2 is around $210

An example, if a user requires access to Sales and Customer Service, you can do one of two things…you can buy a Per App license (sales + customer service) or buy Plan 1. It makes sense to buy Plan 1 because if you go with Per App, you’ll be paying $95 for Sales and another $95 for Customer Service, costing you $190. Whereas going with Plan 1, you get access to more functionality for just $115!

Tiered Pricing

To make it even better, the more users you have the cheaper it gets! I recommend having a look at page 24 of http://download.microsoft.com/documents/en-us/dynamics/pricing/Dynamics_365_Enterprise_edition_Licensing_Guide.pdf  for more information.

Hiding and Showing a Dynamics CRM Business Process Flow with Javascript

$
0
0

Business Process Flows (BPF for short) are used in CRM systems to guide users towards a desired outcome by defining steps for users to follow. In some instances, these processes are added to entities, such as the Lead entity, and can be very useful and for other instances they may not be needed. During a recent project an entity was created which needed to make us of a BPF only when a certain field was populated. When that field contained data the BPF would appear near the top of the form, and when the field was empty it would disappear.

By using Javascript, you can provide the functionality of both, detecting if a specific field contained data and hiding or showing a BPF on the form. To determine whether or not the specified field was populated I used the ‘Xrm.Page.getAttribute("field_name").getValue()’ which would return a value if the field contained data or would return null if it did not. In the example below I replaced ‘field_name’ with ‘new_playerpositions’ which would get the value of the ‘Player Position’ field. At the moment this call is returning null.

image

To hide or show the BPF, you can use the function call ‘Xrm.Page.ui.process.setVisible()’ which would set the visibility of the BPF. Because only one BPF should be visible on a form at a time there is no need to use a process id. Passing a Boolean to ‘setVisible()’ would result in the BPF hiding or showing, where true would show the BPF and false would hide it. If you wanted to collapse or expand the BPF Xrm.Page.ui.process also has a function call ‘setDisplayState()’ which takes a string of either ‘collapsed’ or ‘expanded’. The screenshot below shows the form when the ‘Player Position’ field is populated, resulting in the setVisible() function call being set to true.

image


Moving Dynamics CRM Business Process Flows with multiple Branches

$
0
0

Business Process Flows (BPFs) can be used to guide users through different phases to reach a desired outcome. BPFs make use of stages and steps, where stages are different phases in a process which users can complete one by one before moving on, and steps are fields within a stage which can be used to make sure users fill in the required amount of information before moving onto the next stage.

In a recent project we needed a Business Process Flow for a custom entity with few conditions.

The first condition being that this BPF would only become visible if a certain field on the form was populated, which I have already covered in a previous blog. The second was that the steps or fields in each of the stages be specific to the populated field. This ended up introducing a third condition of the stage in the BPF needing to be automatically moved to the next stage on create of the custom record. These remaining two conditions will be covered in this blog.

The second condition of using unique steps in each stage was achievable using an existing feature of BPF’s called branches. With branching I was able to specify which fields would be shown in each stage based on the value in a specific field as long as that specific field was in a previous stage.

An example of simple branching can be seen in the screenshots below, with ‘Player Position’ being the specific field. This led to the third condition being introduced with the addition of a base stage in the BPF, as a user would need to manually click to go to the next stage if they had entered a value into that specific field, which they should not have to do.

image

One of the issues you’ll came across was when using the Xrm.Page.data.process function ‘moveNext()’, which is supposed to move the current active stage to whatever the next stage is. By attempting to call this onSave you’ll see that the moveNext call was not doing anything.

Also attempting to call this after save completed, using ‘save().then()’, while also cancelling the default save using the ‘preventDefault()’ method, showed nothing happening.

The best way is to refresh the page after the save had been completed.
 
A few important things to note are, that you should only do this when ‘getFormType()’ was equal to 1 (create), and when a global variable used to check if it was the first time saving the form was true, which would then get set to false after the first save. These were added to prevent any infinite save loops and to make sure that the refresh would only happen on create of a new record.

It is also important to note that ‘Xrm.Utility.openEntityForm()’ was used to refresh the page with the entity name and record id as this is supported.

O365 App Launcher introducing a new icon - Dynamics 365

$
0
0

You might just not see anything called "CRM" in your office 365 app launcher in the near future. Microsoft's next generation intelligent business application aka Dynamics 365 will replace the word "CRM" enduringly impacting businesses to grow, evolve and transform. Microsoft Dynamics 365 is a cloud service that consolidates CRM and ERP capabilities and deliver applications that work together to manage not just only the traditional CRM sales, marketing, service scenarios but also includes Customer Service, Operations, Financials, Field Service, Project Service Automation, Marketing and Customer Insights.

Existing CRM consumers will be able to upgrade their current CRM Online subscriptions into the new Dynamics 365 service when they are ready without having to change anything.

On-premise CRM won't be going away anytime soon considering it's a significant customer base. However, Microsoft's focus and investment are clearly going to be on leveraging the power of the wider Microsoft cloud capabilities through Azure and Office 365.

Microsoft would also offer migration tools to aid process for those who would like to move their on-premises CRM systems to the cloud.

Utilizing rich advanced capabilities such as Power BI, Office 365, Azure, Cortana Intelligence, PowerApps, Flow, IoT, Machine Learning have significantly empowered Dynamics 365 platform. Here are some of the key features that Dynamics 365 offers:

Integration with Office 365

CRM app has integration with Office 365 but is somewhat limited. With Dynamics 365, the integration has gone to a whole new level providing users a full-blown integration. For instance, users can now drill into the details of a customer record of Dynamics 365 from within the Outlook email and even see further details such as associated sales opportunities and launch Dynamics 365 for Sales app or other apps from within the email.

Dynamics 365 has its own app store/Marketplace called AppSource

Microsoft AppSource is a marketplace that allows business users to hunt for business apps specifically that best suit their organization. In addendum, it allows them to connect businesses with partners and developers so they can offer input on application's development.

Common Data Model/Service

Data management and integration across apps and business processes are simplified as Dynamics 365 uses common data model/service shared with office 365. It gives us ability to extend Dynamics 365 functionality by building custom apps using common data model/service.

Dynamics 365 comes with fully mobile offline mode support

Dynamics platform let users work with their Dynamics 365 apps in offline mode on their iOS, Android and Windows phone or tablet while working in a remote area with limited or no internet connectivity.

Artificial Intelligence

Dynamics 365 comes with built-in artificial intelligence that helps you to do your job efficiently by providing recommendations directly into your Dynamics system by collecting your office 365 data and other data source on the Internet.

So when you come right down to it, CRM will still be the same product but with more features than ever. It certainly involves a good learning curve for us all and to know what can be accomplished with it to drive digital transformation for businesses.

Dynamics 365 Relationship Insights

$
0
0

Relationship insight is one the key feature that is backed by artificial intelligence and machine learning algorithms that comes as a built-in feature in Microsoft Dynamics 365. The service is built on the Cortana Intelligence Suite and takes advantage of the Dynamic 365 common data model/service.

It collects data from variety of sources such as Microsoft's own productivity software ecosystem, office 365, your CRM/ERP solution, social web sources and then provides a 360-degree view of your customers by scrutinizing sentiments, number of emails exchanged, email content, the frequency of contact and time spent with the customers etc.
 
This feature is most valuable for the sales people. It helps them to keep on top of their pipeline by spending more time selling with an automated data capture of customer communication across Dynamics 365 and Office 365 which is automatically populated into their Dynamics 365 sales system. By design, it calculates the health of each relationship such as calculating time spent with the customer or warning if too much time has passed between the last interaction with the clients and ultimately help them to be more productive at their daily tasks.

In the below screenshot, relationship insight assesses the current strength and characterize their relationship health and trend movement. It helps a sales person to determine relationship for each opportunity.

image

And the bubble chart below helps them to further prioritize on which relationship they need to focus on with the total opportunity size and the relationship health so that they can laser their focus on and who do they need to basically improve their relationship with.

image

Dynamics 365 Set Value vs Set Default Value

$
0
0

Business Rules are a really useful tool in Dynamics 365 for writing client side script without code. In this video, David Mochrie demonstrates the subtle but important difference between the 'Set Value' and 'Set Default Value' action in business rules

Queue Items Disappear on Queue Deactivation in Dynamics 2016

$
0
0

One of our clients had a situation where they had to deactivate one or more of their queues before reassigning all the queue items within it. They noticed that when they deactivated a queue all the items appeared to be deleted. (see image sequence below) This did not help them as they were unable to view the list of in this case cases that were still in the queue.

After some investigation I discovered that the queue items weren’t deleted but in fact inactive and hidden. When the queue was reactivated the items remained inactive but would reappear. Interestingly the hidden queue items were still available for querying using the SDK.

So the problem became how to show a list of cases that were related to the queue while the queue was inactive. Because the client was only interested in viewing the cases in the queue when it was inactive, we simply added a locked field lookup to the case that looked at the Queue the case was in (set via plugin) and added a sub grid to the Queue form that showed all the related cases.

If for some reason you have to deactivate a queue, make sure you consider what you want to have happen to the queue items within it.

1. Pre queue deactivation. Queue items are active and visible.

image

2. Post queue deactivation. Queue items are gone.

image

3. Post queue reactivation. Queue items are visible but inactive.

image

Intro to the Bot Framework with Dynamics 365

$
0
0

Since Microsoft’s Build 2016 Conference there has been a huge buzz around Artificial Intelligence Bots and Microsoft’s Bot Framework for developers, and recently I have been diving into the discovery and development of these bots for different platform. Bots aren’t anything new, they’ve been around for years performing simple, repetitive tasks, but with the introduction of Microsoft’s Developer Framework developers can use a single API to developer a bot which connects and talks to users through many different channels. A quick example of a bot which Microsoft had created was a Pizza bot, in which users could message via skype to order pizza. By messaging this bot, a user could customize their pizza before having it delivered without the need to talk to another person.

At the moment, using the Developer Portal, you are able to connect your bot to many popular social services, including Facebook Messenger, Slack, Skype and Kik. With the increase in activity on social media and instant messaging the opportunity for bots is increasing tremendously and the only thing limiting the bots’ functionality is the imagination of the developer. This blog won’t be focused on the steps towards creating a bot, as there are many blogs that currently exist which do, but will instead be used to show simple examples of some of the things the bot framework can do. This blog will only show examples of interactions with bots via Facebook Messenger and Skype.

image

The first bot I built using this framework was a very simple bot which replied to a user with a question, and when the user provided an answer would either confirm if the user was correct or provide the user with the correct answer.

The conversation with this bot can be seen in the screenshots above. Now, this isn’t anything fancy or complex, so for the next bot I decided to build a profile based on what the user would input. This bot was able to hold a longer conversation with a user as it collected personal information about them to generate a profile. As you can see in the screenshots below, a user would only be typing a single word or tapping a button to reply, keeping the profile building as quick and painless as possible. Prior to the completion of the profile the user is shown all the information they have entered and given the ability to change their details one last time. This another was straightforward and simple example, but with a bit of creativity you can see how something like this can be applied to a much larger situation. For the next part of this blog I will be using the profile builder I’ve just talked about to create a new contact within Dynamics CRM.

image

Before starting this contact creator Bot, I had already gone into Dynamics CRM and created two custom entities which I used to hold information between Bots and Contacts. The first custom entity was a “Bot” entity, which held the name of a bot and each of its unique Id’s, ex Facebook specific ID. The second custom entity created was a “Bot Connection” entity, which was used to hold the information between a Contact and a Bot.

A few examples of the information this entity could hold would be the type of connection, ex. Skype, the Contacts unique id created for the specific channel and the Bot and Contact records which are connected. The example below shows the conversation between a User starting a new conversation with this Bot via Facebook Messenger. As shown in the example the conversation between the User and the Bot lead to the User deciding to create a new Contact within Dynamics 365. The conversation then follows a profile builder, like the one shown earlier and ends with a new contact in Dynamics CRM is created. After the Contact is created a new Bot Connection is also created between the new Contact and the Bot, storing the user’s details for this channel in Dynamics 365 so that the user doesn’t need to connect to CRM every time they talk to the Bot. Anything further than this is beyond the scope of this blog but as stated earlier with a bit of imagination you can see how beneficial these bots can be.

image

Options for Microsoft Dynamics 365 Free 30-Day Trial

$
0
0

In this blog I will provide a short description of the solution options when setting up a free 30-day trial of one or more of the CRM solutions in Microsoft Dynamics 365. The solution options are Sales, Customer Service, Field Service and Project Service Automation.

The process for setting up a free 30-day trial of Microsoft Dynamics 365 is simple and can be completed within a few minutes from here by navigating through a few pages, providing some required information for the trial.

At the Setup page you will be asked to select a scenario. Each scenario aligns with a specific Microsoft Dynamics 365 solution and your selection here ensures that the trial is pre-configured with the solution and sample data that best suits your intended use of Microsoft Dynamics 365. The of the factors that determines the success of a trial is ensuring that the trial focuses on presenting a solution that meets your particular business requirements.

At the Setup page you will be asked to select a scenario. Each scenario aligns with a specific Microsoft Dynamics 365 solution and your selection here ensures that the trial is pre-configured with the solution and sample data that best suits your intended use of Microsoft Dynamics 365. The of the factors that determines the success of a trial is ensuring that the trial focuses on presenting a solution that meets your particular business requirements.

The following scenarios are provided:

  1. Dynamics 365 for Sales (this is the default option and includes Marketing)
  2. Dynamics 365 for Customer Service
  3. Dynamics 365 for Field Service
  4. Dynamics 365 for Project Service Automation
  5. All
  6. None

image

Not included in these options are solutions for Operations, Marketing or Customer Insights. These are not included because they are not core components or direct extensions of Microsoft Dynamics CRM. Microsoft Dynamics 365 is a suite of business applications that work together across CRM and ERP and this particular trial focuses on the CRM solutions. The Marketing solution mentioned here is not to be confused with the core CRM Marketing components, such as Campaigns, Marketing Lists, and Quick Campaigns provided in Dynamics CRM as part of the Sales solution.

The following sections in this blog provide a short outline of the key areas of CRM functionality that each option provides. Sample data is installed for all scenarios except if you selected None.

image
The Customer Service solution can also be configured via the Settings area in CRM to provide access to Entitlements and Service Level Agreements. Entitlements and Service Level Agreements are a replacement to Contracts and provide enhanced functionality.

Access to all Settings required to fully configure CRM can also be enabled in this scenario by navigating to Settings, My Apps and then clicking the Customer Service icon.
image

The Customer Service solution also provides access to the Interactive Service Hub. The Interactive Service Hub includes access to Knowledge Articles which are a replacement to Articles and provide enhanced functionality. The Interactive Service Hub may be accessed by navigating to Settings and then clicking Interactive Service Hub.

image

image

This solution also provides access to schedule, manage and complete Service Activities. However, Service Scheduling required requires the configuration of Business Closures, Facilities/Equipment, Sites, Services, and Resource Groups. These are not configured with sample data in the trial. The configuration is somewhat complex would best be trialed with the assistance of a Microsoft Dynamics CRM Business Partner. With respect to Service Delivery and Scheduling, you can however trial the Dynamics 365 for Field Service solution.

Dynamics 365 for Field Service

The Field Service solution provides access to Dynamics 365 CRM Accounts, Contacts, Leads, Opportunities, Quotes, Orders and Invoices as well as to a range of Field Service and Resource Scheduling solution specific Service Delivery, Inventory & Purchasing, Scheduling and Settings components such as Agreements, Purchase Orders and RMAs.

image

image

Access to all Settings required to fully configure CRM can also be enabled in this scenario by navigating to Settings, My Apps and then clicking the Microsoft Dynamics CRM 365 for Field Service icon.

image

Project Service Automation

The Project Service Automation solution provides access to Dynamics 365 CRM Dashboards, Customers, Contacts, Leads, Opportunities, Quotes and Reports as well as to a range of Project Service Automation solution specific Planning and Delivery, Billing, Resources and Settings components.

image

Access to all Settings required to fully configure CRM can also be enabled for this scenario by navigating to Settings, My Apps and then clicking the Microsoft Dynamics CRM 365 for Project Service Automation icon.

image

All

If you choose All, then you will be provided with access to the full set of Dynamics 365 Sales, Customer Service, Field Service and Project Service Automation components along with sample data. As previously mentioned the Sales solution also provides access to the core Dynamics CRM 365 CRM Marketing components.

None

Finally, if you choose None, then you will be provided with access to the Dynamics 365 for Sales and Customer Service components but not to the Field Service and Project Service Automation components. By default, no sample data will be installed, however you can install sample data by navigating to Settings, Data Management and clicking Install Sample Data.

image


Microsoft Dynamics 365 Business Application Platform in a nutshell

$
0
0

Microsoft’s business application platform let organizations innovate business solutions faster. It helps them to build and extend modern business applications by composing analytics, user experiences, tasks automation all together using a wide-ranging and integrated set of services. It offers a rich platform to solve business problems in the following 3 phases and make it possible to get the most out of it with the tools they provide.

image

Measure

This phase is to get the insight of the problem by examining organization’s data.

This can be achieved by combing data in Dynamics 365 and CRM with Power BI in Microsoft suite of tools. It provides interactive visualizations with self-service business intelligence capabilities where end users can create reports and dashboards by themselves without having to depend on any IT staff or database administrators.

Act

Once the problem is measured, the next step is to build and deliver the solution to resolve the problem.

Microsoft PowerApps offers the ability to transform your business by creating custom apps that connect to services such as Dynamics 365 that you’re already using without having to write any code. This can then be published and used on the web and mobile devices.

Automate

The last step is to make the process repeatable so there’s no manual intervention required each time.

Microsoft Flow tool can be used here to turn repetitive tasks into multistep workflows. It allows you to respond to an event in one service and do something with the data from that event in another. e.g. Automatically create an email along with a folder in SharePoint when a supplier is created in Dynamics 365.

Tips for Dynamics CRM 2016 to Dynamics 365 On-Premise Upgrades

$
0
0

You can now upgrade your on-premises deployment of Microsoft Dynamics CRM 2015/2016 to Microsoft Dynamics 365.

image

This is accomplished by downloading and installing the December 2016 Update for Dynamics 365. If your current version is Microsoft Dynamics CRM 2015 you need to upgrade to Microsoft Dynamics CRM 2016 first.

If you have any Language Packs installed, you will need to download and install the Microsoft Dynamics 365 Language Packs.

The following TechNet articles provide detailed technical information: Install or upgrade Microsoft Dynamics 365 Server, Plan your upgrade to Microsoft Dynamics CRM 2016 Server (this applies to Dynamics 365 (on-premises) as well, Microsoft Dynamics 365 Server InstallationConfigure IFD for Microsoft Dynamics 365, and Troubleshooting installation and upgrade

You can upgrade using one of the following methods:

Migrate by using anew instance of Microsoft SQL Server

This is the safest and recommended approach. This approach requires a different computer for the new version of Microsoft Dynamics CRM Server and a different instance of SQL Server.

Migrate by using the same instance of SQL Server

This method requires a different computer for the new version of Microsoft Dynamics CRM Server but upgrades the existing configuration and default organisation database on your existing SQL Server.

In-place upgrade

This is the riskiest approach. This approach upgrades your existing CRM Server and existing configuration and default organisation database on your existing SQL Server.

The following are some tips for completing a successful upgrade:

Licencing

There is single edition of Microsoft Dynamics 365 Server (On-Premises). The Client Access Licences, i.e. Dynamics 365 for Sales and Dynamics 365 for Customer Service, include the rights to use the Server. You need to obtain the product key prior to upgrading. This is available as a benefit of Software Assurance or can be purchased. FYI: Microsoft Dynamics CRM 365 On-Premises Licensing Guide.

Upgrade Plan

Who will perform your upgrade? Who will test your upgrade? When will these be done?

What other systems need to be upgraded or tested in conjunction with your Microsoft Dynamics 365 upgrade?

Identify all high-level steps that need to be completed to perform a successful upgrade. Who performs each step and how long does each step require?

Plan the steps required to upgrade your client software as well as your server software.

How will you continue business as normal using your existing Microsoft Dynamics CRM 2015/2016 deployment if the upgrade fails?

An upgrade plan should include a pre-production upgrade test plan, post-production upgrade test plan and an upgrade failure recovery plan.

What training needs to be provided to your users as a part of the upgrade and how will this be delivered, by whom and when?

Microsoft Dynamics CRM Business Partner

Consult with your Microsoft Dynamics CRM Business Partner. They should have an excellent knowledge of your existing Microsoft Dynamics CRM deployment and will be able to advise you on the safest and most appropriate method for completing a successful upgrade.

They will also be able to provide you with planning, technical, training and support for performing your upgrade and for clarifying the licencing requirements.

Have them identify any potential issues that may need to be addressed, that if not addressed, could cause the upgrade to fail, such as the presence of unsupported customisations or incompatible third-party solutions?

Have them confirm that Microsoft Dynamics CRM 365 is compatible with your current software and hardware.

Have them assist you with any licensing questions.

Test Plan

You should identify areas of functionality that need to be tested to prove that you can continue business as normal as a result of upgrading.

This includes identifying custom solutions developed by yourself, your Microsoft Dynamics CRM Business Partner or other parties. This includes custom solutions you may have downloaded and installed from the Microsoft Dynamics Marketplace.

This also includes integrations with other systems such as Microsoft Exchange Server, Microsoft SharePoint Server, your Company Web Site and other systems such as third-party applications and websites.

Develop a test plan that ensures all identified areas, processes and integrations will be tested.

Plan to test as each of your organisation’s User Roles. Avoid testing as the System Administrator User. Test using specific User Roles such as Sales Person and Sales Manager etc.

Test your core end-to-end processes from start to finish. Any given end to end business process may include testing the User Interface, Workflow Processes, Reports and any custom functionality.

Third Party Solutions

If you are using third-party solutions, you may need to obtain updated versions of those solutions that are compatible with Microsoft Dynamics CRM 365 or consult with the third party solution provides to confirm whether or not the current versions of those solutions are compatible.

Upgrade Opportunities

Consider whether or not there are any opportunities to upgrade your system in such a way that:

- existing functionality that is no longer used is retired
- existing functionality that can be enhanced is enhanced
- whether or not any new functionality available in Microsoft Dynamics 365 is that if used will improve your business efficiency, operations and effectiveness are evaluated and included where suitable
- whether or not any new custom functionality that does not currently exist could be developed and deployed as a part of the upgrade

Test Environment

Create and configure your test environment to be a replica of your production environment.
If the production environment integrates with other systems, such as Microsoft Exchange Server or your Web Site then you must ensure that the test environment is reconfigured to integrate with test versions of those systems rather than with the live versions of those systems.

You should consider the need to update or remove all the email addresses for Leads, Customers and Users in your test environment in such a way that any functionality being tested, such as Workflow Processes that may send email communications do not send any communications generated as a result of testing to your production environment Leads, Customers and Users. Consider also whether or not you need to do this with phone numbers as well if using any processes that send SMS messages.

You should then use the test environment to perform technical and user testing prior to upgrading your production environment.

Technical Testing

You should plan to test and signoff the upgrade at a technical level. This confirms that the upgrade process works without issue and results in a successfully upgraded system that technically works and can be logged into by System Administrators and Users.

If there are any technical issues identified as a result of testing, you can then work to identify the cause and resolve them You should then update your upgrade plan accordingly if required. Technical issues can be caused by incorrect software and hardware, incorrect/missed configurations, incorrect/missed upgrade steps and incompatible third-party solutions.

User Testing

Your test users should follow the test plan you have developed to prove that there are no functional issues as a result of your upgrade.

Backups

Before upgrading your production environments, you should ensure you have backups that are suitable for restoring your production environment to its previous state in the event that the upgrade fails.

You should also have backups of your test environment so that if your test upgrade fails you can restore your test environment without needing to reinstall it.

Training

It is recommended that you train your users as a part of the upgrade process especially with regard to areas of the User interface that may have changed. This is also a good opportunity to provide general refresher training and update training on best practices for using Microsoft Dynamics CRM.

How to Bulk Migrate Dynamics CRM Licences to Dynamics 365 Licences using PowerShell

$
0
0

Along with the rename of Dynamics CRM to Dynamics 365 came new licenses. If you’re on Office 365 with the old Dynamics CRM licenses being assigned to users you will need to re-assign Dynamics 365 licenses to these users at some point.

If you have tens of users then manually removing and assigning the new Dynamics 365 licenses will be just fine. But if you have hundreds or thousands, you probably don’t want to spend a weekend manually doing this. So, here is a little PowerShell script that will do the heavy lifting.

$credentials = Get-CredentialConnect-MsolService -Credential $credentialsGet-MsolAccountSkuGet-MsolAccountSku | Format-Table AccountSkuId, SkuPartNumber$myplan = New-MsolLicenseOptions -AccountSkuId "tenant:DYN365_ENTERPRISE_TEAM_MEMBERS" -DisabledPlans SHAREPOINTENTERPRISE,SHAREPOINTWAC,PROJECT_ESSENTIALSSet-MsolUserLicense -UserPrincipalName "user@user.com" -AddLicenses "tenant:DYN365_ENTERPRISE_TEAM_MEMBERS" -LicenseOptions $myplanSet-MsolUserLicense -UserPrincipalName "user@user.com" -RemoveLicenses "tenant:CRMPLAN2"

The first two lines will ask for credentials of your Office 365 tenant.

Get-MsolAccountSku will list out your current licenses, this is needed to find the exact name of the “tenant” which will be used when adding  and removing the existing Dynamics CRM licenses.

Basically, what’s required is to create a custom plan by removing the SharePoint and Project sub-plans, these are already part of other O365 plans such as E1. If you don’t remove these, the PowerShell command will fail stating that the sub-plans are already assigned to this user.

Once $myplan is configured with the required license, in this example it’s the Dynamics 365 Enterprise Team Member license you can run Set-MsolUserLicense –AddLicenses command.

The last thing to do is to remove the existing Dynamics CRM license. e.g. CRMPLAN2

To run this over multiple users you can foreach loop users from Office 365, this can also be retrieved using PowerShell but I’ll leave that to you to figure out, can’t make it too easy Smile

10 things you may not know about editable grid in Dynamics 365

$
0
0

Editable Grid was released as a new feature in Dynamics 365 to much applause from the CRM community. In this blog, I’d like to dive into some things the editable grid can and can’t do.

1. What is editable grid?

It's a custom control on an entity. It’s not enabled out of the box for any entity, you have to set it up. It's easy (see below). It allows you to amend values on a view inline without going into the form.

2. Once you set up editable grid for an entity, can you still use the traditional read only views?

Yes. Once you set it up on an entity, you can toggle back and forth from editable to read only grid via a 'Show as' button on the view command bar.

image

3. Can it be used on out of the box and custom entities?

Yes

4. Can it be used on personal views?

Yes

5. Can it be used on mobile clients?

Yes, both tablet and phone. In fact, when you enable it, you enable for web, tablet and phone all together.

6. Can you apply it to just some view on an entity and not others?

Not exactly. It is set up at either entity or form level (i.e. applies to a specific subgrid). But you can't just apply it to some views on an entity and not others.

7. How do you set it up?

In Customisations, in the entity configuration screen, there's a new tab called 'Controls'.

image

Select 'Add control' and select the type you want, in this case, obviously ‘Editable Grid’.

image

Don’t forget to save your changes. Then publish.

Please also note that it seems it is possible to add multiple editable grids to the same entity, but this would appear to be a bug, as it seems to have no impact. Of course, it only makes sense to have 1 editable grid control per entity.

8. What can you do on an editable grid?

You can (and this list is not exhaustive):
Change values on the view columns, obviously. See example below where I’m about to change the email field for Abraham McCormick.

image

Move columns around in the view by dragging and dropping. Please note, these persist across sessions, and users, i.e. if I move a column, it is moved for all users, and will still be like that when I log out and back in again. Not sure I like this functionality, particularly the fact that it moves it for all users.

Group records by a column in the view. Below, I’ve grouped by Company Name, and collapsed the contacts attached to no company and to A.Datum.

image

Again, these changes persist across sessions and users. Please note, you can enable editable grid for an entity but disable grouping if you want. Not sure why you would ever do this though.

9. What can't you do on an editable grid?

You can't (and again this list is not exhaustive):
Select a lookup field on a view and be taken to that record. It’s not a link, like it is in read only grid.

Change the owner of a record - this is still done through ‘Assign’ on the command bar. As you can see it is locked:

image
Change a value on a field of a parent entity, e.g. phone number of parent account on an editable grid of contacts. As you can see below, it’s locked:

image

Click to call phone numbers. Again, they’re not links. When you click on them, you can change them, but not call them.

image

Click to send email. Again, they’re not links.

Change customer lookups (you can change all other lookups on the primary entity).

image

Change composite fields, e.g. full name:

image

You can of course list out each component of the composite field in their own columns and change those individually.

Change party list fields.

See more than 25 records per page, regardless of your personal setting for records per page, unless you use the grouping function, in which case it will respect your personal options for records per page.

Perform a secondary sort, unless the grid is grouped, in which case you can do a maximum of 2 levels of sorting (unlike read only grid where you can sort by many columns).

See how many records are in the view, i.e. there is no record count at the bottom. You just see this for paging back and forth:

image

10. Can you set an entity to default to editable or read only grid?

Yes you can. You create the control for editable grid, and then select whether you want the default to be editable grid or read only grid for each client, i.e. web, phone or tablet. In the example below, I’ve set the default for web client to be editable grid, but for phone and tablet to be read only grid.

image

Please note, if you go to another entity and then back, you will be taken back to the grid type you were on when you left, not your default. However, if you sign out of CRM and back in, you will be taken to your default. So, the default grid type is only for when you first view that entity in a new session.

This isn't an exhaustive list of editable grid’s features and limitations, but it’s a decent start.

Happy CRM’ing everyone!

Microsoft PowerApps and Dynamics 365 OnSelect Example

$
0
0

Microsoft PowerApps provides the ability to users at any level in an enterprise to create fully functional apps without having to write any code or any app development skills. You can use pre-built app templates or start from scratch and connect to your existing services such as Excel, Dynamics 365, SharePoint etc. to capture data.

If you are new to PowerApps, please have a look at Microsoft PowerApps website for its overview. On this blog, we have used PowerApps OnSelect function to display user’s first and last name on form submission.

Steps are as follows:

1. Add a Text box and set its Text property to: “First Name:”.
2. Add a Text input control, and name it FirstName.
3. Add a Text box and set its Text property to: “Last Name:”.
4. Add a Text input control, and name it LastName.
5. Add a Button control, set its Text property to Submit, and set its OnSelect property as follows:

image

Note: UpdateContext function is used to create a context variable which temporarily holds a piece of information

6. Add a Text box control, set its Text property to show Welcome, and then press F5.
7. Type first and last Name in the respective fields and then click Submit.

The OnSelect function triggers and displays the result per below. To return to the default workspace, press ESC.

image

Viewing all 987 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>