Delegate, Anonymous Methods and Lambda Expressions in C#

Delegate acts as a function pointer.

We define the function to which the delegate can point to in this manner

// Delegate which will point to a method which has no parameter and returns nothing

public delegate void MySimpleDelegate();

// Delegate which will point to a method which takes string as parameter and returns string as well

public delegate string MyComplexDelegate(string message);

 

Now comes our two function to which delegates would be pointing 

public void SimpleDelegate(){

MessageBox.Show(“My Simple Delegate”);

}  

public string ComplexDelegate(string name){

MessageBox.Show(name);

return “Hi “ + name;

} 

// We have created an instance of our MySimpleDelegate

// which would be referencing SimpleDelegate function

MySimpleDelegate myD = SimpleDelegate;

// when we call the delegate it calls the method which it is pointing to

myD();

// Same thing with our MyComplexDelegate

MyComplexDelegate myAD = AnotherDelegate;

myAD(“Hello”);

 

// If we know that our function SimpleDelegate() and ComplexDelegate(string name)

// wouldn’t be called by any other code other than the delegate itself we can

// make use of anonymous method i.e. method with no name

// Here again we have done the same thing but used anonymous method

// because we aren’t going to use it anywhere else

MySimpleDelegate myD = delegate

{

MessageBox.Show(“Simple Delegate”);

};

myD();

MyComplexDelegate myAD = delegate(String name)

{

MessageBox.Show(name);

return “Hi “ + name;

};

myAD(“Hello”);

// Now let’s shorten our code further using lambda expression

// () -> no input parameter

// => -> lambda operator

// MessageBox.Show(“Simple delegate”) -> statement block

MySimpleDelegate myD = () => MessageBox.Show(“Simple delegate”);

myD();

//(String name) -> explicitly typed parameter

MyComplexDelegate myAD = (String name) => { MessageBox.Show(name); return name; };

myAD(“Hello”);

 

Bye.

 

Modifying the Convert Lead Web dialog box in CRM

Hi,

We had a requirement of not allowing the user to convert the lead to an account or contact through the convert lead dialog box.

That required change the soucre code of the convert lead dialog box’s web page. (This is not supported)

I found the page at the following location

“C:\Program Files\Microsoft Dynamics CRM\CRMWeb\SFA\leads\dialogs\conv_lead.aspx”

Opened it in Visual Studio 2005

and used the div tag for hiding the check boxes for account and contact.

<tr >

<td>

<div style=”display:none;” >

<input class=”checkbox” type=”checkbox” id=”cbAddAccount” onclick=”updateUIState()” <%= (Microsoft.Crm.Security.User.GetPrivilege(CurrentUser, Privileges.CreateAccount )) ? “editable” : “disabled” %>>

</div>

</td>

<td>

<div style=”display:none;” >

<label for=”cbAddAccount”><% =Microsoft.Crm.CrmEncodeDecode.CrmHtmlEncode(Util.GetFmtObjName(Util.Account, Util.NameFormatStyle.Singular)) %></label>

</div>

</td>

</tr>

<tr >

<td>

<div style=”display:none;” >

<input class=”checkbox” type=”checkbox” id=”cbAddContact” onclick=”updateUIState()” <%= (Microsoft.Crm.Security.User.GetPrivilege(CurrentUser, Privileges.CreateContact )) ? “editable” : “disabled” %>>

</div>

</td>

<td>

<div style=”display:none;” >

<label for=”cbAddContact”><% =Microsoft.Crm.CrmEncodeDecode.CrmHtmlEncode(Util.GetFmtObjName(Util.Contact, Util.NameFormatStyle.Singular)) %></label>

</div>

</td>

</tr>

It worked !!

Bye..

Customization Import failed. Error: OrganizationUI With Id =…… Does Not Exist or Failure: new_…: The requested record was not found or you do not have sufficient permissions to view it.

I was getting this error when i was trying to import customization for one of our custom entity from our development server to test server.

The way i resolved was

1) Opened the customization.xml file i was trying to import.

2) Search for the organization id which was mentioned in the event log as one not existing. (OrganizationUI With Id = 42467170-73ec-4b39-8eca-309ab0daece9 Does Not Exist)

3) I found the id in the  <FormXml id=”{42467170-73ec-4b39-8eca-309ab0daece9}”> tag.

4) I exported the customization for the same entity from my test server.

5) In the customization file(test server) i found out it had different id for FormXml.

6) Replace the id value for FormXml in the development server’s customization with id i found at the test server for the same entity.

7) Than i tried importing this newly modified file and it imported without giving any error.

