Nice post !
Seriously. Where have the radio buttons gone for “Two Options” type bit fields in CRM 2013?!
View original post 307 more words
Nice post !
Seriously. Where have the radio buttons gone for “Two Options” type bit fields in CRM 2013?!
View original post 307 more words
Recently we upgraded our CRM 2011 solution to CRM 2013.
After upgrade labels for few of the attributes were not displaying properly.

Changing the section’s width for the label area resolved this.

After publishing the change à

Helpful post :-
http://www.powerobjects.com/blog/2014/03/05/adjusting-crm-2013-field-label-sizes/
Bye.
Hi,
We were using the below function in CRM 2011 for disabling all the fields in the form.
function makeAllAttributesReadOnly() {
var attributes = Xrm.Page.data.entity.attributes.get();
for (var i in attributes) {
var myattribute = Xrm.Page.data.entity.attributes.get(attributes[i].getName());
var myname = myattribute.getName();
Xrm.Page.getControl(myname).setDisabled(true);
}
}
However this function in CRM 2013 was giving us setDisabled field is undefined JavaScript error.
As it turned out it was because of the StateCode (Status) field in CRM 2013.

Modifying the above code to leave this particular field resolved the issue.
function makeAllAttributesReadOnly() {
var attributes = Xrm.Page.data.entity.attributes.get();
for (var i in attributes) {
var myattribute = Xrm.Page.data.entity.attributes.get(attributes[i].getName());
var myname = myattribute.getName();
if(myname == "statecode")
{
return;
}
Xrm.Page.getControl(myname).setDisabled(true);
}
}
Hope it helps.
Hi, after importing our CRM 2011 solution into CRM 2013 org, we faced one strange issue in one of the attributes.
As we can see below the text box (ellipsis) was missing for Client Alias 3 attribute.

Opening the form for customization, and checking the field details didn’t reveal anything different.

Then we gave it a try by moving the Owner Field (not visible by default) to bottom of that section beneath Client Alias 3 field and published the customization.

Strangely enough the text box start appearing for the Client Alias 3 field.

