Tampilkan postingan dengan label Roadmap. Tampilkan semua postingan
Tampilkan postingan dengan label Roadmap. Tampilkan semua postingan

Kamis, 30 Maret 2017

Microsoft Dynamics GP Roadmap Update

It's been a week since I got back from GPUG Amplify 2017 in Anaheim, California and tell you the truth, I am all the more excited about the future of Microsoft Dynamics GP than a lot of you might be. With all these constant rumors of the product going away or not getting the necessary TLC from Microsoft I am left to wonder, where have I heard this before :-)

The truth is, Dynamics GP is alive and well, thank you! And will be for many many years to come. As it's been unveiled in Anaheim, the next couple of years - Microsoft has been producing the roadmap for only 2 years at a time ever since GP 2010 - promise to bring some really cool enhancements to the product, based on entries collected via Microsoft Connect.

In particular, GP 2018 (shipping sometimes before the end of Q4) will be introducing 3 major themes that traverse the spectrum of features you would expect from an application born in the on-premise world, but that has effectively cross over to power customers looking for a solid cloud solution. In this iteration, Microsoft looks to solidify the workflow capabilities with what it has now dubbed Workflow 4.0, all the while introducing some optimizations to the Financial series, Human Resources and Payroll, Document Attach, and overall UX (user experience). In strengthening the cloud capabilities, Microsoft looks to increase the integration with the Power Suite (Power BI, Power Query, Power Apps, etc.).


While in Anaheim, I had a chance to see a bit more about the details. The following is a list of features that the Development team in Fargo is expecting to deliver:


Some highlights include adding reminder emails to Workflow, this is, a user will receive reminder emails leading up to the due date of specific tasks. This is a very cool feature and something customers were asking for.

The HRP enhancements include some beefing up of the Garnishments capabilities along with the ability to change Department Codes in Payroll.

As far as the user experience concerns, auto-complete moves to the web client after being a desktop feature for quite some time now. I am also very excited about the introduction (finally!) of the HTML 5 controls for Visual Studio Tools which now will allow developers who had WinForms to expose these once again to the Dynamics GP web client.

The Dev team has made a big push to get Document Attach out to the remaining portions of the application where it was missing: GL Transaction Entry, POP Receiving Entry and now the inquiry windows.

As far as features powering the cloud, Dynamics GP receives enhancements to its OData Services, a brand new GP Power BI content pack, and a number of FLOW templates. More information about Microsoft Flow here.

Until next post,

MG.-
Mariano Gomez, MVP

Kamis, 29 September 2016

Microsoft reIMAGINE 2016 - Day 1 (Part 1)


Microsoft reIMAGINE 2016 hosted by Dynamic Communities is now over, but I did not want to let this week go by without giving you an account of my experiences at the conference, which sure brought a lot of surprises to all the partners in attendance.

Monday, September 19, 2016 - Part 1

After having an adventurous Sunday, where I had the opportunity to prep my sessions with David, attend a car show, mingle with friends and coworkers, and dine at Passage to India, I was now prepared to get the real conference schedule going.

The day started out with the traditional partner breakfast at the Hilton Garden in. I believe there was confusion with breakfast locations, because it (breakfast) was also being served at the Microsoft campus, with the starting time there being the only caveat as security restrictions there had us showing up only after 8:00 AM.

At the Hilton Garden, tables were setup by company, so I had a chance to have breakfast with some of my Mekorma coworkers in attendance and a few folks from a different company who did not have a table tag assigned, but decided to join us anyways.

Breakfast at the Hilton Garden Inn
After breakfast, David and I hopped the bus over to the Microsoft campus and quickly found a spot up front in the Morton conference room. Given our tendency to take pictures, David and I conspired with Bob McAdam (twitter: @4mcadam) and Pam Misialek (twitter: @PamMisialek), hosts of the General Session, to get a picture of the over 400 partners in attendance, prior to the beginning of the session. Now, one thing is to get a picture, but getting all partners to wave for the camera? That's a whole different ball game. It worked!

