Wednesday, 25 February 2009

Window.opener stuff

Formatting Telephone Numbers

Sunday, 22 February 2009

Create CRM 4.0 form buttons

Re-Release of Update Rollup 2 - V2

Microsoft Dynamics CRM Wiki

Tuesday, 17 February 2009

Modifying the Convert Lead Web dialog box

Thursday, 12 February 2009

Round-robin Lead assignment

Tuesday, 10 February 2009

Hide the Whole Application Menu Toolbar

ISV.Config XML Reference

Monday, 9 February 2009

Form Events

var FormEventId_None = 0;
var FormEventId_Save = 1;
var FormEventId_SaveAndClose = 2;
var FormEventId_Delete = 3;
var FormEventId_Load = 4;
var FormEventId_Deactivate = 5;
var FormEventId_Reactivate = 6;
var FormEventId_EmailSend = 7;
var FormEventId_EmailReply = 8;
var FormEventId_EmailForward = 9;
var FormEventId_KbSubmit = 10;
var FormEventId_KbReject = 11;
var FormEventId_KbPublish = 12;
var FormEventId_KbUnPublish = 13;
var FormEventId_KbRate = 14;
var FormEventId_LeadUnqualify = 15;
var FormEventId_LeadQualify = 16;
var FormEventId_QuoteAccept = 17;
var FormEventId_QuoteCreateOrder = 18;
var FormEventId_OrderProcessOrder = 19;
var FormEventId_OpportunityAddRelatedOrder = 21;
var FormEventId_OpportunityAddRelatedQuote = 22;
var FormEventId_OpportunityAddRelatedInvoice = 23;
var FormEventId_QuoteCreateRevision = 24;
var FormEventId_QuoteCloseQuote = 25;
var FormEventId_OrderCancelOrder = 26;
var FormEventId_InvoiceClose = 27;
var FormEventId_QuoteGetProducts = 28;
var FormEventId_QuoteActivate = 29;
var FormEventId_EmailReplyAll = 30;
var FormEventId_ContractHold = 31;
var FormEventId_ContractReleaseHold = 32;
var FormEventId_ContractCancel = 33;
var FormEventId_ContractRenew = 34;
var FormEventId_ProductConvertToKit = 35;
var FormEventId_ProductConvertFromKit = 36;
var FormEventId_ContractDetailCancel = 37;
var FormEventId_ContractInvoice = 38;
var FormEventId_ContractClone = 39;
var FormEventId_IncidentCancel = 40;
var FormEventId_EmailAssign = 41;
var FormEventId_ChangeSalesStage = 42;
var FormEventId_SalesOrderGetProducts = 43;
var FormEventId_InvoiceGetProducts = 44;
var FormEventId_TemplateMakeOrgAvailable = 45;
var FormEventId_TemplateMakeOrgUnavailable = 46;
var FormEventId_Assign = 47;
var FormEventId_IncidentAssignToUser = 49;
var FormEventId_OrderLock = 50;
var FormEventId_OrderUnlock = 51;
var FormEventId_InvoiceLock = 52;
var FormEventId_InvoiceUnlock = 53;
var FormEventId_ConvertResponse = 54;
var FormEventId_ReportMakeOrgAvailable = 60;
var FormEventId_ReportMakeOrgUnavailable = 61;
var FormEventId_WorkflowAddCheckStep = 62;
var FormEventId_WorkflowUpdateCondition = 63;
var FormEventId_WorkflowCreateAction = 64;
var FormEventId_SendInvite = 65;
var FormEventId_WorkflowAddElseIfStep = 66;
var FormEventId_WorkflowAddElseStep = 67;
var FormEventId_WorkflowDeleteStep = 68;

from: \_static\_common\scripts\formevt.js

Convert a Text Field to Label

Embedding related record link in Email

Cloning an Entity Using JavaScript

Display Fetch in Iframes

Creating Collapsible Form Sections

Quick MS CRM CTI Integration

Adding Presence to CRM Form fields

add to Form onLoad event:

var ocs = new ActiveXObject("Name.NameCtrl");


