Wednesday, March 20, 2013

Show different Header/Footer on different pages of SSRS report

Sometimes, there are requirements to show different Header/ Footer on different pages of the report.
Like say, on the first page, header/ footer of report should be some text and on the second page it should be some different text. Please refer below screenshots.
First Page Footer

Second Page Footer

This can be achieved using the solution as described below:
You need to write a simple expression on the textbox control which is placed on the footer. Here you can utilize expression “Globals!PageNumber” which is used to show page numbers. This expression returns the page number, and we can alter this to show different footer on different pages.
You need to write following expression on the textbox control.
=IIf(cstr(Globals!PageNumber)="1","1111-XYZ (2012/12)      © ABC Sol, 2012","1111-XYZ (2012/12)")
If the report page is the first page, then this expression would set the specified text else it would display alternate text.
General Syntax
=IIF(cstr(Globals!PageNumber)=”<Page Number>”,” <Text to display on the specified Page number> ” , ” <Text to display on other page>”)
Similarly, you can use this expression to show different header on different pages as well.
Hope this article helps!

Thursday, March 14, 2013

iPad Sales Experience for Microsoft Dynamics CRM 2011 Online

Now we can access Dynamic CRM online on an iPad in a supported manner. This means that iPad experience only supports the new look & feel of the updated Polaris forms. Now existing CRM online user turns this on by installing product updates. For new customers in CRM Online, this functionality will be enabled by default.

After installation you’ll be able to see iPad Sales Experience on your iPad by simply hitting the CRM URL on your Safari browser.
 
Things that you must have for using CRM 2011 on your iPad
  • You must have iOS6 installed to use CRM online in your iPad
  • You can only access this from Safari on an iPad
  • For Safari, Dynamics CRM will work with:  Mac OS-X 10.8 (Mountain Lion), Mac OS-X 10.7 (Lion), Mac OS-X 10.6 (Snow Leopard) will offer full support.
Things those are available on the iPad and Functionality in the iPad
  • COLA(Contact, Opportunity, Lead & Account) entities will open up in the new process based forms of Polaris. (screen shots for lead & account are attached at the end of blog)
  • Other Entities in Dashboards & Sub Grids can’t be accessed through Sitemap & while opening other entities they’ll open up in either Mobile Express UI or Read Optimized format. (If you disable the new UI through any security role then the mobile express form is displayed.)
  • Customized forms will always open in Mobile Express. The Home and Most Recently Used buttons are removed, and the navigation pane is collapsed by default when in portrait mode.
  • Whenever the task is created/ updated for the customer you will see the feeds posted on your as well as your followers’ wall in CRM as shown below.
 
 

With what’s new feature you can delete, like and, reply in a comment for the post which is similar to well known social networking site, Facebook. You can also follow Entities like opportunities, Leads so the team will have an update regarding the progress on each customer task; whose functionality is similar to another popular social networking site, twitter.
  • Polaris is designed to load quicker
  • All fields can be easily modified on the iPad including lookup fields. Lookup fields are now available in a dropdown fashion. However, when you click Lookup More Records you get a lookup dialog that’ll appear overlaid on the CRM window.
 
 
 
  • You can work with the Charts and Dashboards like you did within CRM. When on a grid, you can expand the Charts pane to click on a section of the chart, the data in the grid automatically refresh’s for those records that section applies to, and even selects a new field and chart type to report on different data.

The updated Polaris forms have few limitations which if handled correctly are quite manageable. Few limitations which are quite observable I’m listing out as follows.



·         You won’t see any ribbon extensions.

·         You can only add a phone call & task with a record. If you want to add appointment, Email or a Fax you have to switch to classic or add via a sub grid.

·         Unlike the ribbon, the command bar is not customizable.

·         You can see related records but you can’t add new ones. Though this can be achieved using sub-grid or switching back to classic.

·         On Load, on change or On Save event handlers don’t support JavaScript.

·         You cannot create dashboards for the new UI.

·         Customized forms will show up only in a very basic layout. If you have added client scripts to any of the forms listed above, you’ll still be able to access them normally on other devices, but your customizations will not be present on the iPad.

·         You won’t be able to access the process editor for sales (or service) forms.

·         You won’t be able to share records.

·         You won’t be able to access the form editor.

·         Most of the commands that were available in the ribbon at the top of the screen have been moved to the command bar at the bottom of the screen.

·         You will be able to edit records individually, but you won’t be able to edit them in bulk.

·         You can’t re-size a chart, but you can maximize and minimize it.

·         Entities like Quote, Product, Goal, Marketing List, Rollup Query, Rollup Field, & Article do not open on the iPad.
 

[Screen Shots]
 
1.  Dashboard
 

 
2.  Account
 
 
 
 
3. Lead
 
 
 
 
 

 

Wednesday, March 13, 2013

Change the URL of Dynamics CRM provisioned under Office 365


One can now change the URL of Dynamics CRM provisioned under Office 365. This can be done from the login portal under “Admin” section where “manage” option was not previously available.