General Session in the Morton Room at Microsoft 
The session began just after our camera stunt and things would get downright interesting from there on. The welcome pleasantries were up and over in a few minutes and gave way to Joe Carroll, introducing new Microsoft Dynamics GP Advanced Distribution and Advanced HR/P exams and the new Microsoft Dynamics GP Advanced Credentialed Professional certification. Having been a council member of the Association of Dynamics Professionals for a bit over a year, I cannot stress the importance of these exams to the Dynamics GP community at large. If you haven't signed up to take any of the exams, please do so. You are missing out on a really significant opportunity to distinguish yourself from the rest.

Association of Dynamics Professionals: new GP exams and credential


Next up was Errol Schoenfish (twitter: @ifErrolCanDoIt). Errol's presentation centered on the current cloud momentum, presenting some statistics predicting 6 times faster growth in SMB spending on business apps in the cloud versus on premises over the next three years (2015–2018).

Errol also presented Microsoft's SMB offerings corresponding to the 3 major cloud models, IaaS (Infrastructure as a Service), PaaS (Platform as a Service) and SaaS (Software as a Service), demonstrating where each product fits within the scope of those models.

SMB cloud offerings

More importantly, the discussion went in the direction of Microsoft's roadmap for the SMB products. I have to say, this is the first time I have seen a side-by-side roadmap for all the SMB offerings and it was a beauty to watch.
Microsoft SMB offerings roadmap

The key message delivered to the Microsoft Dynamics GP partners in attendance centered around two premises: a) Dynamics GP will only go away if partners are not selling it, and b) Microsoft Dynamics GP development will continue beyond the next 3 years at the very least. Errol reiterated Microsoft's support behind the current market offerings. It's also important to note that Dynamics 365, formerly Project Madeira, roadmap was introduced as part of the stack.

Microsoft then presented its US Dynamics SMB sales team org chart and in particular, introduced Anjali Justus (twitter: @AnjaliJustus), who is the new GP Sales Manager. This was well received news by all partners as it shows Microsoft's renewed commitment to the channel. A major point here is, Microsoft recruited all these folks from competitors like NetSuite and Infor.

US Dynamics SMB Org Chart

Next on stage were the awesome quartet of Chad Sogge (twitter: @csogge), Jennifer Ranz (twitter: @jenniferranz1), Jodi Christiansen (twitter: @JodiChrist), and Brian Mayer (can someone please get this guy a Twitter account?) to talk about and demonstrate GP 2016 and GP 2016 R2 features. Needless to say, they are always flawless and delivered an excellent presentation. To note, some of the features presented for GP 2016 R2 (subject to change) are as follow:

Series
Feature
SystemSmartList favorite protection
SystemSmartList Designer SmartLists available in Advanced
Lookups
DistributionDisplay Tax Percent for Historical Transactions
DistributionCancel PO when linked to a Requisition
DistributionPA Timesheet Status Report
FinancialsGL Distribution Line Display Expanded
FinancialsCredit Limit Warning Calculation for unposted Credit Documents
FinancialsSafePay file displays Check Name from the Check
FinancialsPOP to FA Link to Include Taxes
FinancialsSave Fixed Asset ID with suffix
ServicesPower BI on Web Client Home page

Sponsoring partners also had their spotlight at the event, with Greenshades Software, eOne Solutions, and Binary Stream delivering the interludes. Greenshades provided the kicker laugh with their Captain Compliance skit.



Special mention: Martin Olsen delivered a really cool skit to promote SmartConnect, but I don't have a video of it, so I will try to incorporate the slides and the text in a future article.

As this was a jam packed morning, I have decided to split day one into couple articles as it will be easier to follow. Please stay put for the conclusion of Day 1.

Until next post!

MG.-
Mariano Gomez, MVP

Rabu, 29 Oktober 2014

Microsoft Dynamics GP 2015 Developer's Preview: .NET Framework Interoperability - Part 3

