Friday, August 29, 2014

Microsoft Dynamics GP 2015 Developer's Preview: Loading the VHD image - Part 1

Now that you are beyond the initial excitement of the preview release announcement and have downloaded the RAR files with the links provided by Kevin Racer, Sr. Program Manager Lead with the Microsoft Dynamics GP team (See Microsoft announces Developer Preview for Dynamics GP 2015 for links to the rar files), it's time to get the VHD image loaded.

Note: you can use WinRAR or WinZip to extract the virtual hard drive image from the rar files downloaded from PartnerSource. The extracted file is 29.1GB.

Part 1 will focus on the traditional Hyper-V method of loading the file. Click here for direct access to the video on YouTube.


Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Microsoft Dynamics GP 2015 Developers' Preview is now available

These are exciting times indeed! Microsoft Dynamics GP 2015 Developer's Preview is now available for partners to download, as featured over at Developing for Dynamics GP by Kevin Racer, Sr. Program Manager Lead with the Microsoft Dynamics GP team (See Microsoft announces Developer Preview for Dynamics GP 2015).

The Developer's Preview features the new Service Base Architecture (SBA) components that will enable developers from all walks of life to write and integrate applications on any platform to Microsoft Dynamics GP via REST services.

NOTE: as of the time of this article, hypermedia is still not part of the current design.

You can always find more information about RESTful services online, but here's a primer on RESTful with WCF on MSDN.

The RESTful approach facilitates integration across the board as it takes advantage some fundamental principles like HTTP as transport protocol, URIs to identify resources, and Verbs that translate directly into actions.

Now what makes this even more interesting is, all the business logic to consume and expose services can be written in sanScript. Let me repeat... all the business logic to consume and expose services can be written in sanScript - Microsoft Dexterity's development language. Dexterity has been considerably enhanced and extended for .NET interop. There's no more need to expose a .NET assembly to COM. And through the now familiar Dictionary Assembly Generator (DAG), you can generate the .NET assemblies for your Dexterity based services. This truly allows partners and ISVs to take significant advantage of their existing code base without much effort to add this new functionality.

Dexterity continues to evolve to deliver powerful functionality
(C) Copyright Microsoft Corporation, 2014

.NET interop opens up the door for Dexterity developers to create powerful applications that expose and consume services, along with a host of other options previously available only to Visual Studio developers. Alice Newsam discusses more on .NET Interop in her Dynamics GP Developer Insight article, over at Developing for Dynamics GP. The application integration options have now scaled beyond the traditional Web Services, eConnect, and Integration Manager options for CRUD operations and Dexterity Triggers and Visual Studio Tools for UI integration.

Partners can download the Roshal Archive format (RAR) files containing the virtual hard drive (VHD) image from PartnerSource using the links provided by Kevin in his article (See Microsoft announces Developer Preview for Dynamics GP 2015).

It's always good to point out that this is still a preview version so you are encouraged not to release any product or deliver any service to a customer with these tools and rather use for internal education and readiness.

Downloads
SBA_Preview_Readme.txt

In my next article I will discuss how to load the VHD image.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Tuesday, August 26, 2014

Customizating Integration Manager Logs - Part 2

In my previous post I talked about all the out of the box options for setting up Integration Manager ("IM") logs and frankly, the Trace level log is good for most users of IM users. However, when "good" is not good enough, it's necessary to resort to some of the objects and functions available as part of IM's scripting library.

Errors Collection object, Error object, and functions

Integration Manager provides the Errors Collection object which is nothing more than a collection or list of all the errors generated during an integration. The Errors Collection must be explicitly retrieved in order to work with the properties within the collection. To navigate the collection we need the Error object to get information about the specific error within the Errors Collection, for example, time of the error, the specific error text, and the type of severity (error or warning).

IM also provides a number of functions that allow a developer to write into the log file directly. These functions are: LogDetail, LogDocDetail, LogWarning, and LogDocWarning. Each of these functions is discussed in greater detail in Part 5 - Using VBScript, Chapter 22 - Functions of the Integration Manager User's Guide. The following example puts all these together:

