Monday, February 02, 2009

Improving MS CRM Performance and Securing Data with SQL 2008

Microsoft just released a white paper today on improving CRM performance and securing data with SQL 2008. The paper contains great information on how to leverage SQL Server 2008 features such as Compression, Filtered Indexes, Data Encryption, etc… to improve MS CRM Performance if implemented correctly.

Also this paper contains an overview of MS SQL Server 2008 features and some benchmark results and recommendations from Microsoft.

So download and read it as soon as you can. you may download this paper from Microsoft’s website by clicking on the link below. Enjoy reading this white paper. :)

http://www.microsoft.com/downloads/details.aspx?FamilyID=b5bb47a4-5ece-4a2a-a9b5-5435264f627d&DisplayLang=en

Monday, January 26, 2009

Happy Chinese New Year

Happy Chinese New Year of the Ox! Let this year be a BULL year for CRM around the world!

Tuesday, January 20, 2009

Chinese Restaurants around Indianapolis

My company’s head quarter is located in Indianapolis, so I travel to Indiana a lot for work since most of my projects are around Indianapolis and South Bend. Since I work in Indiana so much, I want to find an “authentic, authentic” Chinese restaurant where all local Chinese eat at. I finally found one and I also believed it’s the only one Chinese restaurant people will go for dinner and dim sum.

The restaurant name is Great Garden, it’s located in Indianapolis (Not so safe area according to my co-workers). The address of the restaurant is 3623 Commercial Dr. Indianapolis, IN 46222 and the phone number is 317-290-2628.

I did a search online and I found a Chinese forum for international students listed all of the acceptable Chinese, Japanese and Korean restaurant around Indianapolis. I copied and pasted on my blog just in case you are looking for authentic Chinese, Japanese, and Korean food. I will try the all restaurants indicated below and let all of you know if it’s acceptable according to my standard. :) I am really picky on food.

Chinese

Great Garden
3623 Commercial Dr.
Indianapolis, IN 46222
Tel:317-290-2628

Shen Yang
3902 Georgetown Rd.
(317) 280-1978

The Journey
7155 E. 96th St.
Indianapolis IN, 46250

Japanese

Asaka Japanese Restaurant
6414 E 82ND St
Indianapolis, IN 46250-1584
(317) 576-0556

Sakura Japanese Restaurant
7201 N Keystone Ave
Indianapolis, IN 46240-3243
(317) 259-4171

Ocean World
1206 W 86th St
Indianapolis, IN 46260-2204
(317) 848-8901

Korean

Bando Restaurant
8015 Pendleton Pike
Phone: 897-8277

Dami
10989 Allisonville Road
Fishers, IN 46038

Mama's House Restaurant
8867 Pendleton Pike
Indianapolis, IN 46226-4111

Vietnamese

Saigon Restaurant
3103 Lafayette Rd.
Phone: 927-7270

Sizzling Wok
4351 Lafayette Road
Phone: 297-3441

King Wok
4150 Lafayette Rd
Indianapolis, IN 46254
(317) 295-8090

So enjoy!

Tuesday, December 30, 2008

CRM Online - InitializeEx() failed.

I created an ASP.net form and I tried to post the form data to CRM via the CRM web service. I was able to run the application locally on my development machine, however when I deployed my project to the server, I received the InitializeEx() failed error. The stack trace shows the following:

[ApplicationException: InitializeEx() failed.]
Microsoft.Crm.Passport.LogonManager.Initialize(String environment) +349
Microsoft.Crm.Passport.LogonManager.Logon(String userName, String password, String partner, String policy, String environment) +30

The reason that you received this error message is because the default app pool user does not have permission to initiate the msidcrl40.dll file which called by the IdCrlWrapper.dll

To resolve this issue, I added the following line to my web.config file

<identity impersonate="true" userName="[LOCAL ADMINISTRATOR USERNAME]" password="[ADMIN PASSWORD]" />
If you don't want to touch the web.config file, you may do it through your IIS if you have access to it. Right click on your web site to open up the Properties of your Web site, then click on the ASP.NET tab, then click on the Edit Configuration button.


ScreenHunter_01 Jan. 06 14.43

On the ASP.Net configuration setting screen, click on the Application tab. Check the Local Impersonation checkbox in the Identity settings section. Enter the local Administrator user name and password, then click OK to close the opened windows.

ScreenHunter_02 Jan. 06 14.45

I tried to run my application again and I was able to insert records into CRM from my ASP.net form now. Hope this can help you in your next CRM project.