In part 2 of the series, I delivered a brief primer on the service architecture in Microsoft Dynamics GP 2015 and how you are able to consume services natively created with Dexterity. There are two types of services that can be created: services that wrap existing windows and forms functionality, i.e., creating a customer; and services that can wrap around existing sanScript procedures, i.e, retrieving customer information. The truth is, none of that stuff would be possible without the ability to interoperate with the Microsoft .NET Framework.

Today, I'm going to show you some of the .NET interop capabilities built into Dexterity 14.0 and how these can enhance the user experience and your application integration capabilities. The example used in this post is based on my previous article, Building a COM Interop Assembly to use with Microsoft Dexterity, which showed how we had to leverage .NET's ability to expose an assembly via COM interfaces, so we could reference its methods using Dexterity. In that particular example, I built some standard methods to expose the sine, cosine, and tangent trigonometric functions to a Dexterity application. This time around, I will show how to build the same functionality taking full advantage of Dexterity's new .NET interop capabilities.

The user experience will be slightly different this time. In addition to a window that will allow you to calculate any of the trigonometric functions on a specific angle (entered in degrees), we will display a .NET form showing a visual representation of that angle. The .NET form will be dynamically built and displayed from Dexterity using the methods and properties provided by the Form class (System.Windows.Forms) and the visual drawings will be delivered using the classes exposed in the System.Drawing namespace.

1. The first things we must do is incorporate references to the corresponding assemblies for the Forms class and Drawing namespaces. As developer, the first thing you will notice is the enhancements to Dexterity's Library Definition window, which now allows for the selection of a .NET Assembly library type.

Library Definition
Once the type has been selected, you can browse out to the different .NET assemblies loaded on your operating system.

.NET Assemblies
In particular, what I like is the ability to select the .NET Framework assembly that I want to work with directly, as opposed to having to compile my application for a specific Framework version as you normally would do with Visual Studio.

Resource Explorer will now reflect the different .NET namespaces selected for you application.

Resource Explorer

2. Since this article assumes some familiarity with Dexterity, I'm not going to dive into the process of building the form and window, but rather point out that it follows the same layout and properties I used in my previous article.

Form and Window Definition
The only "rarity" here is I added a local field called '(L) GraphicAngleForm' that will serve as a generic reference to the .NET form we will dynamically create. The '(L) Conversion' and '(L) Angle' fields are currency fields and are formatted with two decimals and unsigned (DLR11_U2).

Generic Reference field

3. The code for our '(L) Sine' button will look something like this.

MGB_Trigonometric_Test l_Sine_CHG
// Created by Mariano Gomez, MVP
// This code is licensed under the Creative Commons
// Attribution-NonCommercial-ShareAlike 3.5 Generic license.
using System;
using System.Windows.Forms;
using System.Drawing;

local currency l_angle;
local Form f;

'(L) Prompt' = "The Sin(%1°) value is ";
substitute '(L) Prompt', str('(L) Angle');

// calculate the sine value of the angle after converting it to radians
'(L) Conversion' = Math.Sin(Math.PI * '(L) Angle' / 180.0);

if empty('(L) GraphicAngleForm') then
f = new Form();
'(L) GraphicAngleForm' = f;

f.Text = "Graphical Representation of the Angle entered";
f.BackColor = Color.White;

// Set the size of the form
f.ClientSize = new Size(640, 480);

// Make the form a fixed size
f.MaximumSize = f.ClientSize;
f.MinimumSize = f.ClientSize;

// event handlers
f.Paint += PaintAngle of form MGB_Trigonometric_Test;
f.FormClosed += CloseDrawingForm of form MGB_Trigonometric_Test;

end if;

// show and activate our .NET form
'(L) GraphicAngleForm'.Show();
'(L) GraphicAngleForm'.Activate();

When you really look at the code, the first thing you will notice is the first 3 lines. sanScript now implements the using statement just like C#. sanScript has also been extended to use the implement statement for dynamically referencing an assembly.

using System;
using System.Windows.Forms;
using System.Drawing;


