Monday, April 21, 2014

Debug App that Uses ADFS: The SecurityToken is rejected because the validation time is out of range

When debugging an app which connected to CRM using IFD connection I kept getting the following in the trace log. The issue was that debugging the call caused the time the ticket was generated to be off. In order to fix this I utilized a property that allows tickets to be off by a certain amount of time. The PowerShell command below will allow tickets to be out of the time range by 5 minutes.

Monday, March 10, 2014

Could Not Load Type System.ServiceModel .net 4 Web App

 

While attempting to load a .Net 4 website I kept getting a configuration error and the following item in the Event Log

Exception information:
    Exception type: ConfigurationErrorsException
    Exception message: Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

Turns our that IIS didn’t have all the .Net components installed.  To fix this you can run the following command which will update IIS with the correct .Net components.  Didn’t even require a reboot.

c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -iru

Thursday, March 6, 2014

Visual Studio Error: The given assembly name or codebase was invalid (HRESULT: 0x80131047)

When attempting to add a reference to a project this error kept appearing. 

image

I though it was because I had switched the project from .Net 3.0 to 3.5 but it turns out it was something else.  The problem turned out to be that the assembly path contained a comma (eg. C:\Libraries\MyLibrary{1-1-14, Customer}).  Once I moved the assembly to C:\Libraries it added correctly.

Wednesday, March 5, 2014

Pass XRM Ribbon Parameters Using JavaScript Array

Trying to pass the list of selected items from a grid using query parameters has limitations due to restrictions on the size of a URL.  Instead use JavaScript to pass Ribbon parameters to a variable on the XRM page and grab the data in the popup window.

Ribbon Command Setup
Here we pass the SelectedControlSelectedItemIds which will pass an object array of all the record ids that are selected on the home grid.

image

Ribbon JavaScript Web Resource
The web resource will data the ids and post them to a new variable in the main XRM window then opens a popup window.

image

AddApplicantsToCourse.htm
This popup page will get the ids from the page that opened it.  In order to do so we need to do the following:

-Include jQuery
-declare the array to hold the id values
-copy the values from the object in the parent page to the array you created

image

Friday, February 28, 2014

Calculate Date of Birth in SSRS

You can utilize this code in an Expression to find the Date of Birth.
=IIF(IsNothing(Fields!dateofbirth.Value), "",
IIF( ((Month(Now) - Month(Fields!dateofbirth.Value)) < 0) 
OR ((Month(Now) - Month(Fields!dateofbirth.Value)) = 0 
AND (Day(Now) - Day(Fields!dateofbirth.Value)) < 0), 
(Year(Now) - Year(Fields!dateofbirth.Value)) - 1,
(Year(Now) - Year(Fields!dateofbirth.Value))
))

Friday, February 14, 2014

Increase CRM Paging Limit for User

Below is an unsupported method for increasing the number of records in each page of a view.  This setting is individual to each users.  In the case below we are updating it for the user related to the DOMAIN\User account.  This is not recommended for normal user but I find it helpful when I need to add 2000 plugin steps to a solution.

UPDATE US
SET US.[PagingLimit] = 1000
FROM [Default_MSCRM].[dbo].[UserSettings] US
LEFT JOIN [Default_MSCRM].[dbo].[SystemUser] SU ON SU.SystemUserId = US.SystemUserId
WHERE SU.[DomainName] like 'DOMAIN\User'

Thursday, January 23, 2014

Create SharePoint Buttons on Administration Page

A long time ago I wrote a SharePoint administration page and had used the "Microsoft.SharePoint.Portal.WebControls" dll to create Ok and Cancel buttons at the bottom of the page.  Well I recently had a customer who wanted to use it but only had WSS and the page was erroring out when they tried to load it instead I ended up using another solution from Karine Bosch which is below.

Link to original article: http://karinebosch.wordpress.com/sharepoint-controls/buttonsectionascx-control/

 

To include a ButtonSection control on an application page you have to use the following syntax:

<wssuc:ButtonSection runat="server" ShowStandardCancelButton="true">
<template_buttons>
<asp:PlaceHolder runat="server">
<asp:Button id="SubmitButton" UseSubmitBehavior="false" runat="server" class="ms-ButtonHeightWidth"
Text="OK" OnClick="SubmitButton_Click" />
</asp:PlaceHolder>
</template_buttons>
</wssuc:ButtonSection>



Add also a directive at the top of the page:

<%@ Register TagPrefix="wssuc" TagName="ButtonSection" Src="/_controltemplates/ButtonSection.ascx" %>



Code for the OnClick event of the individual buttons needs to be written within a <script runat=”server” language=”C#”> tag on the application page or in the code behind class from which the application page inherits:

protected Button SubmitButton;        
public void SubmitButton_Click(object sender, System.EventArgs e)
{
// TODO: must save the changes proposed on the page
}



There are also a number of attributes you can set on the ButtonSection control:


  • ShowStandardCancelButton: if you set this property to true, a Cancel button is automatically added to the ButtonSection control. This cancel button will redirect the user to the previous page in the browser history.
  • ShowSectionLine: set this property to false if you don’t want a section line to be added above the buttons. The default value is true.
  • BottomSpacing: in case of long pages it is possible you want to add a button section at the top of the page and one at the bottom of the page. If you put a button section at the top of the page, you can set this property to a value higher than zero to add extra blank spacing between the button section and the controls that follow.
  • SmallSectionLine: if you set this boolean value to true, the section line will be 1px high; if set to false, the section line will be 2px high. The default is false.