Quantcast
Channel: Microsoft Dynamics 365 Community
Viewing all 77179 articles
Browse latest View live

Using a Console Application in an Azure Web Job to Perform Scheduled Tasks

$
0
0

Recently I was tasked with developing a scheduled service which would be hosted in Azure. This service needed to retrieve data from a database and update the corresponding records in a Dynamics 365 instance. For this I decided to go with an Azure Web Job, over other options like Cloud Services and Azure Functions, mainly due to their simplicity in development and that they are very easy to deploy.

image

Azure Web Jobs can be two different types, continuous and triggered. Continuous web jobs are started as soon as the job has been created and are run in an endless loop. Triggered web jobs are only run when they are triggered manually or are running on a schedule. For this example, we will be using triggered jobs as we would set the job up to run on a schedule. The screenshot above shows a simple console application which would be used for the web job. When scheduled, this console application would run the Main method which would then run the logic you choose implement in the DoScheduledJobs method. For logging we can use Console.WriteLine which will print your logs in the Azure Portal for each of the jobs run. The screenshot below shows how the logs in portal would look.

image

image

The screenshot above shows the Azure Portal for a few existing web jobs I have previously created. Clicking the “Add” button brings the flyout on the right side of the screenshot and allows us to add a new web job. You would need to give the job a unique name, a zip file which contains the console application and a type of job. In this case I had selected the “Triggered” type with a “Scheduled” trigger and had set the schedule to be “0 5 * * * *”. This schedule uses a CRON expression with this example CRON expression scheduling the job to be run hourly on the 5th minute of the hour, for example 12:05, 1:05, 2:05, etc. Once you hit OK and select “Run” the schedule will begin and the console application will be triggered every hour. By clicking on “Logs” you will be able to see the jobs that were run and the logging you had added in the console application in real time.


SQL Server 2017 and Dynamics NAV

$
0
0
SQL Server 2017 was released in October last year with many new and interesting capabilities. For further information, please take a look at the product information at this location: https://docs.microsoft.com/en-us/sql/sql-server/what-s-new-in-sql-server-2017. Over the last few months, the Dynamics NAV team has been testing compatibility with this new version of SQL Server, and we are now proud...

Dynamics 365 for Outlook: Waiting for a page to be retrieved from a CRM server…

$
0
0
Some customers as well as on my machine I had the problem that the Dynamics 365 for Outlook never showed the entity views in the right Outlook pane. Also the message “Waiting for a page to be retrieved...(read more)

Microsoft Dynamics GP 2018 Feature of the Day-System Password

$
0
0
Anyone who spends a lot of time in the Admin area of Dynamics GP will love this new addition to #GP2018. Users only need to enter the system password once during the active session to navigate around...(read more)

Dynamics AX 2009 SP1 ending support in 2018

The free app experience – lessons learned

$
0
0

By WithoutWire Inventory Sciences

 

Turbo Tax has tackled a very complex subject – US Tax Law - with an online experience that is quite remarkable.  How many iterations did they go through to achieve a user-friendly experience?  Consider how many tax consultants were put out of a job when Tax Software became broadly accepted.  Seeking to provide our Clients the most affordable, quick and easy mobile inventory tracking experience; WithoutWire embarked on a similar Use-it-Free mobile inventory management experience– that can begin and end with an app download.  In our case, by searching “WithoutWire” on the app store:

Anyone with inventory and an iOS or Android smartphone or tablet can download our app and experience our software … for FREE!  This is a full version, not a “trial version” which limits functionality. We have our Clients experience the complete application to validate that it will create efficiency in their operations, reduce labor and data entry errors and provide a Return on Investment (ROI) of less than 6 months.  WithoutWire has been polishing our inventory application for 17 years, and our free inventory app has been on the market for 18 months, so I would like to share our “lessons learned” in case you are looking to do something similar.