Next we can then calculate the sine of the angle in radians by simply calling the Math.Sin() method in the System namespace (the System namespace is part of the Microsoft Core Library, mscorlib.dll). We also reference the Math.PI constant to perform the conversion of the angle from degrees to radians.

// calculate the sine value of the angle after converting it to radians
'(L) Conversion' = Math.Sin(Math.PI * '(L) Angle' / 180.0);


Once we have the angle converted and displayed in the '(L) Conversion' field, we can proceed to create the form by instantiating the Form class - in reality, this part is no different than what you would normally do for COM classes - and setting some properties for the .NET form we want to display. Once we have set the size of the window, we need to create some event handlers for when the .NET form open and closes. As you can see in the code, Dexterity now implements event handlers through the use of the += operator.

// event handlers
f.Paint += PaintAngle of form MGB_Trigonometric_Test;
f.FormClosed += CloseDrawingForm of form MGB_Trigonometric_Test;


Our event handlers in this case will be the PaintAngle (on .NET form open) and CloseDrawingForm (on .NET form close). The PaintAngle event handler will display the actual graphical representation of the angle, and the CloseDrawingForm event handler will do some cleanup for us. Now, as you may suspect, these event handlers are implemented as procedure scripts to the MGB_Trigonometric_Test form (form procedures). So let's take a look at the PaintAngle form procedure:

PrintAngle
// Created by Mariano Gomez, MVP
// This code is licensed under the Creative Commons
// Attribution-NonCommercial-ShareAlike 3.5 Generic license.
using System;
using System.Windows.Forms;
using System.Drawing;

inout System.Object sender;
inout PaintEventArgs e;

local Pen bp, rp;
local Color c;

// Get the color
c = Color.Blue;

// Create the blue pen
bp = new Pen(c, 2);

e.Graphics.DrawLine(bp, 320, 240, 520, 240);
e.Graphics.DrawLine(bp, 320, 240, 320 + Math.Cos('(L) Conversion' of window MGB_Trigonometric_Test) * 200, 240
- Math.Sin('(L) Conversion' of window MGB_Trigonometric_Test) * 200);

c = Color.Red;
rp = new Pen(c, 2);

e.Graphics.DrawEllipse(rp, 300, 220, 40, 40);

Again, the mechanics here is not so much the important part, but rather to highlight the clever way in which the event handler parameters are declared for the sender of the event and the event arguments being passed by the sender of the event. For this the Dexterity team chose to implement inout parameters.

Overall the PrintAngle procedure simply draws two lines and a circle. The first line is the base line of the angle and will simply be a horizontal line. The second line actually shows the displacement in reference to the base line to give the actual angle representation. This all looks something like this when the code is executed:

Angle Calculator
Having the ability to leverage .NET capabilities directly from Dexterity has now opened up a new realm of possibilities for Microsoft Dynamics GP business application developers. Applications that were once thought to be out of reach or required complex workarounds are now a thing of the past. Code portability is now much more compact and robust than before. The good part is, Dexterity developers do not need relearn any development patterns and/or be exposed to steep learning curves. All the .NET Framework documentation is available online with tons of sample code to go along.



This article is part of the Microsoft Dynamics GP 2015 Developer's Preview series.

Microsoft Dynamics GP 2015 Developer's Preview: Loading the VHD image - Part 1
Microsoft Dynamics GP 2015 Developer's Preview: Working with Sample URIs - Part 2

Until next post!

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

Selasa, 23 September 2014

Microsoft Dynamics GP 2015 Developer's Preview: Working with Sample URIs - Part 2

Microsoft Dynamics GP 2015 Developer's Preview: Working with Sample URIs - Part 2

In the part 1 video, I explained how to mount the Microsoft Dynamics GP 2015 Developer's Preview virtual hard disk using Hyper-V. My intent was to provide a part two showing how to mount the VHD file on Windows Azure, but realized it would take more time than I wanted to invest in really getting the point across on many of the aspects around the new service architecture components, so I have decided to forgo the Azure portion until some other day.

