Saturday, April 1, 2017

Technical overview - Gantt control in Dynamics 365 for operations

In Microsoft Dynamics 365 for operations, form controls are split into logical and physical parts. The physical presentation is HTML, JavaScript and CSS within the browser and the logical state always runs on server which is controlled by X++.
ActiveX, ManagedHost and WPF controls were used in AX2012  to add new custom controls, these  are incompatible with HTML based platform and cannot be used in D3FO.

A new extensible control framework is introduced in D3FO which lets you add custom controls by using HTML5, Javascript and CSS3. The new Gantt control in D3FO is implemented by using extensible control framework.It comes with an advantage that you don’t  have to pay an additional license fee to use the control in your own forms or to extend the control.

In this post let's do a quick technical walkthrough on the various elements of the Gantt control and how to use it on your forms.

 The below diagram shows the basic elements of a Gantt control.
In a Gantt chart we can identify as per below sample diagram:
Lets go through brief summary of each Gantt element:
Activity : This is most important element is a Gantt control. Each activity is allocated its own row in the chart. Activities can form a hierarchy, like a tree, by referencing a parent activity. Two activities can be connected to each other through links. A Gantt activity can be further classified into a Milestone activity, task activity or a summary activity. Technical base is provided  a base enum which holds the type of Gantt control activity 

Below classes which are used to initialise and hold data for the activities for a Gantt control.
Links : Links are used to connect two activities on a Gantt control. The Link information is stored as a data contract in the class GanttControlLink.
The link types are stored in GanttLinkType enumeration:
FF : End to end link
FS : End to start link
SF : Start to End Link
SS : Start to start link

Vertical Markers: This represents a vertical marker on a Gantt control . This information is stored as a data contract in the ganttControlVerticalMarker class. The date time method stores the information of the date/time where the marker should be shown on the control. The text is text which is shown next to the marker.  We can add more than 1 markers on the control.
Calendar and working time intervals : Calendar holds the calendar ID and the working time intervals holds a set of working time information. These are controlled by GanttControlCalendar and GanttControlWorkingTimeInterval classes. This information is stored in below contract classes:

The list of working times in the GanttControlClendar is generated based on the GanttControlWorkingTimeInterval contract as shown in the below contract method

Columns: These are the column on a Gantt chart grid and are stored in the class GanttControlColumn as a contract. The below parm methods store the Columns information. The alignment is controlle d by SysAlignment base enum 

Configurations : Gantt configurations refer to configuration of view and edit behaviour of the Gantt control. There are configuration settings which are stored as a data contract. Use calendars method determines if calendars should be used in the Gantt chart. Switching calendars off have a huge performance benefit. Some configurations for Gantt control are :
  •  Show all links determines if all links should be shown; otherwise only links for the currently selected chain will be shown.
  • Use theme colours Determines if standard AX theme colours should be used for the elements of the chart.
  • Allow move activities Determines if activities are allowed to be moved using drag/drop.
  • Allow resize activities Determines if activities are allowed to be resized using drag/drop.
  • Allow completion change Determines if activities can have the completion percentage set using drag/drop.
  • Vertical move mode Determines if/how activities are allowed to be moved vertically.
Below list of methods show the configurations which can be defined when initialising the Gantt configuration.  
Gantt control timescales : Represents settings for a time scale on a Gantt chart. These are stored in the GanttControlConfiguration contract. The below methods are used in the contract

Gantt Control : This is the Gantt control class which stores the information of all the Gantt elements. The class name is GanttControl and it has methods to store the Gantt elements information. If you look at this class then you will see that this stores most of the Gantt elements information as a List. 

Vertical markers
How it all works together: We can add a new Gantt control on the form by selecting it from the list of control available when we add a new control
We need to define auto declaration as true

 We can now set/populate to the GanttControl class methods using this control and load the gantt elements. A very good example is shown on the tutorial_Gantt form shipped in application foundation

All the activities are added to a list and
And then the list is assigned in the GanttControl class

To load the GanttControl we have to write the X++ code to create and populate the contracts, lists and initliaze the Gantt classes. The complete code sample can be referenced in tutorial_gantt form which shows the Gantt control as below:


There is much more to what we can do with the Gantt control classes and with the power of extensible control framework. It provides a great platform for vendors and ISV's to build amazing Gantt extensions and advanced controls.



Saturday, March 11, 2017

Consuming custom common data model entity in powerapps

