Inogic is a hub of like minded professionals who believe in innovativeness and are committed to putting our time and efforts to R & D on Dynamics CRM.We endeavor to share some of our work on this blog by introducing Tips, Tricks and products from our labs.
Monday, May 2, 2011
How to pass field values to Form
To open the new record form
https://<ServerUrl>/main.aspx?etn=<entity type code>&pagetype=entityrecord
Pass field values as query string parameters
http://<ServerUrl>/main.aspx?etn=<entity type code>&pagetype=entityrecord&extraqs=<fieldschemaname>=<value>
If you need to pass the multiple field values then just append those field-value combination string at the end with the “&” as a separator.
Note while generating the URL you need to take care of some characters. Instead of directly placing the character you need to use the ASCII code for that character. Below table will provide you with the list of mostly used characters while creating URL. You should prefix the “%” character before the ASCII code.
Now below example will give you an idea on how to generate URL for different type of fields, the name of the field (i.e. schema name) must be specified in lower case only.
(Blue is the actual field name and its related attribute name like for lookup there are 2 names and brown is the actual value)
Below is the total URL with all above field values passed to the new contact form,
"http://<ServerName>/main.aspx?etn=contact&pagetype=entityrecord&extraqs=birthdate%3D01%2F14%2F1984%26salutation%3DMr%26gendercode%3d1%26creditonhold%3d1%26defaultpricelevelid%3dD0B854EC-1E1A-E011-8D2B-D8D3855B354B%26defaultpricelevelidname%3dComputer%20Stationary%26parentcustomerid%3D%7b0D98B15F-0565-E011-8D90-1CC1DEE8CEB7%7d%26parentcustomeridname%3DInogic%26parentcustomeridtype%3Daccount"
Hope this helps!
Wednesday, April 27, 2011
Filtering in Crm 2011
We can filter the columns from within the Grid as shown in below screen shot.
Click on Filter button that enables filtering for each column as shown in below screen shot.
The drop down shows the following options for filtering.
Click on Custom filter option and specify the conditions based on which records will be filtered.
Now records will be shown only for those potential customer whose name begins with “b” as shown in below screen shot.
We can save our views as shown in below screen shot.
Specify the name of your view and it will be shown to your views list as shown in below screen shot.
Hope this helps!!!
Saturday, April 23, 2011
Group by using FetchXML
Using Group by we can calculate sum, avg, min, max, count. But, Group by clause is not supported through LINQ in CRM.
You can only specify one aggregate attribute in a query and you cannot use the distinct keyword. To create an aggregate attribute, set the keyword aggregate to true, then specify valid entity name, attribute name and alias(variable name). You must also specify the type of aggregation you want to perform.
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='entity name'>
<attribute name='attribute name' aggregate='count' alias='alias name'/>
</entity>
</fetch>"
Below is the example to get sum of total amount of all won quotes:
string quotes = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='quote'>
<attribute name='totalamount' alias='totalamount_sum' aggregate='sum'/>
<attribute name='statecode' groupby='true' alias='state' />
<filter type='and'>
<condition attribute=' statecode ' operator='eq' value='won' />"+
"</filter> "+
"</entity> "+
"</fetch>";
EntityCollection quotes_result = _service.RetrieveMultiple(new FetchExpression(quotes));
foreach (var q in quotes_result.Entities)
{
Decimal wonQuoteAmount = ((Money)((AliasedValue)q["totalamount_sum"]).Value).Value;
}
Wednesday, April 13, 2011
MessageSecurityException when connecting to the Web Services
When trying to establish connection with the organization service or discovery service in CRM 2011 you may receive the following exception
Unhandled Exception: System.ServiceModel.Security.MessageSecurityException: An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
Solution: You need to Delete the device registration folder named LiveDeviceID in your profile folder C:\Users\<username>.
Alternatively you can navigate to “C:\Users\<username>\LiveDeviceID\” and rename the LiveDevice.xml file to LiveDeviceOld.xml.
Monday, March 28, 2011
Differences in Custom Workflow Assembly in CRM 4.0 and CRM 2011
1. References
CRM 4.0
using System.Workflow.Activities;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Compiler;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.Sdk.Query;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Crm.Workflow;
CRM 2011
using System.Activities;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
2. Base Class
Base class definition has been changed from SequenceActivity to CodeActivity.
CRM 4.0: In CRM 4.0 we have to specify both Workflow name and Workflowactivitygroupname in the code as written in the following code.
[CrmWorkflowActivity("My Custom Workflow", "CRM Workflow")]
public class MyCustomWF: SequenceActivity
CRM 2011: In CRM 2011 that is done in different way.
public class MyCustomWF: CodeActivity
Both Workflow name and Workflowactivitygroupname can be specified at the time of registering the assembly as shown in below screen shot.
3. Execute Method
The overridden Execute method remains the same except parameter and return type.
CRM 4.0
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
CRM 2011
protected override void Execute(CodeActivityContext executionContext)
4. Create service
CRM 4.0
IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
IWorkflowContext context = contextService.Context;
ICrmService crmService = context.CreateCrmService();
CRM 2011
IWorkflowContext context = executionContext.GetExtension
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
5. INPUT Parameters
CRM 4.0
Declaration: how to initialize the input parameter
// specified dependency property
public static DependencyProperty CaseIDProperty = DependencyProperty.Register("CaseID", typeof(Lookup), typeof(TotalTaskRetrieval));
// Specified Input property
[CrmInput("Enter Case ")]
// Set the reference Target for Property created
[CrmReferenceTarget("incident")]
// Property Defined for caseId
public Lookup CaseID
{
get
{
return (Lookup)base.GetValue(CaseIDProperty);
}
set
{
base.SetValue(CaseIDProperty, value);
}
}
Use: Access the input parameter declared above as,
Guid caseid=CaseID.Value
CRM 2011
Declaration: how to initialize the input parameter
[Input("Enter Case ")]
[ReferenceTarget("incident ")]
[Default("3B036E3E-94F9-DE11-B508-00155DBA2902", " incident ")]
public InArgument
Use: Access the input parameter declared above as,
Guid caseid = CaseID.Get
6. OUTPUT Parameters
CRM 4.0
[CrmOutput("outputSum")]
public CrmMoney Sum
{
get
{
return (CrmMoney)base.GetValue(SumProperty);
}
set
{
base.SetValue(SumProperty , value);
}
}
CRM 2011
[Output("outputSum")]
[Default("23.3")]
public OutArgument
Hope this helps!!!