Lessons Learned:

  1. Speak to the user in a way that demonstrates your understanding of their pain points. For us it was critical for us to demonstrate the flexibility to handle a variety of inventory types.  From lot tracked, expiration dated or serialized inventory.  From Manufacturing to Distribution to Field Service.  From Dynamics integration to OPEN API to import/export csv file communication.  You do not want to have your new Prospect questioning whether this simple app is powerful enough to meet their needs.
  2. Communicate the value of your solution – without sounding like your “selling”. Remember that the Client is brand new to your app, and may not be sure what to expect – what simple message can you convey about the benefits that they are about to receive that will encourage them to share a bit of “setup information” and continue further into your app?
  3. Gather only the necessary information (Client data) to provide a great experience. Your Prospect’s time is precious so do not ask for any information that is not required.  If you require Microsoft Azure security, then letting the Client know that this password setup process is for their own protection goes a long way toward continued engagement.  The Uber app performs best when you allow location services.  By Uber explaining the benefit of curbside pickup to the Client it makes it easier to “give up” their location privacy.  If the Client must navigate to their email account for password setup, then you may need to provide a convenient way to get the back to your app.
  4. Does your app compliment other apps on the market? If so, this can provide you with great leverage.  81% of users already have Facebook as an app and it is used for log-in credentials by many other apps.  Do you require payment?  Consider going with a familiar trusted partner such as PayPal.
  5. Create a habit. The number one reason for lost sales is “abandonment”.  The user got bored or found it cumbersome or too complex.  They need a reason to come back, and keep coming back.  The Bible app is one of the most popular apps for this reason.  It offers suggested “daily passages” and or the ability to bookmark within the app.  As the user flags pages, they become “invested” and the app becomes personalized.  This habit creates “stickiness” that ensures a longer engagement.  The longer they engage, the higher the chances of you converting them to a long-term Client!
  6. Free 24x7 Help for when they get stuck. In our case, we took a multi-faceted approach consisting of:  quick-start videos, tutorial videos, online chat, a data setup wizard, an online product knowledge base, an online chat service and product consultants standing by … all at no charge.  You can never have too much help as your new Prospects onboard!

 

I hope that you find these Lessons Learned valuable as you embark on your new software app.  Do not hesitate to reach out to me if I can be of assistance to you as you get started.  Steve Dwyer 612-315-2122; steved@WithoutWire.com

By Steve Dwyer

Principal

WithoutWire Inventory Sciences

www.withoutwire.com

Power BI Data Refresh Performance

$
0
0

Performance is a critical topic that we need to consider before and after we deliver applications. In this blog, we are going to discuss a scenario where the data refresh in Power BI Service keeps failing and explain why it is happening. We will also introduce a way to reduce refresh time by about 63% in Power BI Service.

Before we continue, the following is the environment we are working with:

  • BI reports are set with daily refresh in Power BI Service with professional licenses
  • Data source from an out-of-the-box entity and a custom entity in Dynamics CRM 2016 online (8.1)
  • OData connection and oAuth2 authentication method

If you are looking for how to connect Power BI to Dynamics CRM 2016 Online, please refer to our blogs:

  1. Connect Your CRM Online Data to PowerBI for Powerful Analysis
  2. How to Connect to Dynamics 365 Data from PowerBI Desktop

In this scenario, a data refresh failed due to timeout and the error message in the Power BI Service says that the user’s credential was not recognized. Upon investigation, the user security in Dynamics 365 and the licenses in Office 365 are not the issue. There is however, a current limitation on the Azure Active Director (AAD) OAuth token that expires in approximately one hour. That is the reason why the data refresh failed in Power BI Service. It means that data refresh must be complete within 60 minutes. We verified that if the data refresh lasted more than 60 minutes, it failed in Power BI Service.

Now we must focus on why the queries created in the Power BI reports are taking over 85 minutes to complete refresh in the Power BI Desktop. The volume is 17 months of data with about 128,000 records in Case entity and 1.22 million records in custom Event entity in Dynamics 365.

The following list shows the troubleshooting items performed. There is a bulls-eye in this list that resolved the performance issue. Which one will it be?

  • PBIX file size (should be less than 250 MB)
  • Data Source Connection with Instance Web API rather than Org. Service
  • Data Source Set with OAuth2
  • User Credentials and License Type in O365
  • Security Roles in CRM
  • Editing Query (Transform Tables and Columns)
  • Relationships (Join, cross filter directions, fact-dimension tables as star-schema, the same relationships as CRM)
  • Data Types and column names
  • Selecting right unique key (GUID) columns (_value)
  • Calculated columns and DAX Measures are optimized
  • The number of visuals in reports (less than 4-8 per page)

