The request for security token could not be satisfied because authentication failed error in CRM while developing Visual Web Part in SharePoint 2013.


Hi,

We recently developed a Visual Web Part which was using OrganizationService to interact with CRM.

We were initially using Network Credentials for OrganizationService and were setting appropriate username, password and domain. Later we changed it to Default Credentials and set the AppPool identity of the SharePoint portal’s app pool to a CRM User with appropriate access. It was then we started getting this error.

The reason was SharePoint web configuration settings has Identity Impersonation set as true.

If impersonation is set as true, then IIS uses the ‘NT AUTHORITY\IUSR’ but if disabled IIS will run under whatever account been set in the identity pool.

So one way of fixing the issue was setting impersonation as false.

Hope it helps.


An item with the same key has already been added error while importing solution in CRM 2013


Hi,

Recently while importing a solution from dev environment to test environment we were getting this error.

This error occurs when we have some kind of mismatch among the attribute in both the environment for e.g. same attribute is created in both the environment with different datatype.

After comparing the dev and test environment, we realized that the Schema Name for one of the field was different in dev environment.

i.e. lss_Client_agress_to_LSSContract in test and lss_client_agress_to_lsscontract in dev

So we removed the field from form and deleted it in our dev environment.

After that import worked properly.

Hope this helps

Getting back the Mail Merge button in CRM 2013


After upgrading to CRM 2013, we found out that mail merge button was missing in the command bar.

The solution was to customize the command for the existing mail merge button on the form.

For this open the solution containing the entity in Ribbon Work Bench and select Form of the Entity.

Right click the Mail Merge button and select Customize Command

 

Select commands and select Edit Display Rules

 

Remove Mscrm.HideOnCommandBar rule

Refresh the xml generated and publish the solution.

Helpful post

http://www.develop1.net/public/post/How-to-restore-a-hidden-button-on-the-CRM-2013-Command-Bar.aspx

Hope it helps.

 

 

Hide Quick Create Form in CRM 2013.


After upgrading to CRM 2013, we wanted to hide the quick create form from the end users. This can be done through the entity customization’s Data Services section

Bye.

Microsoft Fakes and Plugin


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

tagName is null or not an object error in CRM 2011


Hi,

We recently faced this issue in one of our web resources (html). If we are trying to move the bottom scrollbar in the form, we get the below error in jscrpt.

This issue only occurred IE 8 and Update Rollup 15.

It worked properly in IE 9, 10, 11 and Update Rollup 15.

In one of the forums it was suggested that this issue will not occur if we only have UR 12. We tested it and found out that it did work properly in IE 8 with only Update Rollup 12.

http://community.dynamics.com/crm/f/117/p/119766/250458.aspx

Bye.