After Document script
'
' Created by Mariano Gomez, MVP
' This code is licensed under the Creative Commons 
' Attribution-NonCommercial-ShareAlike 3.0 Generic license.
Const SEVERITY_MEDIUM 1000
Const SEVERITY_CRITICAL 2000

Dim imErrors ' reference the Errors Collection
Dim imError ' reference a specific error within the collection

Set imErrors = GetVariable("Errors")  
If imErrors.Count > 0 Then
 For i = 1 to imErrors.Count
  Set imError = imErrors.Item(i) ' get the error represented by the index
 
  'Check the severity level of the error
  if imError.Severity = GetVariable("SeverityWarning") then
   'We have hit a warning
   LogDocWarning imError.MessageText, "", SEVERITY_MEDIUM, "Customer Name", SourceFields(somequery.CustomerName)
  Else
  ' We hit a major issue, so now we really want to log all details details
   LogDocDetail imError.MessageText, "", SEVERITY_CRITICAL, "Customer Name", SourceFields(somequery.CustomerName)
  End If
 Next 'Continue if there's more than 1 error
End If
  

Note that you can add event logs from anywhere where scripting is allowed in IM. The above sample code is just a small example of how you could customize the logs further, with information that's meaningful to you and your users.

Hope you found this information useful.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Customizing Integration Manager Logs - Part 1

Just recently, I took on a question on the Microsoft Dynamics GP Partner Online Technical Forum where the original poster asked if it was possible to customize the logs produced by Integration Manager ("IM").

Before we get into the customization aspects of the log, let's start by remembering that IM already offers 4 levels of log customization out of the box: a Summary log, a Document level log, a Trace level log and, if you consider no log an option, then None. In the case of a Document level log, information about every integrated record is logged, including the document number (keep in mind that document here refers to the entire envelope of data regardless of whether it's an actual document or a master record). The Trace level log, in addition to the Document level information, examines and outputs all the steps performed by IM to get the document into Microsoft Dynamics GP, including any errors or warnings that Microsoft Dynamics GP may send back to IM.

IM Properties window - Logs tab

At this point, the above options are out of the box and do exactly what Microsoft developers intended. However, what if you really want to extend the capabilities of the log to provide some additional information that is not currently covered by the Document or Trace level logs? It is possible to provide this extra piece of information if you are familiar with IM event scripts.

IM Properties window - Scripts tab
In particular, the Document Warning, Document Error, and Integration Error event scripts allow you to make use of the VBScript scripting editor to extend the information you may include in the log file, regardless of log trace level. As the events suggest, the Document Warning event will fire when IM receives a warning from Microsoft Dynamics GP in response to an attempt to integrate a document, i.e., a missing distribution account when integrating a journal entry. While the journal will still integrate, it means that further editing work will be required in Microsoft Dynamics GP to add the missing account and balance the journal transaction before posting is possible.

In contrast, the Document Error event fires when Microsoft Dynamics GP cannot accept the master record or transaction being imported due to inconsistencies with the data. For example, a SOP invoice is submitted with missing required field, causing the document to be rejected by Microsoft Dynamics GP. In this case, this response is captured as document error by IM, causing the Document Error event to fire.

Finally, the Integration Error event fires each time an error occurs for the integration process as a whole.

This is not to say you can't add additional information to the log at any other point or event within Integration Manager, but you will want to remember that most times when you are dealing with logs, you want to mostly target exceptions within the integration process and not necessarily every single event.

Tomorrow, I will focus on the scripting options available to enhance/customize the logs. Also remember that this and many other topics will be covered during my GPUG Summit 2014 session on Integration Manager. Please register and attend the session.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Thursday, August 21, 2014

Mariano Gomez does the ALS #IceBucketChallenge

Thanks to my good friend David Musgrave over at Developing for Dynamics GP for nominating me to the ALS #IceBucketChallenge. David was originally nominated by MVP Jivtesh Singh. See his blog post and video here:


David completed his challenge (and donation yesterday) and posted this article on his blog as proof of his accomplishment. You can see his challenge video below:



Of course, supporting the cause and accepting the challenge is what this is all about so here is my poor attempt at self-filming along with drenching myself - and no, I don't have a pool and no, it's not 62 degrees, but the water was ice chilling!


