Thursday 4 December 2014

CRM 2015 Review

CRM 2015 Review

Microsoft have released CRM 2015 which rather than being a complete look and feel update that we saw with CRM 4, CRM 2011, and CRM 2013 is instead an update on the changes that were included in 2013.

The release is more focused on functionality updates rather than the design updates many CRM users are useful.  This is obviously some good news as there is nothing more annoying than training business users in one look and feel only to have it completely change every 12-24 months.

This article is my observations of the differences between two vanilla instances of CRM (One 2013, one 2015).  There is probably a fair bit of information I have missed which can be discovered via Microsoft’s documentation.  However onto the article!

CRM Ribbon

The first difference when logging into 2015 is there is a new search box and icon clearly visible on the ribbon.
CRM 2013 - Ribbon

CRM 2015 - Ribbon

Entering a keyword(s) into the search box returns the results found by the query.  Currently it appears to be limited to Account, Contact, Lead, Opportunity, User, Competitor, Activity, and Case entities.  This is a bit of an issue if you have a CRM implementation with a lot of custom entities however for now I’m presuming it might be a configuration I haven’t found yet.

The icon beside it is the Advanced Find icon which pops up the standard Advanced Find window.  Advanced Find could often get lost in CRM2013 and having it in such and easy to find place will definitely help regular business

Colours and Theming

The colours of some of the OOB entities have changed which seems like a slightly odd decision (I don’t recall anyone really complaining about it) however the standard ribbon functionality seems to be the same.

CRM 2013 - Entities Menu


CRM 2015 - Entities Menu

The forms also appear to have had minor changes to colours however if you have clients using CRM 2013 then they should be able to continue navigating around the system easy enough.

CRM 2013 - Account Form


CRM 2015 - Account Form


Navigation Changes

The areas are generally the same as CRM 2013 however some slight changes include the splitting of the old Administration area within Settings.
CRM 2013 - Administration


CRM 2015 - Administration


CRM 2015 - Security

The new setup is probably a more logical design as the Security items now have their own area including the new Positions and Hierarchy Security items.  Hierarchy Security seems like it needs its own post so I won’t go into any detail here.
The Administration area also has the Microsoft Social Listening Configuration which allows you to use Microsoft’s Social Listening solution to track Facebook, Twitter, YouTube etc. information which can then be linked back into Accounts and Contacts so you can see how clients and the public are relating to your company.

Business Rules

An interesting addition to CRM 2013 was Business Rules.  The concept was fantastic as it in theory reduced the JavaScript required, however in practise the reality was a two basic limitations made them almost unusable.
Consider these scenarios:-

Scenario One

So you have a client whose preferred method of contact is Email.  Then logically they need to provide an email address.  However what if there preferred method is Phone, Fax, or Mail?  Programmatically you want the following:-
·         If Preferred Method of Contact is Email Then
o    Make Email Mandatory
·         Else If Preferred Method of Contact is Phone Then
o    Make Phone Mandatory
·         Else If Preferred Method of Contact is Fax Then
o    Make Fax Mandatory
·         Else If Preferred Method of Contact is Main Then
o    Make Address 1: Street 1 Mandatory

In CRM 2013 you could not do If/Else so the above required four separate Business Rules which becomes difficult when you have to start doing this for multiple fields.

Scenario Two


If you want to ensure you capture either a Home or Mobile phone for a client then you would like something like:-
·         If Home Phone or Mobile Phone do not contain Data Then
o    Home Phone or Mobile Phone are mandatory
·         Else
o    Home Phone or Mobile Phone are not mandatory
In CRM 2013 all conditions were “and” so the above wouldn’t work.  We could reverse it and say where Home Phone and Mobile Phone don’t contain data however what if we want something more complex? CRM 2015 opens up this functionality by allowing and/or.

CRM 2015 - Business Rule

Combining the If/Else and And/Or allows for a lot more customizability for the Business Rules which should greatly reduce the need for a programmer to develop JavaScript solutions leaving them to worry about more critical functionality.

Calculated and Rollup fields

CRM 2015 allows for fields to be of three types:-
·         Simple
The standard type from previous versions of CRM for data entry.
·         Calculated
Allows for Conditions if required (similar setup to Business Rules) and then allows actions using either a current field or one of the following formulas:-
       ADDDAYS
       ADDHOURS
       ADDMONTHS
ADDWEEKS
       ADDYEARS
       CONCAT
       SUBTRACTDAYS
       SUBTRACTHOURS
       SUBTRACTMONTHS
       SUBTRACTWEEKS
       SUBTRACTYEARS
       TRIMLEFT
       TRIMRIGHT
This is useful if you want to create a description for a record for example by combining multiple existing fields.
CRM 2015 - Calculated Field


·         Rollup
Rollup uses a related entity to do one of the following functions:-
       SUM
       MAX
       MIN
       COUNT
This is good to see how many contacts an Account has, or the total of child currency fields.
CRM 2015 - Roll up Field



Wednesday 26 November 2014

No response and catching errors cURL PHP

I covered this in another post however I thought it deserved its own "snippet". I use cURL when connecting to CRM's SOAP service as I found it easy to use almost right away.