function OnCrmPageLoad()
{
AddPresence( "emailaddress1" , 0 );
AddPresence( "telephone1" , 0 );
}

function AddPresence( elementId , tabIndex )
{
if( typeof(ocs) == "object" )
{
var element = document.getElementById( elementId );
element.tab = tabIndex;
element.attachEvent( "onmouseover" , ShowOOUI );
element.attachEvent( "onmouseout" , HideOOUI );
window. attachEvent( "onscroll" , HideOOUI );
}
}


// show Messenger icons
function ShowOOUI()
{
var element = event.srcElement;
var elemVal = element.DataValue;
if( !(element && elemVal) )
return;

var offsetX = -20;
var offsetY = -2;

for (var parent = element; parent; parent = parent.offsetParent)
{
if (parent.offsetLeft)
{
offsetX += parent.offsetLeft;
}

if (parent.offsetTop)
{
offsetY += parent.offsetTop;
}
}

var scrollTop = document.getElementById("tab" + element.tab).scrollTop;
ocs.ShowOOUI(elemVal, 0, offsetX + element.offsetWidth, offsetY - scrollTop);
}

function HideOOUI()
{
ocs.HideOOUI();
}

OnCrmPageLoad();


from here: http://mscrm4ever.blogspot.com/2008/09/adding-presence-to-crm-form-fields.html

Creating an UpDown Control

Show / Hide Crm Form Toolbar buttons

Hidden buttons reappear when resizing a crmForm

HideButton = function()
{
var ULListItems = document.getElementById(”mnuBar1″).rows[0].cells[0].getElementsByTagName(”UL”)[0].getElementsByTagName(”LI”);
for(var i=0; i -1)
{
ULListItems[i].style.display = “none”;
}
}
}

// Execute the function when loading the form
HideButton();

// Execute the function when the form is resized.
window.onresize = HideButton;


from here: http://kennyvaes.wordpress.com/2009/02/03/hidden-buttons-reappear-when-resizing-a-crmform/

Putting a DateTime value in a CrmDateTime field

When you want to assign a DateTime value to a CrmDateTime field while using the Webservice API it is not as simple as converting the DateTime field to a string and assigning the value.

The string has to be in a specific format.

CrmDateTime sEndDate = new CrmDateTime(MyDateTimeValue.ToString(“s”));


from here: http://kennyvaes.wordpress.com/2009/02/03/putting-a-datetime-value-in-a-crmdatetime-field/

Hiding custom buttons in CRM 4.0 Toolbar

var ULListItems = document.getElementById("mnuBar1").rows[0].cells[0].getElementsByTagName("UL")[0].getElementsByTagName("LI");
for(var i=0; i -1)
{
ULListItems[i].style.display = "none";
}
}

from here: http://kennyvaes.wordpress.com/2009/02/03/hiding-custom-buttons-in-crm-40-toolbar/

Sunday, 8 February 2009

Extending duplicate detection with Soundex algorithm

Instructions here: http://advantageworks.blogspot.com/2008/01/extending-duplicate-detection-with.html

Algorithm script from here: http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm

 /*
* v 1.0d TESTED-OK 20060112
* -----------------------
*
* The following SoundEx function is:
*
* (C) Copyright 2002 - 2006, Creativyst, Inc.
* ALL RIGHTS RESERVED
*
* For more information go to:
* http://www.Creativyst.com
* or email:
* Support@Creativyst.com
*
* Redistribution and use in source and binary
* forms, with or without modification, are
* permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must
* retain the above copyright notice, this
* list of conditions and the following
* disclaimer.
*
* 2. Redistributions in binary form must
* reproduce the above copyright notice,
* this list of conditions and the
* following disclaimer in the
* documentation and/or other materials
* provided with the distribution.
*
* 3. All advertising materials mentioning
* features or use of this software must
* display the following acknowledgement:
* This product includes software developed
* by Creativyst, Inc.
*
* 4. The name of Creativyst, Inc. may not be
* used to endorse or promote products
* derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY CREATIVYST CORPORATION
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
* WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
function SoundEx(WordString, LengthOption, CensusOption)
{
var TmpStr;
var WordStr = "";
var CurChar;
var LastChar;
var SoundExLen = 10;
var WSLen;
var FirstLetter;

if(CensusOption) {
LengthOption = 4;
}

if(LengthOption != undefined) {
SoundExLen = LengthOption;
}
if(SoundExLen > 10) {
SoundExLen = 10;
}
if(SoundExLen < 4) {
SoundExLen = 4;
}

if(!WordString) {
return("");
}

WordString = WordString.toUpperCase();

/* Clean and tidy
*/
WordStr = WordString;