In the previous post we saw how we can create a new custom entity in common data model. In this post let's do a quick walkthrough of how we can consume it in powerApps and create/update data for that entity from powerapp. 

In the bottom left corner of the powerapp portal you will find the button to create a new app

Select if you want to use the powerapps studio for windows or the powerapps studio for web to create the new app. In this example I choose Powerapp studio for Web

Microsoft provides out of the box templates for creating apps. Let's create a simple phone layout app for connecting to CDM database via Common Data Service 

You will land on the connections page. Here we can see the CDM database we created in previous post. Once you select the CDM DB then you can see the desired entity . Notice we can see our custom "Approved vendors" entity

Click Connect

The app building service will run and take around a minute to build a default app for the selected entity

You will land in the designer window of the created app. The system created a basic 3 page app (based on the template we selected) to view and edit the data of the entity and also shows the data in the preview.  

We can navigate to different pages to see how it looks

Now let's save the app on the cloud, to do this go to  File -->  Save as --> Select the cloud option and give it a name and save it

Once this is finished you can access the app from other devices.
I installed powerApps on my Android phone and logged in. The new app was visible under My apps.

On opening the App I can view the data on my mobile phone.
Below are screenshots from my mobile

Notice that the vendor ID field shows the lookup by fetching the data from the CDM vendors entity

   Once the record is saved we can edit it again

We can go back to CDM database and view the data of the entity.  The new records we created from the App is visible here.

Users can build their own apps without writing a single line of code by leveraging the out of box available templates. Store them on Cloud and share with other users of their company.
This is a big game changer as smart users can now leverage all the tools and power from the cloud to be more productive and use the systems in much powerful and smarter ways.

Saturday, March 4, 2017

Common data model entities - overview

The Common Data Service is a cloud base business application platform. This platform provides a rich and productive development platform though Common Data Model which is a store of common business entities like customers, vendors, purchase orders, products and many more.
There are integration capabilities for importing data from multiple sources like Dynamics 365 for sales, Dynamics 365 for Operations, any other business application or data source. We can also create our own new custom entities and establish relation with existing entities. 
Common data model also act as a a platform for powerusers to leverage the tools like Power BI, Powerapps and Flow to Meausre, Act and Automate the business data. These are the three key objectives on which the whole new Microsoft innovation is based on.   
Lets do a quick walkthrough on creating a new entity in common data model and then publishing data in this entity from excel followed by exporting this data from CDM.
When you login to powerapps portal you will need to first create a new environment to access the CDM entities. To know more about environment refer to working with environments .
To create your own enviroment in powerapps portal click on the "get started" button
Click on create new environment and give a name and select a region. It takes around a minute to setup the new environemnt and once it is done you can see that your current environment is set to the one which you created.
Now we can view the available entities from the Entities button on the left hand pane . CDM ships around 60+ entities. The details of all the entities and there relationship can be found in the whitepaper available at CDMEntityReference document
To create a new entity click on "New entity" button and give it a name. Let's call it "Approved vendors" and enter a  description and click next. You will observe it is a very nice self guided experience.
Once the entity is created, it is visible in the list of entities.
Lets add new fields in this entity. To do this, click on "Add field" and enter the details. Let's call it Vendor approval code.
We can also specify additional properties as highlighted below.
Once the field is created, it is visible in the list of fields in the entity.
Now let's create a new field which is linked to the existing vendor entities. To do that we can go to relationship tab.
Add a new relation with the existing vendor entity.
Now you can see that the vendor ID is visible on the entity fields. The type of this field is a lookup due to the relationship created for it.
At this stage as we have only created the entity schema, there is no data in the entity. This can be seen from the "Data" group as shown below
Now we can open this entity in excel by clicking on the "open in excel" button. The powerapp office add-in will also load.
Here we can start entering the data. You will see that the add-in automatically pulls the current data in the related field of vendor ID.
After entering the data we can publish it to CDM by using the publish button.
 Once the data is published in CDM we can see the notification in the add in.
Lets go back to CDM portal and view the data in the entity.
Upon refreshing, the data we published from Excel can be seen.
We can also export data of  the current entity by clicking on export data button.
Once the data is exported you can download the package
In the package you get a csv file and 2 XML files as below.
Data exported in the csv file as shown below.
As you see, Microsoft has done an amazing job in making the whole experience self guided so that the CDM platform can be leverged by a large number of professionals and not just developers.