Since I forgot all about nominating anyone in the video, I take these few extra lines to nominate my kids Laura, Angie, and Miguel Gomez and the Reporting Central team headed by Gianmarco Salzano and Shane Hall. You have 24 hours to complete the challenge.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

#GPUG Summit 2014 St. Louis Schedule


I want to begin drawing some attention to my presentation schedule at the upcoming GPUG Summit 2014 in St. Louis, MO where I will be once more delivering some cool and thoughtful sessions around some very relevant topics.

CodeSessionRoomDate and Time
TOT02Mariano's Toolbox: Integration Manager, Please!
Session Level: Intermediate
231Oct 15, 11:00 AM
STR04Mariano's Toolbox: Web Client Deployment for You!
Session Level: Intermediate
240Oct 15, 4:30 PM
ITP06Mariano's Toolbox: Why the Support Debugging Tools is a Customer Favorite!
Session Level: Intermediate
229Oct 16, 9:30 AM
UPG07Mariano's Toolbox: Upgrading to Microsoft Dynamics GP 2013 for Dummies
Session Level: Intermediate
242Oct 16, 2:00 PM

To make your participation more enticing, all my sessions are eligible for CPE credits, so please visit the Registration page and sign up. You can check out the full sessions schedule here.

If you want something to do before the event, there are pre-conference training classes available on October 13 and 14 and offered by the GPUG Academy.

Finally, this year I have been nominated to the GPUG All Stars and would appreciate your vote. Please help me attain this important achievement.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.intelligentpartnerships.com/

Tuesday, August 19, 2014

Microsoft Dynamics GP 2013 R2 Installation: Utilities changes

When executing Dynamics Utilities for a brand new installation of Microsoft Dynamics GP 2013 R2 you may have noticed a new window in the guiding wizard. This window is the Web Client SQL Server Login window, which allows you to specify a common SQL account that will be created during the system database setup process.

Web Client SQL Server Login window