WordStr = WordStr.replace(/[^A-Z]/gi, " "); // rpl non-chars w space
WordStr = WordStr.replace(/^\s*/g, ""); // remove leading space
WordStr = WordStr.replace(/\s*$/g, ""); // remove trailing space



if(!CensusOption) {
/* Some of our own improvements
*/
WordStr = WordStr.replace(/DG/g, "G"); // Change DG to G
WordStr = WordStr.replace(/GH/g, "H"); // Change GH to H
WordStr = WordStr.replace(/GN/g, "N"); // Change GN to N
WordStr = WordStr.replace(/KN/g, "N"); // Change KN to N
WordStr = WordStr.replace(/PH/g, "F"); // Change PH to F
WordStr =
WordStr.replace(/MP([STZ])/g, "M$1"); // MP if fllwd by ST|Z
WordStr = WordStr.replace(/^PS/g, "S"); // Chng leadng PS to S
WordStr = WordStr.replace(/^PF/g, "F"); // Chng leadng PF to F
WordStr = WordStr.replace(/MB/g, "M"); // Chng MB to M
WordStr = WordStr.replace(/TCH/g, "CH"); // Chng TCH to CH
}





/* The above improvements
* may change this first letter
*/
FirstLetter = WordStr.substr(0,1);


/* in case 1st letter is
* an H or W and we're in
* CensusOption = 1
*/
if(FirstLetter == "H" || FirstLetter == "W") {
TmpStr = WordStr.substr(1);
WordStr = "-";
WordStr += TmpStr;
}


/* In properly done census
* SoundEx the H and W will
* be squezed out before
* performing the test
* for adjacent digits
* (this differs from how
* 'real' vowels are handled)
*/
if(CensusOption == 1) {
WordStr = WordStr.replace(/[HW]/g, ".");
}


/* Begin Classic SoundEx
*/
WordStr = WordStr.replace(/[AEIOUYHW]/g, "0");
WordStr = WordStr.replace(/[BPFV]/g, "1");
WordStr = WordStr.replace(/[CSGJKQXZ]/g, "2");
WordStr = WordStr.replace(/[DT]/g, "3");
WordStr = WordStr.replace(/[L]/g, "4");
WordStr = WordStr.replace(/[MN]/g, "5");
WordStr = WordStr.replace(/[R]/g, "6");



/* Properly done census:
* squeze H and W out
* before doing adjacent
* digit removal.
*/
if(CensusOption == 1) {
WordStr = WordStr.replace(/\./g, "");
}



/* Remove extra equal adjacent digits
*/
WSLen = WordStr.length;
LastChar = "";
TmpStr = "";
// removed v10c djr: TmpStr = "-"; /* rplcng skipped first char */

for(i = 0; i < WSLen; i++) {
CurChar = WordStr.charAt(i);
if(CurChar == LastChar) {
TmpStr += " ";
}
else {
TmpStr += CurChar;
LastChar = CurChar;
}
}
WordStr = TmpStr;


WordStr = WordStr.substr(1); /* Drop first letter code */
WordStr = WordStr.replace(/\s/g, ""); /* remove spaces */
WordStr = WordStr.replace(/0/g, ""); /* remove zeros */
WordStr += "0000000000"; /* pad with zeros on right */

WordStr = FirstLetter + WordStr; /* Add first letter of word */

WordStr = WordStr.substr(0,SoundExLen); /* size to taste */

return(WordStr);
}

Monday, 2 February 2009

SiteMap: Control whether a subarea is displayed for a given user