Still wondering what would be the possible reason behind this issue.
Bye.
Recently we had a requirement to add checkboxes in our mail merge templates. There are two options of adding checkboxes one is adding them as a symbol if we want user to check them after taking print out or if we want them to be clickable inside the word document itself using content control.
Check this helpful post
Hope it helps.
Just sharing the helper class we use for writing Unit Test for Plugin using Microsoft Fakes
Sample Code for Plugin
</pre>
public class PluginClass: IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context =
(IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// Everytime a lead record is created
// Create a corresponding contact record
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity entity = (Entity)context.InputParameters["Target"];
IOrganizationServiceFactory serviceFactory =
(IOrganizationServiceFactory)
serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService orgService = serviceFactory.CreateOrganizationService(context.UserId);
if (entity.LogicalName == "lead")
{
Entity contactEntity = new Entity("contact");
contactEntity.Attributes["lastname"] = entity.Attributes["subject"];
orgService.Create(contactEntity);
}
}
}
}
Sample Code for Unit Test Class
</pre>
[TestClass]
public class UnitTest1
{
[TestMethod]
public void UnitTestMethod()
{
var serviceProvider = new StubIServiceProvider();
var pluginContext = new StubIPluginExecutionContext();
var organizationService = new StubIOrganizationService();
// Mole the basic Plugin objects
Helper.FakePluginVariables(serviceProvider, pluginContext, organizationService, 40, "Create");
// set the mole of entity
var entityAttributes = new Dictionary<string, object>();
entityAttributes.Add("subject", "Test Subject");
Entity leadEntity = Helper.FakeEntity("lead", entityAttributes, pluginContext);
// set the entity in the parameter collection
var parameterAttributes = new Dictionary<string, object>();
parameterAttributes.Add("Target", leadEntity);
Helper.FakePluginInputParameters(pluginContext, parameterAttributes);
organizationService.CreateEntity = (p1) => { return Guid.NewGuid(); };
var postCreateLead = new Class1();
postCreateLead.Execute(serviceProvider);
}
}
Helper class
</pre>
/// <summary>
/// Helper class for Fakes
/// </summary>
public static class Helper
{
/// <summary>
/// Fakes the plugin variables.
/// </summary>
/// <param name="serviceProvider">The service provider.</param>
/// <param name="pluginContext">The plugin context.</param>
/// <param name="organizationService">The organization service.</param>
/// <param name="stageNumber">The stage number.</param>
/// <param name="messageName">Name of the message.</param>
public static void FakePluginVariables(
StubIServiceProvider serviceProvider,
StubIPluginExecutionContext pluginContext,
StubIOrganizationService organizationService,
int stageNumber,
string messageName)
{
var serviceFactory = new StubIOrganizationServiceFactory();
var tracingService = new StubITracingService();
if (serviceProvider != null)
{
serviceProvider.GetServiceType = type =>
{
if (type == typeof(IPluginExecutionContext))
{
return pluginContext;
}
else if (type == typeof(ITracingService))
{
return tracingService;
}
else if (type == typeof(IOrganizationServiceFactory))
{
return serviceFactory;
}
return null;
};
}
pluginContext.DepthGet = () => 1;
pluginContext.UserIdGet = () => new Guid();
pluginContext.MessageNameGet = () => messageName;
pluginContext.StageGet = () => stageNumber;
pluginContext.InitiatingUserIdGet = () => new Guid();
pluginContext.CorrelationIdGet = () => new Guid();
pluginContext.PrimaryEntityIdGet = Guid.NewGuid;
serviceFactory.CreateOrganizationServiceNullableOfGuid = t1 => organizationService;
tracingService.TraceStringObjectArray = Trace;
}
/// <summary>
/// Sets the Fakes for the Entity
/// </summary>
/// <param name="entityName">The LogicalName of the entity</param>
/// <param name="attributeValues">The attributes of the entity</param>
/// <param name="context">Object of type SIPluginExecutionContext</param>
/// <returns>Object of type Entity</returns>
public static Entity FakeEntity(string entityName, Dictionary<string, object> attributeValues, StubIPluginExecutionContext context)
{
var entity = new Entity(entityName);
entity.Attributes = new AttributeCollection();
if (attributeValues != null)
{
foreach (string key in attributeValues.Keys)
{
entity.Attributes.Add(key, attributeValues[key]);
}
}
if (context != null)
{
context.PrimaryEntityNameGet = () => entityName;
}
entity.Id = Guid.NewGuid();
return entity;
}
/// <summary>
/// Fakes the PluginContext.InputParameters
/// </summary>
/// <param name="context">the mole of the IPluginExecutionContext</param>
/// <param name="inputParameterCollection">Object of type System.Dictionary</param>
public static void FakePluginInputParameters(StubIPluginExecutionContext context, Dictionary<string, object> inputParameterCollection)
{
if (inputParameterCollection != null)
{
var parameterCollection = new ParameterCollection();
foreach (var key in inputParameterCollection.Keys)
{
parameterCollection.Add(key, inputParameterCollection[key]);
}
if (context != null)
{
context.InputParametersGet = () => parameterCollection;
}
}
}
/// <summary>
/// Detour method for the CRM Trace method
/// </summary>
/// <param name="content">the message to be traced</param>
/// <param name="value">Object of type object []</param>
public static void Trace(string content, params object[] value)
{
}
}
// Update
organizationService.UpdateEntity = (p) =>
{
};
// Execute
organizationService.ExecuteOrganizationRequest = orgReq =>
{
return new OrganizationResponse();
};
// Retrieve
organizationService.RetrieveStringGuidColumnSet = (p1, p2, p3) =>
{
Entity entity = null;
if (p1 == entity1.EntityLogicalName)
{
entity = new Entity(entity1.EntityLogicalName);
entity.Id = Guid.NewGuid();
entity.Attributes["new_category"] = new OptionSetValue(12345);
entity.FormattedValues["new_category"] = "home";
}
else if (p1 == entity2.EntityLogicalName)
{
entity = new Entity(entity2.EntityLogicalName);
entity.Id = Guid.NewGuid();
entity.Attributes["new_moneyattr"] = new Money(100.0M);
}
return entity;
};
//RetrieveMultiple
organizationService.RetrieveMultipleQueryBase = delegate(QueryBase query)
{
var collection = new EntityCollection();
Entity entity;
if (query is FetchExpression)
{
entity = new Entity(entity.EntityLogicalName);
entity.Attributes = new AttributeCollection();
entity.Attributes.Add("attr", "value");
collection.Entities.Add(entity);
}
return collection;
};
// PreImage
pluginContext.PreEntityImagesGet = () =>
{
EntityImageCollection entityImgColl = new EntityImageCollection();
Entity preImageEntity = new Entity(enitity1.EntityLogicalName);
preImageEntity.Attributes.Add("new_id", new EntityReference(entity2.EntityLogicalName, Guid.NewGuid()));
preImageEntity.Attributes.Add("new_bool", false);
KeyValuePair<string, Entity> kvp = new KeyValuePair<string, Entity>("PreImageAI", preImageEntity);
entityImgColl.Add(kvp);
return entityImgColl;
};
Hope it helps