Because I could use it right away I didn't really spend anytime thinking about it. That was until code that had been working for months suddenly stopped. I received no response from the service but I couldn't figure out why.

The investigation led me to the following function:
 public static function GetSOAPResponse($url, $request) {
    // Set up headers.
    $headers = array(
      "POST " . "/Organization.svc" . " HTTP/1.1",
      "Host: yourorganisation.api.crm5.dynamics.com",
      'Connection: Keep-Alive',
      "Content-type: application/soap+xml; charset=UTF-8",
      "Content-length: " . strlen($request),
    );
 
    $cURLHandle = curl_init();
    curl_setopt($cURLHandle, CURLOPT_URL, $url);
    curl_setopt($cURLHandle, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cURLHandle, CURLOPT_TIMEOUT, 60);
    curl_setopt($cURLHandle, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($cURLHandle, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($cURLHandle, CURLOPT_SSLVERSION, 3);
    curl_setopt($cURLHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($cURLHandle, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($cURLHandle, CURLOPT_POST, 1);
    curl_setopt($cURLHandle, CURLOPT_POSTFIELDS, $request);
    $response = curl_exec($cURLHandle);
    curl_close($cURLHandle);
 
    return $response;
  }

In such a small project such as this when something stops working the question is usually what dependencies have changed? I presumed something at the Microsoft end (I was using CRM Online) had changed but the question was what.

A quick Google search on curl_exec shows that it does not throw exceptions due to it being a C library all wrapped up. So in order to get an exception you need to instead use the following:
if( ! $response = curl_exec($cURLHandle)) 
   { 
       trigger_error(curl_error($cURLHandle)); 
   }

This will fire off a PHP exception for the cURL error. Which led me to my real issue!

Microsoft due to the 'poodle' vulnerability in SSL updated to SSL version 4. The code I had above (grabbed from some other persons post presumably!) has the SSL Version explicitly stated. By changing this to 4 the issue went away. However I thought it was easier to just remove that setting and this seemed to do the trick (and hopefully makes it a bit more robust for future use!). So the updated code is below.

public static function GetSOAPResponse($url, $request) {
   // Set up headers.
   $headers = array(
     "POST " . "/Organization.svc" . " HTTP/1.1",
     "Host: yourorganisation.api.crm5.dynamics.com",
     'Connection: Keep-Alive',
     "Content-type: application/soap+xml; charset=UTF-8",
     "Content-length: " . strlen($request),
   );
 
   $cURLHandle = curl_init();
   curl_setopt($cURLHandle, CURLOPT_URL, $url);
   curl_setopt($cURLHandle, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($cURLHandle, CURLOPT_TIMEOUT, 60);
   curl_setopt($cURLHandle, CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($cURLHandle, CURLOPT_FOLLOWLOCATION, TRUE);
   curl_setopt($cURLHandle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
   curl_setopt($cURLHandle, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($cURLHandle, CURLOPT_POST, 1);
   curl_setopt($cURLHandle, CURLOPT_POSTFIELDS, $request);
   if( ! $response = curl_exec($cURLHandle)) 
   { 
       trigger_error(curl_error($cURLHandle)); 
   }
   curl_close($cURLHandle);
 
   return $response;
 }

Wednesday 12 November 2014

CRM 2011 Workflow execution

As newer versions of CRM are released I find myself wondering when we might reach a point where plugin code might not be required. Between Workflows, JavaScript, and Business Rules CRM it is getting easier to customize in more and more powerful ways.

Every time I think of this though I find a "gotcha" which makes me realise plugin code will still be required for a while yet.

We had an issue where the client told us that there was a bug with auditing in CRM 2011. The problem was two different sets of audit changes were listed.

The problem ended up being not with the auditing but with the workflows. Workflows do not capture data at the time of change rather they run against the data at time of workflow execution. This is a rather obvious but interesting difference.

In our case the record needed to be recommended and then approved. We had a workflow which was created and run on "Status" change that on Approval would push data to a new entity . In a real world scenario we would presume that no one would recommend and immediately approve however there would be many cases I’m sure where a fast change such as this is completely possible.

Where a fast change like this occurs chances are that 1) the workflow has not yet been created by CRM yet or 2) the workflow has been created and not run. The issue of course is the workflow will look at the Status and see "Approved" both times it runs!

So if you have a field that is updated multiple times in quick succession I suggest having a plugin (which snapshots that data) rather than relying on a workflow.

NOTE: I haven't confirmed this in 2013 or 2015 so they might actually handle snapshots in workflows? The above talks about CRM 2011 specifically.

Sunday 7 September 2014

CRM 2011 - JavaScript - Access Is Denied

While testing a CRM 2011 instance we ran into a issue where the JavaScript kept throwing an "Access is Denied" message. This only occurred on one system and no others. What we discovered was the user was looked in using the fully qualified URL ie:- http://crmtroubleshoot.blogspot.com.au While everone else was using the short URL something like the following http://crmtroubleshoot When calling the service through JavaScript we use the following getClientUrl() + "/XRMServices/2011/Organization.svc/web"; This was returning the short URL which the server thought was a different server to the long name. The user re logged in with the Short URL and the problem went away. If you have DNS suffixes set then you need to log in to CRM using the short name. I suspect (unconfirmed) if you don't have the DNS suffixes set then using the long URL should be fine.

Tuesday 26 August 2014

CRM 2011 - Changing the color of Text fields

We had a scenario where we wanted to clearly identify the differences between two addresses on a form.

To facilitate this we thought we would change the text color however we hit two issues
1) Most of the examples showed an unsupported example.
2) It didn't seem to work when the field was read only

The examples seem to use the standard JavaScript style
document.getElementById("fieldname").style.color = "red";
While my final solution might still not be Microsoft supported, it is a bit more "CRM'd" then the above.
var field = Xrm.Page.ui.controls.get("fieldname");
if (field != null) {
     field._control.get_element().firstChild.style.color= 'red';
}

HOWEVER as the display of read only fields is defined by the client browser/css modifying this would be tricky at best. So instead we changed the background color which will work on a disabled field.
var field = Xrm.Page.ui.controls.get("fieldname");
if (field != null) {
     field._control.get_element().firstChild.style.backgroundColor = 'red';
}
Let me know if you have a more elegant solution!

Thursday 31 July 2014

CRM 2013 - Dependent OptionSets (picklists) error onchange

If you like me have downloaded the "Create dependent OptionSets (picklists)" code only to find it does not work in Chrome then never fear!

While i'd like to take responsibility for this fix, i actually found it here. http://ashwaniashwin.wordpress.com/2014/04/27/this-get_editview-is-null-or-not-an-object-error-during-jscript-controls-clearoptions-in-crm-2013/

However if you're lazy then the short answer is for some reason the option set list gets dropped in the following:-
for (var ctrl in controls) {
This means that when we call the following it doesn't exist.
controls[ctrl].clearOptions();
So as mentioned on the post above to fix this you can do the following:-
//controls[ctrl].clearOptions();
var childoptionset = Xrm.Page.ui.controls.get(childField);
childoptionset.clearOptions();
The Dependent OptionSets should now work as required!

Sunday 13 July 2014

Get Opportunity Won or Lost via JavaScript

Most of you are probably aware of this however I thought i'd put a reminder for myself anyway.

The statecode controls the state of the Opportunity.
statecode label
0Open
1Won
2Lost


And the code I used
var statecode = TryParseInt(Xrm.Page.getAttribute('statecode').getValue(), null);
if (statecode != null)
{
 // Open
 if (statecode == 0)
 {
  // Do Something
 }
 // statecode 1 = Won
 else if (statecode == 1)
 {
  // Do Something
 }
 // statecode 2 = Lost
 else if (statecode == 2)
 {
  // Do Something
 }
 else
 {
  // Handle issue
 }
}

Tuesday 24 June 2014

Update Opportunity on 'Close as Won' or 'Close as Lost'

I had a requirement that I thought would be quite basic, on Close Won/Lost then update a field on Opportunity.

My first thought was that this could be on using the following Plugin setup:
  • Message - Update
  • Primary Entity - opportunity
  • Secondary Entity - none
However I found that the above did not fire. A bit of googling and I found that i instead needed to use the following:
  • Message - Win
  • Primary Entity - opportunity
  • Secondary Entity - none
AND
  • Message - Lose
  • Primary Entity - opportunity
  • Secondary Entity - none
This does not return the opportunity as "Target" as you might think it actually returns "Status" and "OpportunityClose". OpportunityClose contains the information listed on the form displayed when you try to Win/Lose an Opportunity,  CRM stores this as a separate entity.

Opportunity does provide you with the related opportunityid however so you can update the original opportunity if required (Just be aware that THIS will then fire any "Update opportunity" plugin steps!)

var context = (IPluginExecutionContext)serviceProvider.GetService(typeof (IPluginExecutionContext));


if (context.InputParameters.Contains("OpportunityClose")
 &&
 context.InputParameters["OpportunityClose"] is Entity)
{
 // Obtain the target entity from the input parameters.
 var entity = (Entity)context.InputParameters["OpportunityClose"];

 try {

  if (entity.Attributes.Contains("opportunityid")) {
   var opportunityId = ((EntityReference)entity.Attributes["opportunityid"]).Id;

   var serviceFactory =
    (IOrganizationServiceFactory) serviceProvider.GetService(typeof (IOrganizationServiceFactory));

   // Getting the service from the Organisation Service.
   IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

   Entity opportunity = service.Retrieve("opportunity", opportunityId, new ColumnSet(new string[] { "closeprobability" }));
   opportunity["closeprobability"] = 50;
   service.Update(opportunity);
  }
 }
 catch (Exception ex) {
  tracingService.Trace("Plugin: {0}", ex.ToString());
  throw;
 }
}

Sunday 22 June 2014

CRM 2013 Plugin Registration Tool - Cannot connect to Organisations after login

When attempting to connect to the Plugin Registration Tool I found a strange scenario.  If I entered the correct credentials the tool would look like it was doing something and then return to the login page. Clicking on the Login button again would flash to a message and come back.

CRM 2013 Plugin Registration Tool Login Page


We then added me as a System administrator and I could go one step further (Seeing a list of Organisations) yet if I clicked on one then the list disappeared and I was stuck!

CRM 2013 Plugin Registration Tool Organisation List

So I did the only other thing I could think of which was started Fiddler and see the messages between my system and CRM.

This is where I discovered that there was an issue with the SSL Certificate and rather than give me a nice message CRM just fell over.

So if you can't get past the Login or Organisation screen then check your certificate isn't throwing an error.

Finally the Plugin Registration Tool is new and improved!

If you're like me and find yourself often registering CRM plugins then you will probably be as excited as me that the Plugin Registration Tool has been reborn!

While the old Plugin Registration Tool did its job it always concerned me that such a key bit of Dynamics CRM functionality could be such and afterthought for Microsoft (No one had time to find an icon for it??)

When downloading the latest Dynamics CRM SDK 2013 I suddenly discovered the Plugin Registration Tool wasn't in its old spot. Its now found at {Base Dir}\SDK\Tools\PluginRegistration and it looks a fair bit different as shown below!

The Old


The New!
The functionality in general remains the same. Its just a fresher interface however there is a few changes both good and bad.

  1. You can now view the plugins by Assembly, Entity, or Message. This makes it a lot easier when searching for a particular plugin step.
  2. Currently it doesn't keep a list of servers/logins. Painful if you have a collection of servers!
  3. The source code isn't available in the SDK.
Whether or not the source code is ever made available will be a big question marks however hopefully we can get further improvements in the near future!


Tuesday 29 April 2014

Dynamics CRM 2013 - Extending the 10000 Record Limit when exporting to Excel

There is a restriction on exporting records to Excel in Dynamics CRM. You can only export up to 10,000 records.

If you are on premise you can modify the registry to fix this, if you are using CRM Online (or don't want to touch the registry) you can use the following code to modify the Organization attribute "maxrecordsforexporttoexcel".

public static void Main(string[] args)
        {
            OrganizationServiceProxy _serviceProxy = null;
            IOrganizationService _service;

            Uri crmURI = new Uri("https://{ORGANIZATION}.api.{crmregion}.dynamics.com/XRMServices/2011/Organization.svc");

            ClientCredentials clientCredentials = new ClientCredentials();
            clientCredentials.UserName.UserName = "username";
            clientCredentials.UserName.Password = "password";

            using (_serviceProxy = new OrganizationServiceProxy(crmURI, null, clientCredentials, null))
            {
                QueryExpression query = new QueryExpression();
                query.EntityName = "organization";
                query.ColumnSet = new ColumnSet() { AllColumns = true };
             
                _service = (IOrganizationService)_serviceProxy;
           
                EntityCollection entities = _service.RetrieveMultiple(query);
                if (entities.Entities.Count == 1)
                {
                    if (entities.Entities[0].Attributes.Contains("maxrecordsforexporttoexcel"))
                    {
                        entities.Entities[0].Attributes["maxrecordsforexporttoexcel"] = 20000;
                        _service.Update(entities.Entities[0]);
                    }
                }
            }
        }



NOTE: This function can be used for all organization attributes that are editable (the original list can be found here - http://msdn.microsoft.com/en-us/library/gg328408(v=crm.6).aspx)


Attribute Schema Name Display Name Type Description
AcknowledgementTemplateId Acknowledgement Template Lookup ID of the template to be used for acknowledgement when a user unsubscribes.
AllowAddressBookSyncs Allow Address Book Synchronization Boolean Indicates whether background address book synchronization in Microsoft Office Outlook is allowed.
AllowAutoResponseCreation Allow Automatic Response Creation Boolean Indicates whether automatic response creation is allowed.
AllowAutoUnsubscribe Allow Automatic Unsubscribe Boolean Indicates whether automatic unsubscribe is allowed.
AllowAutoUnsubscribeAcknowledgement Allow Automatic Unsubscribe Acknowledgement Boolean Indicates whether automatic unsubscribe acknowledgement email is allowed to send.
AllowClientMessageBarAd Allow Outlook Client Message Bar Advertisement Boolean Indicates whether the Microsoft Dynamics CRM for Outlook message bar advertisement is allowed.
AllowEntityOnlyAudit Allow Entity Level Auditing Boolean Indicates whether auditing of changes to entity is allowed when no attributes have changed.
AllowMarketingEmailExecution Allow Marketing Email Execution Boolean Indicates whether marketing emails execution is allowed.
AllowOfflineScheduledSyncs Allow Offline Scheduled Synchronization Boolean Indicates whether background offline synchronization in Microsoft Office Outlook is allowed.
AllowOutlookScheduledSyncs Allow Scheduled Synchronization Boolean Indicates whether scheduled synchronizations to Outlook are allowed.
AllowUnresolvedPartiesOnEmailSend Allow Unresolved Address Email Send Boolean Indicates whether users are allowed to send email to unresolved parties (parties must still have an email address).
AllowUserFormModePreference Allow User Form Mode Preference Boolean Indicates whether individuals can select their form mode preference in their personal options.
AllowUsersSeeAppdownloadMessage Allow the showing tablet application notification bars in a browser. Boolean Indicates whether showing tablet application notification bars in a browser is allowed.
AllowWebExcelExport Allow Export to Excel Boolean Indicates whether web-based export of grids to Microsoft Office Excel is allowed.
AMDesignator AM Designator String AM designator to use throughout Microsoft Dynamics CRM.
BaseCurrencyId Currency Lookup ID of the base currency of the organization.
BaseCurrencyPrecision Base Currency Precision Integer Number of decimal places that can be used for the base currency.
BaseCurrencySymbol Base Currency Symbol String Symbol used for the base currency.
BaseISOCurrencyCode Base ISO Currency Code String Base ISO currency code.
BingMapsApiKey Bing Maps API Key String API Key to be used in requests to Bing Maps services.
BlockedAttachments Block Attachments String Prevent upload or download of certain attachment types that are considered dangerous.
BulkOperationPrefix Bulk Operation Prefix String Prefix used for bulk operation numbering.
BusinessClosureCalendarId Business Closure Calendar Unique identifier ID of the business closure calendar of organization.
CalendarType Calendar Type Integer Calendar type for the system. Set to Gregorian US by default.
CampaignPrefix Campaign Prefix String Prefix used for campaign numbering.
CasePrefix Case Prefix String Prefix to use for all cases throughout Microsoft Dynamics CRM.
ContractPrefix Contract Prefix String Prefix to use for all contracts throughout Microsoft Dynamics CRM.
CreatedBy Created By Lookup ID of the user who created the organization.
CreatedOn Created On DateTime Date and time when the organization was created.
CreatedOnBehalfBy Created By (Delegate) Lookup ID of the delegate user who created the organization.
CurrencyDecimalPrecision Currency Decimal Precision Integer Number of decimal places that can be used for currency.
CurrencyDisplayOption Display Currencies Using Picklist Indicates whether to display money fields with currency code or currency symbol.
CurrencyFormatCode Currency Format Code Picklist Information about how currency symbols are placed throughout Microsoft Dynamics CRM.
CurrencySymbol Currency Symbol String Symbol used for currency throughout Microsoft Dynamics CRM.
CurrentBulkOperationNumber Current Bulk Operation Number Integer Current bulk operation number.
CurrentCampaignNumber Current Campaign Number Integer Current campaign number.
CurrentCaseNumber Current Case Number Integer First case number to use.
CurrentContractNumber Current Contract Number Integer First contract number to use.
CurrentImportSequenceNumber Current Import Sequence Number Integer Import sequence to use.
CurrentInvoiceNumber Current Invoice Number Integer First invoice number to use.
CurrentKbNumber Current Article Number Integer First article number to use.
CurrentOrderNumber Current Order Number Integer First order number to use.
CurrentParsedTableNumber Current Parsed Table Number Integer First parsed table number to use.
CurrentQuoteNumber Current Quote Number Integer First quote number to use.
DateFormatCode Date Format Code Picklist Information about how the date is displayed throughout Microsoft Dynamics CRM.
DateFormatString Date Format String String String showing how the date is displayed throughout Microsoft Dynamics CRM.
DateSeparator Date Separator String Character used to separate the month, the day, and the year in dates throughout Microsoft Dynamics CRM.
DecimalSymbol Decimal Symbol String Symbol used for decimal in Microsoft Dynamics CRM.
DefaultCountryCode Default Country Code String Text area to enter default country code.
DefaultEmailServerProfileId Email Server Profile Lookup ID of the default email server profile.
DefaultEmailSettings Default Email Settings String XML string containing the default email settings that are applied when a user or queue is created.
DefaultRecurrenceEndRangeType Default Recurrence End Range Type Picklist Type of default recurrence end range date.
DisabledReason Disabled Reason String Reason for disabling the organization.
EmailConnectionChannel Email Connection Channel Picklist Select if you want to use the Email Router or server-side synchronization for email processing.
EmailCorrelationEnabled Use Email Correlation Boolean Flag to turn email correlation on or off.
EmailSendPollingPeriod Email Send Polling Frequency Integer Normal polling frequency used for sending email in Microsoft Office Outlook.
EnableBingMapsIntegration Enable Integration with Bing Maps Boolean Enable Integration with Bing Maps.
EnablePricingOnCreate Enable Pricing On Create Boolean Enable pricing calculations on a Create call.
EnableSmartMatching Enable Smart Matching Boolean Use Smart Matching.
ExpireSubscriptionsInDays Days to Expire Subscriptions Integer Maximum number of days before deleting inactive subscriptions.
FeatureSet Feature Set String Features to be enabled as an XML BLOB.
FiscalCalendarStart Fiscal Calendar Start DateTime Start date for the fiscal period that is to be used throughout Microsoft Dynamics CRM.
FiscalPeriodFormat Fiscal Period Format String Information that specifies how the name of the fiscal period is displayed throughout Microsoft Dynamics CRM.
FiscalPeriodFormatPeriod Format for Fiscal Period Picklist Format in which the fiscal period will be displayed.
FiscalPeriodType Fiscal Period Type Integer Type of fiscal period used throughout Microsoft Dynamics CRM.
FiscalSettingsUpdated Is Fiscal Settings Updated Boolean Information that specifies whether the fiscal settings have been updated.
FiscalYearDisplayCode Fiscal Year Display Integer Information that specifies whether the fiscal year should be displayed based on the start date or the end date of the fiscal year.
FiscalYearFormat Fiscal Year Format String Information that specifies how the name of the fiscal year is displayed throughout Microsoft Dynamics CRM.
FiscalYearFormatPrefix Prefix for Fiscal Year Picklist Prefix for the display of the fiscal year.
FiscalYearFormatSuffix Suffix for Fiscal Year Picklist Suffix for the display of the fiscal year.
FiscalYearFormatYear Fiscal Year Format Year Picklist Format for the year.
FiscalYearPeriodConnect Fiscal Year Period Connector String Information that specifies how the names of the fiscal year and the fiscal period should be connected when displayed together.
FullNameConventionCode Full Name Display Order Picklist Order in which names are to be displayed throughout Microsoft Dynamics CRM.
FutureExpansionWindow Future Expansion Window Integer Specifies the maximum number of months in future for which the recurring activities can be created.
GenerateAlertsForErrors Generate Alerts For Errors Boolean Indicates whether alerts will be generated for errors.
GenerateAlertsForInformation Generate Alerts For Information Boolean Indicates whether alerts will be generated for information.
GenerateAlertsForWarnings Generate Alerts For Warnings Boolean Indicates whether alerts will be generated for warnings.
GetStartedPaneContentEnabled Is Get Started Pane Content Enabled Boolean Indicates whether Get Started content is enabled for this organization.
GoalRollupExpiryTime Rollup Expiration Time for Goal Integer Number of days after the goal's end date after which the rollup of the goal stops automatically.
GoalRollupFrequency Automatic Rollup Frequency for Goal Integer Number of hours between automatic rollup jobs .
HashDeltaSubjectCount Hash Delta Subject Count Integer Maximum difference allowed between subject keywords count of the email messaged to be correlated.
HashFilterKeywords Hash Filter Keywords String Filter subject keywords.
HashMaxCount Hash Max Count Integer Maximum number of subject keywords or recipients used for correlation.
HashMinAddressCount Hash Min Address Count Integer Minimum number of recipients required to match for email messaged to be correlated
IgnoreInternalEmail Ignore Internal Email Boolean Indicates whether incoming email sent by internal Microsoft Dynamics CRM users or queues should be tracked.
IncomingEmailExchangeEmailRetrievalBatchSize Exchange Email Retrieval Batch Size Integer Setting for the Async Service Mailbox Queue. Defines the retrieval batch size of exchange server.
InitialVersion Initial Version String Initial version of the organization.
IntegrationUserId Integration User Unique identifier ID of the integration user for the organization.
InvoicePrefix Invoice Prefix String Prefix to use for all invoice numbers throughout Microsoft Dynamics CRM.
IsAppMode Is Application Mode Enabled Boolean Indicates whether loading of Microsoft Dynamics CRM in a browser window that does not have address, tool, and menu bars is enabled.
IsAuditEnabled Is Auditing Enabled Boolean Enable or disable auditing of changes.
IsAutoSaveEnabled Auto Save Enabled Boolean Information on whether auto save is enabled.
IsDefaultCountryCodeCheckEnabled Enable or disable country code selection Boolean Enable or disable country code selection.
IsDisabled Is Organization Disabled Boolean Information that specifies whether the organization is disabled.
IsDuplicateDetectionEnabled Is Duplicate Detection Enabled Boolean Indicates whether duplicate detection of records is enabled.
IsDuplicateDetectionEnabledForImport Is Duplicate Detection Enabled For Import Boolean Indicates whether duplicate detection of records during import is enabled.
IsDuplicateDetectionEnabledForOfflineSync Is Duplicate Detection Enabled For Offline Synchronization Boolean Indicates whether duplicate detection of records during offline synchronization is enabled.
IsDuplicateDetectionEnabledForOnlineCreateUpdate Is Duplicate Detection Enabled for Online Create/Update Boolean Indicates whether duplicate detection during online create or update is enabled.
IsFiscalPeriodMonthBased Is Fiscal Period Monthly Boolean Indicates whether the fiscal period is displayed as the month number.
IsPresenceEnabled Presence Enabled Boolean Information on whether IM presence is enabled.
IsSOPIntegrationEnabled Is Sales Order Integration Enabled Boolean Enable sales order processing integration.
IsUserAccessAuditEnabled Is User Access Auditing Enabled Boolean Enable or disable auditing of user access.
ISVIntegrationCode ISV Integration Mode Picklist Indicates whether loading of Microsoft Dynamics CRM in a browser window that does not have address, tool, and menu bars is enabled.
KbPrefix Article Prefix String Prefix to use for all articles in Microsoft Dynamics CRM.
LanguageCode Language Integer Preferred language for the organization.
LocaleId Locale Integer ID of the locale of the organization.
LongDateFormatCode Long Date Format Integer Information that specifies how the Long Date format is displayed in Microsoft Dynamics CRM.
MaxAppointmentDurationDays Max Appointment Duration Integer Maximum number of days an appointment can last.
MaximumActiveBusinessProcessFlowsAllowedPerEntity Maximum active business process flows per entity Integer Maximum number of active business process flows allowed per entity
MaximumTrackingNumber Max Tracking Number Integer Maximum tracking number before recycling takes place.
MaxRecordsForExportToExcel Max Records For Excel Export Integer Maximum number of records that will be exported to a static Microsoft Office Excel worksheet when exporting from the grid.
MaxRecordsForLookupFilters Max Records Filter Selection Integer Maximum number of lookup and picklist records that can be selected by user for filtering.
MaxUploadFileSize Max Upload File Size Integer Maximum allowed size of an attachment.
MetadataSyncLastTimeOfNeverExpiredDeletedObjects The last date/time for never expired metadata tracking deleted objects DateTime What is the last date/time where there are metadata tracking deleted objects that have never been outside of the expiration period.
MetadataSyncTimestamp Metadata sync version BigInt Contains the maximum version number for attributes used by metadata synchronization that have changed.
MinAddressBookSyncInterval Min Address Synchronization Frequency Integer Normal polling frequency used for address book synchronization in Microsoft Office Outlook.
MinOfflineSyncInterval Min Offline Synchronization Frequency Integer Normal polling frequency used for background offline synchronization in Microsoft Office Outlook.
MinOutlookSyncInterval Min Synchronization Frequency Integer Minimum allowed time between scheduled Outlook synchronizations.
ModifiedBy Modified By Lookup ID of the user who last modified the organization.
ModifiedOn Modified On DateTime Date and time when the organization was last modified.
ModifiedOnBehalfBy Modified By (Delegate) Lookup ID of the delegate user who last modified the organization.
Name Organization Name String Name of the organization. The name is set when Microsoft Dynamics CRM is installed and should not be changed.
NegativeCurrencyFormatCode Negative Currency Format Integer Information that specifies how negative currency numbers are displayed throughout Microsoft Dynamics CRM.
NegativeFormatCode Negative Format Picklist Information that specifies how negative numbers are displayed throughout Microsoft Dynamics CRM.
NextCustomObjectTypeCode Next Entity Type Code Integer Next entity type code to use for custom entities.
NextTrackingNumber Next Tracking Number Integer Next token to be placed on the subject line of an email message.
NotifyMailboxOwnerOfEmailServerLevelAlerts Notify Mailbox Owner Of Email Server Level Alerts Boolean Indicates whether mailbox owners will be notified of email server profile level alerts.
NumberFormat Number Format String Specification of how numbers are displayed throughout Microsoft Dynamics CRM.
NumberGroupFormat Number Grouping Format String Specifies how numbers are grouped in Microsoft Dynamics CRM.
NumberSeparator Number Separator String Symbol used for number separation in Microsoft Dynamics CRM.
OrderPrefix Order Prefix String Prefix to use for all orders throughout Microsoft Dynamics CRM.
OrganizationId Organization Unique identifier ID of the organization.
OrgDbOrgSettings Organization Database Organization Settings String Organization settings stored in Organization Database.
ParsedTableColumnPrefix Parsed Table Column Prefix String Prefix used for parsed table columns.
ParsedTablePrefix Parsed Table Prefix String Prefix used for parsed tables.
PastExpansionWindow Past Expansion Window Integer Specifies the maximum number of months in past for which the recurring activities can be created.
PinpointLanguageCode Pinpoint Language Code Integer Language code to use for Pinpoint.
PMDesignator PM Designator String PM designator to use throughout Microsoft Dynamics CRM.
PricingDecimalPrecision Pricing Decimal Precision Integer Number of decimal places that can be used for prices.
PrivilegeUserGroupId Privilege User Group Unique identifier ID of the default privilege for users in the organization.
QuickFindRecordLimitEnabled Quick Find Record Limit Enabled Boolean Indicates whether a quick find record limit should be enabled for this organization (allows for faster Quick Find queries but prevents overly broad searches).
QuotePrefix Quote Prefix String Prefix to use for all quotes throughout Microsoft Dynamics CRM.
RecurrenceDefaultNumberOfOccurrences Recurrence Default Number of Occurrences Integer Specifies the default value for number of occurrences field in the recurrence dialog.
RecurrenceExpansionJobBatchInterval Recurrence Expansion Job Batch Interval Integer Specifies the interval (in seconds) for pausing expansion job.
RecurrenceExpansionJobBatchSize Recurrence Expansion On Demand Job Batch Size Integer Specifies the value for number of instances created in on demand job in one shot.
RecurrenceExpansionSynchCreateMax Recurrence Expansion Synchronization Create Maximum Integer Specifies the maximum number of instances to be created synchronously after creating a recurring appointment.
ReferenceSiteMapXml Reference SiteMap XML String XML string that defines the navigation structure for the application. This is the site map from the previously upgraded build and is used in a 3-way merge during upgrade.
RenderSecureIFrameForEmail Render Secure Frame For Email Boolean Flag to render the body of email in the Web form in an IFRAME with the security='restricted' attribute set. This is additional security but can cause a credentials prompt.
ReportScriptErrors Report Script Errors Picklist Picklist for selecting the organization preference for reporting scripting errors.
RequireApprovalForQueueEmail Is Approval For Queue Email Required Boolean Indicates whether Send As Other User privilege is enabled.
RequireApprovalForUserEmail Is Approval For User Email Required Boolean Indicates whether Send As Other User privilege is enabled.
SampleDataImportId Sample Data Import Unique identifier ID of the sample data import job.
SchemaNamePrefix Customization Name Prefix String Prefix used for custom entities and attributes.
ShareToPreviousOwnerOnAssign Share To Previous Owner On Assign Boolean Information that specifies whether to share to previous owner on assign.
ShowWeekNumber Show Week Number Boolean Information that specifies whether to display the week number in calendar displays throughout Microsoft Dynamics CRM.
SignupOutlookDownloadFWLink CRMForOutlookDownloadURL String Specifies the Microsoft Dynamics CRM for Outlook download URL.
SiteMapXml SiteMap XML Memo XML string that defines the navigation structure for the application.
SQMEnabled Is SQM Enabled Boolean Setting for SQM data collection, 0 no, 1 yes enabled
SupportUserId Support User Unique identifier ID of the support user for the organization.
SystemUserId System User Unique identifier ID of the system user for the organization.
TagMaxAggressiveCycles Auto-Tag Max Cycles Integer Maximum number of aggressive polling cycles executed for email auto-tagging when a new email is received.
TagPollingPeriod Auto-Tag Interval Integer Normal polling frequency used for email receive auto-tagging in Outlook.
TimeFormatCode Time Format Code Picklist Information that specifies how the time is displayed throughout Microsoft Dynamics CRM.
TimeFormatString Time Format String String Text for how time is displayed in Microsoft Dynamics CRM.
TimeSeparator Time Separator String Text for how the time separator is displayed throughout Microsoft Dynamics CRM.
TokenExpiry Token Expiration Duration Integer Duration used for token expiration.
TokenKey Token Key String Token key.
TrackingPrefix Tracking Prefix String History list of tracking token prefixes.
TrackingTokenIdBase Tracking Token Base Integer Base number used to provide separate tracking token identifiers to users belonging to different deployments.
TrackingTokenIdDigits Tracking Token Digits Integer Number of digits used to represent a tracking token identifier.
UniqueSpecifierLength Unique String Length Integer Number of characters appended to invoice, quote, and order numbers.
UserAccessAuditingInterval User Authentication Auditing Interval Integer The interval at which user access is checked for auditing.
UseReadForm Use Read-Optimized Form Boolean Indicates whether the read-optimized form should be enabled for this organization.
UserGroupId User Group Unique identifier ID of the default group of users in the organization.
UseSkypeProtocol User Skype Protocol Boolean Indicates default protocol selected for organization.
UTCConversionTimeZoneCode UTC Conversion Time Zone Code Integer Time zone code that was in use when the record was created.
V3CalloutConfigHash V3 Callout Hash String Hash of the Microsoft Dynamics CRM 3.0 callout configuration file.
VersionNumber Version Number BigInt Version number of the organization.
WeekStartDayCode Week Start Day Code Picklist Designated first day of the week throughout Microsoft Dynamics CRM.
YammerGroupId Yammer Group Id Integer Denotes the Yammer group ID.
YammerNetworkPermalink Yammer Network Permalink String Denotes the Yammer network permalink
YammerOAuthAccessTokenExpired Yammer OAuth Access Token Expired Boolean Denotes whether the OAuth access token for Yammer network has expired
YammerPostMethod Internal Use Only Picklist For internal use only.
YearStartWeekCode Year Start Week Code Integer Information that specifies how the first week of the year is specified in Microsoft Dynamics CRM.

Monday 31 March 2014

Business Process Error with ActivityFeeds.Plugins

I was migrating a plugin to a new environment and then during testing someone indicated they were getting a Business Process Error.

As I wasn't getting it in my test I stubbornly refused to believe it was me!


I discovered that I had created a plugin step in the Activity Feed plugin!

So if you get a Business Process Error in the ActivityFeeds.Plugins then I suggest you look for some plugin steps in the corresponding item (in my case ActivityClose).

Wednesday 19 February 2014

Dynamics CRM 2013 - Can't view Lookup options on Bulk Edit

We had a CRM 2011 instance that updated to 2013 and at first glance everything went well. However two seeming unrelated issues appears.

  1. When clicking on a particular lookup an error was thrown.
  2. When trying to do a Bulk Edit the Lookup options would not appear.



The problem in the end was related and (sadly) caused by me.

On change of a particular Lookup we created a custom view for another. This custom view called a small function that formatted special characters correctly. This caused an error in global.ashx which I of course presumes was Microsoft's fault!

The small function was using jQuery and this jQuery version now conflicts in 2013.

To fix this we used
My$ = jQuery.noConflict(true);

Then using My$ instead of $ fixed the issue and both errors went away. So if you have an issue with Lookups not displaying in 2013 that did not occur in 2011 this is worth investigating.