Editing query is the answer in this scenario! Right after a data source was established in the Power BI Desktop and the entities (tables) were selected to build queries, we start applying changes in queries in the following steps:

  1. Remove Unnecessary Columns and Tables
  2. Update the Data Types
  3. Filter Data (Created on)

Power BI Data Refresh

However, we changed the steps to this:

  1. Filter Data (Created on)
  2. Remove Unnecessary Columns and Tables
  3. Updated Data Types

Power BI Data Refresh

Filtering the dataset before removing the extra columns and tables changed the data loading time significantly! The download took from 85 minutes to 44 minutes in Power BI Desktop (48% ¯ ) and the refresh time in Power BI Service took 30 minutes (63% ¯). This minor change made difference in this particular scenario.

Finally, it is also recommended testing out both cases above and choosing the best steps accordingly.

For more helpful tips and tricks, be sure to follow our blog!

Happy PowerBI’ing with Dynamics 365 data!

Top Three Ways Your Field Service Company Can Save Money

$
0
0

When you need to find a way to maximize your field service company's profits and control costs you generally look at your expense sheet. Where is your money going? Can you reduce expenses? In what areas can you tighten spending to increase your profits?

But what do you do when you think you have eliminated every possible cost?

These days, staying competitive is about more than cutting costs. It’s about streamlining your processes to work smarter and maximize your employees and resources. That’ means taking a hard look at your current system and identifying inefficiencies.

  1. Dive into your business office procedures.

If you’re still relying on spreadsheets or multiple software systems to manage your customers, jobs, scheduling, and finances, chances are you’re wasting valuable time with manual entry, data exporting and importing, and searching for information. By streamlining your software into one system, you can reduce overhead hours dramatically.

In fact, Laneys, an HVAC company in Fargo, North Dakota, increased their sales by over 50 without adding any additional accounting or office staff thanks to a streamlined software system that connected their field service employees with the office. Download the case study

  1. Take a look at your scheduling process.

As a field service company, you could go days or even weeks without seeing your technicians in the office, which, in the past, made scheduling difficult. With graphical schedule board, you can easily schedule your technicians for jobs as they are booked and when emergency calls come in, you can add or remove jobs from a tech’s schedule. No matter where your techs are, they can view their real-time schedule and know exactly what projects they need to be working on.

  1. Gain a real understanding of what each job actually costs.

If you don’t know exactly how much a job will cost you to complete when you bid, how do you ensure that your bid is both competitive and profitable? With a job cost system, you can track and project what a job will cost you from the materials, to labor, to the associated overhead. This will give you the ability to give a better estimate for your customers and your bottom line.

 

When you’re ready to dive into your systems and processes, call on the professionals at DFC Consultants. They specialize in working with field service companies to get to know their processes and identify areas to streamline through advanced software and technology. They will guide you and suggest a software solution that will fit your needs (and budget) now and in the future.

 

By Sabrina Zimara


Solving “Failed to create a session” in Data upgrade cockpit

$
0
0

I have recently imported Contoso Demo Data using Data Transfer Tool on a brand new CU8 environment and it was required to upgrade it to CU12.

All the previous steps were fine, installation, data importation and CU12 installation (Application and Binary) worked without problems. Then I started the Upgrade Check List, since this was an environment free of customizations I had no problems with Code Upgrade and jumped to Data Upgrade:Capturar2

Problem started on Launch data upgrade step, when I opened the cockpit and clicked on Run I would get the message error “Failed to create a session; confirm that the user has the proper privileges to log on to Microsoft Dynamics”.
8475.image_4D99E026


Reading some forums and blogs I tried the following troubleshootings:

– Restarted AOS;
– Checked if Admin and AOS account had database privileges;
– Compiled using AXBuild;
– Compiled IL;
– Deleted UAC files;
– Deleted XppIL folder;
– Deleted and recreated partitions.

Observation: If you need more details about these steps, check this post from StoneRidge.

Then I read a post by Joris de Gruyter saying that the reason is because the cockpit runs in CIL and there’s a handoff between client and server using “RunAs”, and that goes through the admin account. If the admin account is invalid, the RunAs fails.