Today, I will focus on some of the sample service requests provided on the Developer's preview image, which can be found in the Example Service Requests.txt file available on the desktop of the image.

Before however, I wanted to touch base on REpresentational State Transfer (REST) services. REST, a term first coined by Roy Fielding (a principle author of the HTTP specification) in his doctoral dissertation, is an architectural style that treats networked application states and functionality as resources, which share a uniform interface. This architectural style differs in many ways from that of the Remote Procedure Call (RPC) architecture where services reside on the network and are invoked using request parameters and control data contained within messages.

Some of the basic principles governing REST services are:

  • Actors interact with resources, and resources are anything that can be named and represented. Each resource can be addressed via a unique Uniform Resource Identifier (URI).
  • Interaction with resources (located through their unique URIs) is accomplished using a uniform interface of the HTTP standard verbs (GET, POST, PUT, and DELETE). Also important in the interaction is the declaration of the resource's media type, which is designated using the HTTP Content-Type header. (XHTML, XML, JPG, PNG, and JSON are some well-known media types.)
  • Resources are self-descriptive. All the information necessary to process a request on a resource is contained inside the request itself (which allows services to be stateless).
  • Resources contain links to other resources (hyper-media).

While REST is defined by its author using strict architectural principles, the term is often used loosely to describe any simple URI-based request to a specific domain over HTTP without the use of an additional messaging layer such as Simple Object Access Protocol (SOAP). Implementations adhering to the strict principles of REST are often referred to as being “RESTful,” while those which follow a loose adherence are called “REST-Like”. Microsoft Dynamics GP Services can be considered REST-like (See Chapter 1: Microsoft Dynamics GP Service, page 3 of the Microsoft Dynamics GP Service Based Architecture Preview documentation).

A quick sample

As an example, imagine you need to build a service that interacts with the Microsoft Dynamics GP item master list: basically, a service that could produce the list of items and/or information about a specific item in the list, from a specific company database - in this case Fabrikam - and to be more precise, that company database resides within a specific tenant. Technically speaking, this service could also add or retrieve data for an item to and from the item master in Fabrikam, on the current tenant.