In GP 2013 R2, users accessing the web client exclusively no longer require a SQL account to access the underlying data in the system and company databases they have been assigned to. However, their Active Directory credentials must be associated to their Microsoft Dynamics GP account (stored in the Users Master table (SY01400). Access to data is afforded via a common SQL Server login once the Active Directory credentials and the Microsoft Dynamics GP user credentials have been validated. This provides users with a single sign-on experience from the web client.


User Setup

The above is described in more detail by Jason Lech, Escalation Engineer at Microsoft in his article on Identity Management.

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Thursday, August 14, 2014

#reIMAGINE2014 Keynote Speaker: Doug Burgum

Doug Burgum in his days

Yes, THE Doug Burgum will be the keynote speaker at Microsoft's #reIMAGINE2014 conference in Fargo, ND., hosted by Dynamics Partner Connections. If this is not enough reason to go to Fargo in November, then I don't know what is.

Of course, Doug has changed a bit from his days at Great Plains Software and Microsoft and this is probably the man you will see on stage at the Historic Fargo Theater.

Doug Burgum today

So sharpen up on your Microsoft Dynamics GP history and join us there. You can register by visiting the reIMAGINE 2014 site. Not only will the keynote be off the charts, but you will get to learn a ton.

Still need a reason to attend, then have a look at the series of posts by Pam Misialek on the Inside Microsoft Dynamics GP Blog:

Until next post!

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Wednesday, August 6, 2014

Deploying Business Analyzer Companion App Services on Windows Azure Service Bus

Business Analyzer App for Windows 8.1

If you are not using Business Analyzer today, shame on you. Last year sometimes I wrote a small article on how to deploy the Business Analyzer Windows 8 application on a personal laptop, which is typically how most of us road warriors need it to be for demo purposes. However, here at Intelligent Partnerships, we've changed our approach a bit: all our infrastructure and demo environments now reside on Windows Azure, which gives all of our people the flexibility of having a single environment and consistent across the board, while allowing our accounting staff to do work from anywhere in the world.


Today, I want to talk about another one of those cool features in Windows Azure: The Azure Service Bus and how you can leverage it to run the Business Analyzer app for Windows 8.1.

I really don't like to oversimplify anything, but think of Azure Service Bus as cloud based message queuing system, akin to MSMQ, but running on a much more robust platform. The advantage is that applications are no longer bound by myriads of layers (like firewalls, complex authentication, etc.) to communicate with each other and can reside anywhere and on any device that can communicate to the Internet.

So let's get started...

1. To setup a Service Bus you sign into Azure's management portal, then click on the Service Bus option on the left navigation bar.

Service Bus service
2. Click the Create button to add a namespace for your service bus. The namespace identifies the service in Windows Azure and is assigned an address. You can then choose the region where your service will be hosted.

Service bus namespace

By clicking the Ok button, Windows Azure proceeds to activate that namespace if it's available. If it's not available, you will be prompted to enter a new namespace, before you can continue.

3. You can then proceed to install Business Analyzer Companion App Services on one of your virtual machines (preferably not your SQL Server). The installation is straight forward and all you need to do prior to running the setup executable program (setup.exe) is to install the reporting services configuration reports for Business Analyzer. Those are provided in the Companion App services SSRS zip file (MDGP2013_CompanionAppServices_SSRS.zip).

4. Once the Companion App Services application is installed, you can proceed to launch the configuration app, which can typically be found in the C:\Program Files\Microsoft Dynamics\GP Companion App Services\ folder.

Welcome screen
The Welcome screen displays the Companion App Service current connection information, which should later on be replaced by the settings you establish for this instance.

5. After the Welcome screen, you are presented with the Windows Azure configuration screen.

Windows Azure Service Bus Configuration window
In this window you will enter information about the Service Bus you previously configured using the Azure management portal. For the most part you specify the namespace, issuer, and issuer key which can be found


Service Bus connection information
Note the default issuer and default key must match the issuer name and issuer key, respectively, in the Azure configuration window. Click Next to continue - you will experience a short delay while the wizard validates the Azure service bus information you provided.

6. On the Host Configuration screen you can enter the host name and port of the machine that's going to be running the service - typically, just accept the default port. The beauty here is, since we already configured access via the Azure service bus, it's not necessary to expose the public name (server.cloudapp.net) of the host and create an end-point for the port, thus exposing our servers to the world - this is why we created the service bus to begin with!



7. Next on is to select the Companion Apps that will be used with the service. You will want to mark both of them here.

Select Applications

8. You will then want to choose the Data Connections to use with Companion App Services. In this case you have a choice of either Excel Reports or SQL Server Reporting Services reports.

Data Connections
9. Next you must identify where to find the Excel reports using UNC path to specify the folder. My reports happen to be at \\servername\gpfiles\excel reports\reports.

Shared Excel Reports folder

10. You are now asked to enter the address to Report Server and specify a folder where the reports can be found, if you happen to have multiple instances of GP deployed.


If you have deployed SharePoint Integrated mode, then click the checkmark and specify the library address for the reports.

11. Once the report server information is validated, you will receive a confirmation page with the address to be used when configuring the Business Analyzer application.

Configuration Complete window
The address we are particularly interested in is the Service Bus address, which in this case is simply ip-contoso. (with the period at the end).

12. Open the Business Analyzer application, the go to the Configuration window from the Charms on the right. You can then enter the ip.contoso. address in the service configuration.

Business Analyzer Configuration

Sweet! Now, we have configured BA without really exposing the public address of our Azure VM, which should make system administrators very happy.

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com

Monday, August 4, 2014

Implementing a Windows Azure Site-To-Site VPN

Hi everyone! I'm back! The past few months have seen an increase in projects here at Intelligent Partnerships so I have been shouldering some very challenging projects involving some very complex integrations. Thank goodness for eOne Business Solutions' SmartConnect and SmartPost products which have made for some very happy customers and some extremely robust integrations. In addition, I've been working on quite a bit of customizations migration from Visual Basic for Applications (VBA) to some cool hybrid solutions using Microsoft Dexterity and Visual Studio Tools (VST) for Microsoft Dynamics GP. If you remember, I was one of the pioneers of the technique to replace VBA customizations for hybrid Modifier and Visual Studio Tools. You can read more about this technique in the articles:

Hybrid development for the Managed Code developer
Hybrid development for the Managed Code developer (cont.)


Well, today I wanted to talk about Microsoft Azure Virtual Networks and specifically, the steps needed to setup a Site-to-Site VPN between your Windows Azure virtual network and your Local Area Network.

As you may recall from previous articles I've written on the subject of deploying Microsoft Dynamics GP on Windows Azure, a pre-requisite step before provisioning the VMs that will host SQL Server and your Microsoft Dynamics GP application is to provision and configure a Virtual Network, to be used to communicate the VMs. Also, if you are not going to have your Azure virtual network talk to your on premise LAN, chances are you also need to provision a VM to run Active Directory Services and Domain Name System (DNS) for name resolution - I guess, the typical networking stuff.

As with everything else, life is never this ideal, and most organizations have an on premise AD DC and DNS already in place, so the question is "Why can't we simply use Azure as an extension of our network without having to provision these additional services?" The answer is, of course, you can!

To make the setup process happen smoothly, you must first have the following information at hand:

1. IP address and name of your DNS server
2. Internet facing address of your VPN server or appliance
3. Address space and subnet masks for your local area network (in layman's terms, the range of IPs covered by your TCP/IP network)
4. Optional: Address space you want to use to setup your Azure virtual network.
5. An AD account with privileges to join computers to the domain

To get started, logon to the Windows Azure management portal (http://manage.windowsazure.com). Once in the management portal follow these steps:

1. The first task at hand is to identify our on premise network. Click on the Network Services and Local Network to define your on premise network. Once on the page, click on Add a Local Network.


On premise Network (LAN) setup

2. For this example, we will call the network CONTOSO-ONPREM. You will be asked to enter the public IP address for the VPN. For this example, our CONTOSO-ONPREM network's can be reached at 200.100.50.1. Click the checkmark to proceed to the next screen.

LAN details

Note that this is simply an Azure identifier for your on premise network and not necessarily the actual physical name of it.

3. Now, you must define the range of valid IPs of your on premise LAN. Particularly important here is to know the starting IP address of the on premise network and the Classless Inter-Domain Routing (CIDR) method use for IP address allocation.

Address space

We will assume the CONTOSO-ONPREM routing prefix is 192.168.1.1 and that the usable address range is anywhere from 192.168.1.0 to 192.168.1.255 which gives us a subnet mask of 255.255.255.0 (or 24 "1" bits). Please consult with your on premise network administrator if unsure.

4. Once the on premise network has been defined, you can proceed to register the DNS server for by clicking on the DNS Servers option or clicking the +NEW action button on the lower left corner of the portal.

DNS Server registration

In our example, the CONTOSO-ONPREM DNS server can be found at 192.168.1.20. My preference is simply to assign the FQDN name of the DNS server, though, again, this is just used in Azure to identify the object and rather not necessarily related to the domain name of the machine.

5. Provision virtual network. For our example, we will call this network CONTOSO-AZURE.


CONTOSO-AZURE network provisioning
We can the click next to continue. In the next page of the network provisioning, you will be asked to identify the DNS server and establish the VPN connection to the on premise network.


Azure does a pretty cool job at showing a graphical representation of what you are configuring. In the next page, you can pretty much setup your address spaces and subnet masks. However you must add a subnet mask for your Azure gateway, by clicking the Add Subnet button.



For the purpose of our example, our Gateway IP address will be 10.32.0.0.

Click ok to continue.

6. Azure will now provision the network and make the setup based on the choices you selected. Once the network is provisioned, you can now go to the Dashboard and should see the following:


7. Next steps now involve setting up the VPN tunnel on your firewall to communicate to the Azure gateway.  For this you have a choice of downloading a number of ready to go VPN device scripts (supported devices include Cisco, Juniper, and software-based as Microsoft's). If you cannot find your specific device, it's always good to do a search over the Internet as someone has probably already figured out some configuration for the specific model you have. Important as well is to record the Azure network key, which you will need when setting your VPN.

Once you have established connectivity with your on premise VPN, you can begin provisioning your VMs, making sure you select your virtual network in the process.

Hopefully you found this article useful now that Azure is becoming more and more a choice for hosting Microsoft Dynamics GP.

MG.-
Mariano Gomez, MVP
Intelligent Partnerships, LLC
http://www.IntelligentPartnerships.com