As shown in the screen below, under Microsoft Dynamics Click on Manage & a new window will open. Here you can change your URL & save the changes. The old url will be in-effective after 24 hours & you won’t be able to access your CRM using old URL. So you need to update your outlook synchronizations, bookmarks or any other related settings.
 






Now you can launch the CRM with the changed URL.
 
 



Hope this article Helps!

Wednesday, March 6, 2013

Aggregate and Grouping functions using LINQ in CRM


As you know, QueryExpression are built as an Object Model. They support all the features of FetchXML except for grouping & aggregates.

FetchXML supports all the features of QueryExpression including grouping & aggregates. Queries here are built as XML statements.

LINQ queries are built using standard language similar to SQL, but internally it uses QueryExpression and hence it is limited to the features of QueryExppression



The QueryExpression class supports complex queries.
The QueryByAttribute class is a simple means to search for entities where attributes matches specified values.

When using LINQ, it returns IQueryable<Entity> which is not a collection & hence we can’t do group-by or aggregate.

IQueryable<Entity> queryDemo = from a in orgServiceContext.AccountSet

                                                              where a.Address1_City.Contains("a")
                   select a; 
 
However, LINQ supports group by in following way.
 

Write a simple LINQ Query

var lnqQuery = from o in orgServiceContext.OpportunitySet

where o.EstimatedValue.Value >= 10000

select new

   {

OpportunityTopic = o.Name,

PotentialCustomer = o.CustomerId,

Rating = o.OpportunityRatingCode

};
 

In another query pass your created query as a list. You can either do a ToList() or you can make your own List like List<Groups> estList = new List<Groups>() where Groups is your custom class with set & get.


Here, we are using ToList() & grouping the collection by Rating.
 

var lnqQuery2 = (from f in lnqQuery.ToList()
 
//Pass the lnqQuery as a list using ToList() & then group by
 

group f by f.Rating into queryGrp
 

let first = queryGrp.First()
 

//selecting only the first record of all grouped record
 

select new

{

Name = first.OpportunityTopic,
 

Rating = first.Rating.Value

});
 

Now if we want to retrieve all the records from the Query Group, then we can simply create a list of query Group using ToList() & iterate through it as shown in below example

var lnqQuery2 = (from f in lnqQuery.ToList()
 

//Pass the lnqQuery as a list using ToList() & then group by
 

group f by f.Rating into queryGrp
 

//Make a list of queryGrp using ToList()
 

select queryGrp.ToList());
 

//Create a DataTable
 

DataTable table = new DataTable();
 

//Add some columns
 

table.Columns.Add("Topic");
 

table.Columns.Add("Cust");
 

table.Columns.Add("Rating");
 

foreach (var e1 in lnqQuery2)
 

{

//iterate through each record grouped with rating
 

foreach (var e2 in e1)

{

//iterate through each individual record that belongs in a rating
 

DataRow dataRow = table.NewRow();
 
dataRow["Topic"] = e2.OpportunityTopic;
 

dataRow["Cust"] = e2.PotentialCustomer.Name;
 

dataRow["Rating"] = e2.Rating;
 

table.Rows.Add(dataRow);

 }

}

//here you have your list in your dataGridView
 

dataGridView1.DataSource = table;

 

Note- Here we are just showing the rating value. You can get the rating by using FormattedValues["opportunityratingcode"]

For more details you can visit here


Hope this article helps!
                                                                                     
 

Tuesday, February 26, 2013

Issue regarding service activities resolved in UR 12


A while ago, we had requirement of sending an email to the users to whom service activity is scheduled. We had created a workflow which would send an email to the resources whenever they have be scheduled in for a service activity. The workflow was supposed to be triggered on create of service activity and on change of the resources field on service activity.

We were facing issues with this workflow that it was getting triggered on update of any and every field on the activity whereas the triggers defined were “on change of the resources field” and “create of SA”.

To check this issue we enabled the audit log for service activity, then updated some other field from the service activity and checked the audit log. In the audit log we came to know that the “Scheduling” event was getting triggered whenever the service activity is updated for any field.

As you can also see in the below given screen shot, the changed fields shows resource field with the same value in Old as well as New values, but actually we had updated the location field.





The service activity was getting re-scheduled (see above screen) even if the resources were not changed. As the Reschedule event was getting triggered and setting the same resource again in the resources field, the workflow was getting triggered again and again.

We have tried this on different MS CRM updates which had roll ups installed on it. There we came to know that this is the Roll up 8 and 11 issue.

To resolve the workflow issue we have written a script on the “on change” event of the “Resources” field. This script would set the pipe separated resource names in a custom field and the workflow will be triggered on the change of that particular custom field. It means when the resources are changed the script will be triggered and set the names in the custom field. And when the name is changed in the custom field our workflow of sending email would be triggered. So that whenever any other field of the service activity is updated the workflow will not be triggered.

After the release of UR 12, we have checked this on CRM with Update Roll up 12 installed on it. There we noticed that this issue has been fixed. As you can in below screen shot, instead of scheduling the service activity every time, only update event has been triggered on change of any field of the service activity.






Hope this article helps!