When building a REST-like service, you can must answer 3 basic questions:


  • What resources you are trying to define or expose
  • How are you going to represent the resources (URIs)
  • What actions are you going to support for each URI (HTTP verbs).


  • For our example, the resources will be defined by the hierarchy Tenants(Name:tenant_name)/Companies(company_name)/Items(item_number). The URIs are really dependent on where the service is going to be hosted, so for example, this could be in the form of http://somedomain.com:port_number/gpservice/ followed by the above hierarchy. The next thing in line is then to understand what HTTP verbs or actions are supported with each URI.

    Next, we need to determine the URIs for each resource. Right now we only need to determine the relative URIs since the absolute URI will be determined by where we host the service. The item master will be the root URI of the service (/). Using this syntax, /Items() will return all of items contained in the item master; /Items({ItemNumber}) will be the URI for each item within the item master.

    Under the current Developer's preview implementation, if you wanted to retrieve information about an item (HTTP GET), you would then use the following URI notation from your browser:

    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Items(2GPROC)

    By copy and pasting the above URL in the browser, the service call will generate a JavaScript Object Notation file (.json), as shown below:

    Items(2GPROC).json
    {
    "Status": {
    "CorrelationId": "d3056b1bb9d84775ad269abfa09cfa77",
    "Code": 200
    },
    "Payload": {
    "Trace": [],
    "ItemNumber": "2GPROC",
    "ItemDescription": "2 Ghz Processor",
    "NoteIndex": 333.0,
    "ItemShortName": "",
    "ItemType": "SalesInventory",
    "ItemGenericDescription": "",
    "StandardCost": 0.0,
    "CurrentCost": 250.0,
    "ItemShippingWeight": 0.0,
    "DecimalPlacesQTYS": "NotUsed",
    "DecimalPlacesCurrency": "One",
    "ItemTaxScheduleID": "",
    "TaxOptions": "Nontaxable",
    "IVIVIndex": 18,
    "IVIVOffsetIndex": 18,
    "IVCOGSIndex": 137,
    "IVSalesIndex": 112,
    "IVSalesDiscountsIndex": 128,
    "IVSalesReturnsIndex": 134,
    "IVInUseIndex": 0,
    "IVInServiceIndex": 141,
    "IVDamagedIndex": 141,
    "IVVariancesIndex": 783,
    "DropShipIndex": 445,
    "PurchasePriceVarianceIndex": 446,
    "UnrealizedPurchasePriceVarianceIndex": 446,
    "InventoryReturnsIndex": 450,
    "AssemblyVarianceIndex": 0,
    "ItemClassCode": "RM-ACT",
    "ItemTrackingOption": 1,
    "LotType": "",
    "KeepPeriodHistory": true,
    "KeepTrxHistory": true,
    "KeepCalendarHistory": true,
    "KeepDistributionHistory": true,
    "AllowBackOrders": true,
    "ValuationMethod": "FIFOPerpetual",
    "UOfMSchedule": "EACH",
    "AlternateItem1": "",
    "AlternateItem2": "",
    "MasterRecordType": 1,
    "ModifiedDate": "2017-05-21T00:00:00",
    "CreatedDate": "2017-05-21T00:00:00",
    "WarrantyDays": 0,
    "PriceLevel": "",
    "LocationCode": "",
    "PurchInflationIndex": 0,
    "PurchMonetaryCorrectionIndex": 0,
    "InventoryInflationIndex": 0,
    "InventoryMonetaryCorrectionIndex": 0,
    "COGSInflationIndex": 0,
    "COGSMonetaryCorrectionIndex": 0,
    "ItemCode": "",
    "TaxCommodityCode": "",
    "PriceGroup": "BUY",
    "PriceMethod": "CurrencyAmount",
    "PurchasingUOfM": "",
    "SellingUOfM": "",
    "KitCOGSAccountSource": "FromComponentItem",
    "LastGeneratedSerialNumber": "",
    "ABCCode": "B",
    "RevalueInventory": true,
    "TolerancePercentage": 0.0,
    "PurchaseItemTaxScheduleID": "",
    "PurchaseTaxOptions": "NonTaxable",
    "ItemPlanningType": "Normal",
    "StatisticalValuePercentage": 0.0,
    "CountryOrigin": "",
    "Inactive": false,
    "MinShelfLife1": 0,
    "MinShelfLife2": 0,
    "IncludeinDemandPlanning": false,
    "LotExpireWarning": true,
    "LotExpireWarningDays": 0,
    "LastGeneratedLotNumber": "",
    "LotSplitQuantity": 0.0,
    "UseQtyOverageTolerance": false,
    "UseQtyShortageTolerance": false,
    "QtyOverageTolerancePercentage": 0.0,
    "QtyShortageTolerancePercentage": 0.0,
    "IVSTDCostRevaluationIndex": 0,
    "UserCategoryValues1": "",
    "UserCategoryValues2": "",
    "UserCategoryValues3": "",
    "UserCategoryValues4": "",
    "UserCategoryValues5": "",
    "UserCategoryValues6": ""
    }
    }

    You can also retrieve an XML payload by specifying the extension in the URI, as follows:

    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Items(2GPROC).xml

    Here are other examples of URI notations to perform various service calls to retrieve data from Microsoft Dynamics GP, as provided in the Developer's preview:

    Checking the status of the GP Service.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Utility/Ping

    Obtaining help on supported HTTP verbs.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Utility/Help

    Retrieve information on customer AARONFIT0001 (Aaron Fitz Electrical).
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Customers(AARONFIT0001)

    Retrieve information on customer COMPUTER0001(Computer World).
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Customers(COMPUTER0001)

    Retrieve information on item number 100XLG.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Items(100XLG)

    Retrieve information on site 101G.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Sites(101G)

    Retrieve information on site 104G.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Sites(104G)

    Retrieve information on all companies under the current tenant.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Companies()

    Retrieve information about Fabrikam, Inc. under the current tenant.
    http://localhost:8084/GPService/Tenants(Name=DefaultTenant)/Companies(Fabrikam,%20Inc.)/Companies(TWO)

    I want to mention that there 2 HTML files provided with the preview, which contain JavaScript sample code showing how to access the Dynamics GP Service. These can be found under the Samples folder. The scripts show how to make use of the HTTP POST, HTTP PATCH, and HTTP DELETE actions to create a new, and update and delete an existing record in Microsoft Dynamics GP respectively.

    There's also a .NET sample application that show how to consume a GP Service as well. This sample can be loaded with Visual Studio in the Developer's Preview image.

    While this is all good, In my next article I will show how to build a Microsoft Dexterity-based service that can be consumed by other applications.

    Until next post!

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

    Rabu, 10 September 2014

    Open letter to Jeff Edwards, Microsoft Dynamics Partner Strategy

    Open letter to Jeff Edwards, Microsoft Dynamics Partner Strategy

    Mr. Edwards,

    I read your lines in response to MVP Mark Polino's article No upside to Microsoft's decision to kill Dynamics GP exams on MSDynamicsWorld and I really hope you get to my article Why the end of Microsoft Dynamics GP exam certifications is bad news for customers at some point for an along-the-lines perspective on the issue.

    Nonetheless, my objective here today is to offer some direct comments and frankly to keep an open line of communication (there's probably nothing to debate) on the subject of the retirement of ERP certifications - primarily Dynamics GP which is my area of expertise.

    Counter-argument 1:
    On the shift to the Cloud - We are not saying it is Azure/O365 in place of GP, we are saying GP AND Azure/O365. The integrated solution provides true value to customers and differentiation for our partners. Issues like use tax, approval workflow and cash flow projections are absolutely critical, and they are improved by the use of GP working together with O365.

    I happen to be, probably, one of the most tech savvy MVPs in the Dynamics GP pool of MVPs, with over 15 deployments on Azure along with Office 365 and even Azure Virtual Network to On-Premise network integrations. In fact, I have written a number of articles featured on this site on the subject of cloud and ERP deployments and continue to be one of its biggest proponents.

    The real benefit of ERP cloud deployments - at least for my clients - is time-to-execution. After all, being able to complete an implementation project on average 4 to 6 weeks earlier than your typical on premise deployment has its merits and allows companies to quickly realize a ROI, not having to worry about the infrastructure on which their solution will be deployed. When you really get past this fact, the second biggest driver to a cloud deployment is the expertise of the individuals that allowed the client to realize their solution much quicker: BUSINESS APPLICATIONS SPECIALISTS. Let's not kid ourselves, ERP systems are unlike any other type of technology in the market. You simply cannot take a Windows Server guy and make him/her a manufacturing specialist or a project accounting or tax specialist. It just doesn't work! Despite all the arguments stating "certifications don't make experts", a certification, current or otherwise, is still a vehicle used by customers to understand NOT THE LEVEL OF EXPERTISE, but the LEVEL OF UNDERSTANDING of any given individual on a particular business application subject. For example, if my client perceives my certifications to be strictly technical, then they have a right to question my functional abilities and vice versa.

    Counter-argument 2:
    On your statement that the Dynamics team does not own the expense of their exams. We certainly wish this was the case, but it was not. We had complete budgetary and P&L responsibility for all the exams we created. As stated, we looked at our budget and the current skills and needs in the channel and decided more training, available online, covering more of the integrated Microsoft solution, was a better use of our budget and would have a more positive impact on both our Partners' business and customer success.

    Respectfully, I sense a degree of contradiction in this argument. I fail to understand how rescinding the certifications directly improve building "current skills and needs in the channel", and furthermore how can it not have an effect your own bottom line (more on that later). If Microsoft's goal now is skill-building and targeting of specific needs, the better alternative, in my humble view, would have been to work with said channel to understand how the certifications needed to change or improve in response to your own goals, all within the budget you had. There are various entities who would have gladly worked with Microsoft - for free, even - to ensure the certifications were adequate and sufficient enough, namely Dynamic Partner Connections, the GP User Group (GPUG), and the always willing Microsoft Dynamics GP MVP group. Strangely enough, the collaboration model I described seems to exist and work well for other Microsoft divisions. For example, the SQL Server team is one that works closely with special interest groups and MVPs to ensure the certification is a benefit to the community of SQL Server professionals.

    How are you going to ensure that more online training is being assimilated by the channel when your stated intention is to have a "more positive impact on both our Partner's business and customer success". After all, you cannot control what you can't measure, correct? The bottom line is, Microsoft have the mechanisms in place to ensure the assimilation of other technologies - to use your example, Azure and Office 365. If your goal is to ensure partners are driving customers to the cloud and cloud-based solutions, that's what the partner channel competency program is for. Ironically, partner competency in a specific technology vertical is intrinsically tied to individuals within the organization attaining certifications in those very areas.

    Polino is also correct in stating that we do pay for these exams which should offset to some degree the cost of producing them. If cost was a concern for Microsoft, why not raise the retail price of the exam as opposed to simply doing away with them? After all, those of us who really value the Microsoft Certified Professional program and achieving a certification to prove to our clients that we've put in the sweat would have gladly paid for them. As an anecdote, we had been offering vouchers to our consultants for upgrading their certifications to the most current product release before news of cancellation hit the streets. I would also venture to say, that most responsible partners offer some form of incentive to their consulting and delivery teams, monetary or otherwise, to maintain existing and attain new certifications that can only benefit the partner organization - what's that word again? Competency!

    Counter-argument 3:
    With the expansion of the solution, I would argue it is not easier to become a partner.... We did try to make it cheaper by dropping the cost of unlimited online training from $6,000 to $1,000. As far as a flood of new, untrained entrants, we instituted a requirement for a business plan and proof of investment for any partner signing up. This must be approved by the US Partner Director. New partners coming into the eco-system have dropped by 70% over the last two years, as was our intent. The new partners that do get in offer unique value and are committed to training their people to deliver value to customers

    I find it very interesting that you mention a "business plan and proof of investment" as a mechanism to vet new entrants. In one of my management classes in the MIS/Technology Management program I graduated from, I learned that business plans and funding are only the starting point for any business and that most companies fail where it matters most: sales and execution.

    As I am sure you are aware of, there are partner organizations that can sell and there are partner organizations that can execute or deliver. Rarely do you find the one organization that is very good at both. Mea culpa!

    If there is a silver line here, you have now opened up the floodgates to the return of the boutique consulting firm. After all, large partners can now focus on selling, selling, selling (which is got to be at the top of the list of drivers behind this move) without the added pressure of maintaining a pool of certified individuals just to keep up with some SPA requirement. Less partners, less administration, more revenue, more to the bottom line... I get it!

    The flipside of that coin is larger partner firms tend to outsource the delivery to boutique firms specializing in implementing. Case in point, 80% of my organization's business derives from professional services delivered on behalf of these larger firms, so I may not fit the bill of a traditional revenue partner on your books. The bottom line of this already lengthy explanation is, Microsoft and its larger ERP partner organizations need SOMEONE to deliver such implementations so customers can smile, and Microsoft and, conceivably, the selling partner can perceive those coveted and profitable maintenance plan renewals and margins, respectively.

    Then, why not give us the small guys a chance to continue differentiating ourselves in the ecosystem? After all, I would want to believe that your large (selling) partners also have a vested interest in seeing their entrusted customers' projects being done by individuals who have at least gone through training and completed a product certification. I will say it again, I'M WILLING TO PAY MORE if that's what it takes, but consider bringing back those certifications for the greater good of the community of customers and partners.

    I promise I won't hold my breath on seeing any of my humble views being entertained at any level within Microsoft, but hope you at least get a chance to read them.

    Sincerely,

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

    Kamis, 28 Agustus 2014

    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