Sunday, December 21, 2008

SQL 2008

I installed SQL 2008 on my desktop today so I can checkout the new 2008 features. Immediately I can tell you that I like the IntelliSense feature that's built-in to the SQL Management Studio 2008. The table names and field names automatically popup for you. This makes SQL programming much easier.

ScreenHunter_01 Dec. 21 16.45

Also I came across a problem when I try to modify a table already existed in a database, it gave me a error telling me that "Saving changes is not permitted". I do a live search, I found the answer from Robert John MacLean's blog. All I have to do is to go to Tools | Options | Designers in SQL Management Studio 2008, uncheck the "Prevent saving changes that require table re-creation" option and click "OK". Now I can save my changes to the table.

ScreenHunter_02 Dec. 21 16.53

Friday, December 19, 2008

Create Activities using the Dynamic Entity Way

I haven't touch CRM SDK for a while since I am working on another project not directly related to CRM. One of my old client required us to populate CRM with some more training data so they can use it for their training. So I have to modify the training processor that my teammates wrote to add activities to CRM. It appears to me that everything in the training processor have used Dynamic Entity for create, update, and delete.

To create an activities using dynamic entity is pretty straight forward, however I got stuck when I have to deal with the sender and recipient fields on a phone call, email, appointment and fax activity. Sender and Recipient field are ActivityParty type, I have done some research online and I was not able to find a way to associate the two fields to an activity using the dynamic approach. After going through the SDK and I was able to figure it out. I would like to share it since you might have to do the same in your next project.

Method 1: Not using Dynamic Entity

activityparty actParty = new activityparty();
actParty.partyid = new Lookup();
actParty.partyid.Value = new Guid("ENTER CONTACT GUID");
actParty.partyid.type = "contact";

activityparty actParty2 = new activityparty();
actParty2.partyid = new Lookup();
actParty2.partyid.Value = new Guid("ENTER USER GUID");
actParty2.partyid.type = "systemuser";

phonecall call = new phonecall();
call.from = new activityparty[] { actParty };
call.to = new activityparty[] { actParty2 };
call.description = "Test";

crmService.Create(call);



Method 2: Using Dynamic Entity




Property subject = new StringProperty();
((StringProperty)subject).Name = "subject";
((StringProperty)subject).Value = "Test";

Property description = new StringProperty();
((StringProperty)description).Name = "description";
((StringProperty)description).Value = "Test";

// Create From:
Property party1 = new LookupProperty();
((LookupProperty)party1).Name = "partyid";
((LookupProperty)party1).Value = new Lookup();
((LookupProperty)party1).Value.type = "contact";
((LookupProperty)party1).Value.Value = new Guid("ENTER CONTACT GUID");

DynamicEntity actParty1 = new DynamicEntity();
actParty1.Name = "activityparty";
actParty1.Properties = new Property[] { party1 };

DynamicEntityArrayProperty from = new DynamicEntityArrayProperty();
((DynamicEntityArrayProperty)from).Name = "from";
((DynamicEntityArrayProperty)from).Value = new DynamicEntity[] { actParty1 };

// Create To:
Property party2 = new LookupProperty();
((LookupProperty)party2).Name = "partyid";
((LookupProperty)party2).Value = new Lookup();
((LookupProperty)party2).Value.type = "systemuser";
((LookupProperty)party2).Value.Value = new Guid("ENTER USER GUID");

DynamicEntity actParty2 = new DynamicEntity();
actParty2.Name = "activityparty";
actParty2.Properties = new Property[] { party2 };

DynamicEntityArrayProperty to = new DynamicEntityArrayProperty();
((DynamicEntityArrayProperty)to).Name = "to";
((DynamicEntityArrayProperty)to).Value = new DynamicEntity[] { actParty2 };

 

// Create Phone Call Activity:
DynamicEntity activity = new DynamicEntity();
activity.Name = EntityName.phonecall.ToString();
activity.Properties = new Property[]{subject, description, from, to};

TargetCreateDynamic target = new TargetCreateDynamic();
target.Entity = activity;

CreateRequest request = new CreateRequest();
request.Target = target;

CreateResponse response = (CreateResponse)crmService.Execute(request);




That's it! Hope this will help you in your next project! :)

Wednesday, December 17, 2008

CRM 4.0 - Install CRM Language Pack

It's my first time using Camtasia, I just want to make a simple video to test Camtasia and to see if it works on my blog.

Cool, it works!