Bye…

Setting Built In and Custom Document Properties using C#

Create a new windows application project and add a button to it.

On click of that button, we will open a document and add values for a built in and custom document properties.

Than add reference to (Word 10.0 or 11.0 object library) and Microsoft.Office.Core.dll within COM tab of Add reference dialog box.

After adding reference, add this directive

using Microsoft.Office.Interop.Word

using System.Reflection;

Put the following code in the button click event handler

// For optional parameters create a missing object

object missing = System.Reflection.Missing.Value;

// Create an object for filename which is the file to be opened

object fileName = @”C:\MySecond.doc”;

// Create an object of application class

ApplicationClass WordApp = new ApplicationClass();

// open the document specified in the fileName variable

Document adoc = WordApp.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing);

 

// setting the document built in properties

object oDocBuiltInProps = adoc.BuiltInDocumentProperties;

Type typeDocBuiltInProps = oDocBuiltInProps.GetType();

// setting the Title property with value “My Proposal”

string strIndex = “Title”;

string strValue = “My Proposal”;

typeDocBuiltInProps.InvokeMember(“Item”,

BindingFlags.Default |

BindingFlags.SetProperty,

null, oDocBuiltInProps,

new object[] { strIndex, strValue });

 

 

// setting the custome document properties

object oDocCustomProps = adoc.CustomDocumentProperties;

Type typeDocCustomProps = oDocCustomProps.GetType();

// setting the ProposalSentDate custom date property with current date time

string strIndex1 = “ProposalSentDate”;

string strValue1 = DateTime.Now.ToShortDateString();

object[] oArg = { strIndex1, false, Microsoft.Office.Core.MsoDocProperties.msoPropertyTypeDate, strValue1 };

typeDocCustomProps.InvokeMember(“Add”,

BindingFlags.Default |

BindingFlags.InvokeMethod, null,

oDocCustomProps,oArg);

 

WordApp.Visible = true;

 

Byee…

Creating and Updating table of contents in word document using C#

Create a new windows application project and add a button to it.

On click of that button, we will open a document and first add a heading 1 programmatically and then insert a table of content programmatically and update it

Than we will add reference to (Word 10.0 or 11.0 object library) within COM tab of Add reference dialog box.

After adding reference, we’ll add this directive using Microsoft.Office.Interop.Word than we’ll put the following code in the button click event handler

// For optional parameters create a missing object

object missing = System.Reflection.Missing.Value;

// Create an object for filename which is the file to be opened

object fileName = @”C:\MySecond.doc”;

// Create an object of application class

ApplicationClass WordApp = new ApplicationClass();

// open the document specified in the fileName variable

Document adoc = WordApp.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing);

Range myRange = adoc.Range(ref missing, ref missing);

myRange.InsertAfter(“Hello Mickey Mouse GG “);

object oStyleName = “Heading 1”;

myRange.set_Style(ref oStyleName);

object start=WordApp.ActiveDocument.Content.End – 1;

Range rangeForTOC = adoc.Range(ref start, ref missing);

TableOfContents toc=adoc.TablesOfContents.Add(rangeForTOC, ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);

toc.Update();

Range rngTOC = toc.Range;

rngTOC.Font.Size = 10;

rngTOC.Font.Name = Georgia;

WordApp.Visible = true;

Bye…

Opening and inserting a picture in word document programmatically using C#

Create a new windows application project and add a button to it.

On click of that button, we will open a document and insert a picture to it.

(In the doc file insert a table at the location where you want the picture to appear.)

Than add reference to (Word 10.0 or 11.0 object library) within COM tab of Add reference dialog box.

After adding reference, add this directive

using Microsoft.Office.Interop.Word

Put the following code in the button click event handler

// For optional parameters create a missing object

object missing = System.Reflection.Missing.Value;

// Create an object for filename, which is the file to be opened

object fileName=@”C:\MySecond.doc”;

// Create an object of application class

ApplicationClass WordApp = new ApplicationClass();

// open the document specified in the fileName variable

Document adoc = WordApp.Documents.Open(ref fileName, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,

ref missing, ref missing, ref missing);

// We can insert the picture using Range objects AddPicture method

// To insert a picture at a particular location in the word document

// insert a table over there and then refer that location through range object

Range rngPic = adoc.Tables[1].Range;

// we can even select a particular cell in the table

//Range rngPic = rng.Tables[1].Cell(2, 3).Range;

rngPic.InlineShapes.AddPicture(@”C:\anne_hathaway.jpg”, ref missing, ref missing, ref missing);

WordApp.Visible = true;

 

Bye