I believe the reason for recreating partitions is because when you import the Demo Data using Data Transfer Tool some system tables are left untouched, including UserInfo table, and the cockpit needs an Admin account for each partition to use on “RunAs”.
The Demo Data consists of three partitions, Initial (default), Public Sector and Extended, for some reason when I deleted the partitions and created again, it didn’t create an Admin account for every new partition.
Capturar3

My solution was to create an Admin account for each partition through Job.

static void CreateUserAdmin(Args _args)
{
       UserInfo userInfo;

       select userInfo where userInfo.id == 'Admin';
       userInfo.(fieldNum(UserInfo, Partition)) = 5637144578;
       userInfo.insert();
}

This job selects a record from UserInfo with ID equals to Admin and then it modifies the field partition to a manual value, that’s why I had to use “(fieldNum(UserInfo, Partition))”, otherwise AX won’t let me assign a value manually.

Checking records through SQL Management Studio again:
Capturar4

I restarted AOS(just to be sure) and tried to run Upgrade Cockpit again, for my hapiness it started working
Capturar5.PNG


Custom indexes and solution upgrades

$
0
0
In the on-prem version of Dynamics, we can create our own custom indexes. And, even though it’s a supported customization (here is a reference: https://msdn.microsoft.com/en-us/library/gg328350.aspx )...(read more)

Portal Platform Shootout for Dynamics 365 (2018)

$
0
0
Confused about which portal solution your organisation should use for Dynamics 365?  Today we’ll look at the best Portal platforms options with alot of new options now available in 2018 that promise...(read more)

Soft Booking Resource from Project Team Members View in PSA

$
0
0
Introduction: In the current 8.2 version of D365 PSA, we can only Hard Book a Resource from the Project Team Member View whereas in the v9.0, we can Soft Book from the Project Team Member View from with...(read more)

Identify Users having specific privileges

$
0
0
Introduction: This blog consists of information on how you can find the users having specific privileges and in which role they have the privileges. Solution: Make use of the below Fetch XML to identify...(read more)

Dynamics 365 in VR!

$
0
0
A not so serious review of using Dynamics 365 on a Windows Mixed Reality Headset …… Spoiler alert: I wouldn’t really want to use Dynamics 365 within virtual reality. But being able...(read more)

Export file from D365FO to OneDrive using LogicApp

$
0
0
I have done one example on Logic App for exporting Customers. Please find below for more details. Requirement: Exporting Customers data from D365FO and place the CSV file/ package on OneDrive using logic...(read more)

Import file from SharePoint to D365FO using Logic App

$
0
0
Below example on logic apps integration for Share point – D365 Ops. When you upload a .txt file on Share Point folder with customer details, using that file we can create new customer in D365 using...(read more)

Uninstall MPOS – “Mordern POS exists for other users on this computer”

$
0
0
While testing MPOS changes I had to do an uninstall on my laptop. But every time I tried to uninstall it told me that there was an error and it couldn’t complete the uninstall and that I should contact...(read more)

how to retrieve lookup value and set it on another lookup field in Dynamics CRM Javascript

$
0
0
In this blog i am going to show how you can retrieve a lookup value and set it. for e.g if you need to set one contact which in a regarding field on an activity to another contact field. use the below...(read more)

Microsoft Dynamics GP PowerBI Content Pack

$
0
0

Microsoft Dynamics GPMicrosoft Dynamics GP 2018 RTM has recently been released. and I have been taking a hands on look at the installation (and soon the new functionality). The series index for the Hands On series of posts is here and will automatically update as posts go live.

This post is not part of the hands On series, mainly because I currently have little experience with PowerBI (Perfect Image have a Business Intelligence team who do most of the PowerBI work).

It was announced some time ago that there would be a Microsoft Dynamics GP content pack for PowerBI available. I’ve not seen any blog announcement on it, but Pam Misialek did tweet back in December 2017 that it was now available.

Click to show/hide the Hands On With MDGP 2018 RTM Series Index

Read original post Microsoft Dynamics GP PowerBI Content Pack at azurecurve|Ramblings of a Dynamics GP Consultant

MB2-718 Certification: (Microsoft Dynamics 365 Customer Service) – Charts

$
0
0
As I revised for the MB2-718 exam (Microsoft Dynamics 365 Customer Service) I’m creating blog posts detailing all aspects of my revision. I hope these posts will aid anyone who is also revising for...(read more)
Viewing all 77179 articles
Browse latest View live


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