Tuesday, April 22, 2008

Upgrading callouts to CRM 4.0

Hi again,
Busy as ever, I am still working on this large CRM project with lots of integrations. Very complex and very interesting.

At the moment we running CRM 3.0 but we are currently looking at upgrading to CRM 4.0 since we need to implement a new datamodell containing more than 40 very tighly connected entities with multiple relationships, self referentail relationships and much more! We are very lucky to be working with CRM 4.0.

The first part of the upgrade we are doing will be to just get everyting working in CRM 4.0 with as little or no code review as possible. We will lift all the code later (i.e. converting callouts to plug-ins, using the new web service and so on) when we have got everything running.

In other words, I first of all needed to get callouts from CRM 3.0 to work properly in CRM 4.0. After the "sleep-inducing-upgrade", I found that they simply didn't work. As I had made a few callouts that generated custom accountnumbers and other similar tasks, it became clear that it crashed because of the callouts.

I activated CRM tracing (http://support.microsoft.com/kb/907490/en-us) and soon found that the reason for the callouts not working was that CRM could not find the dll containing callout.base. So, I added the dll (Microsoft.Crm.Platform.Callout.Base.dll, found on the CRM 3.0 CD 1) to the GAC (C:\windows\assembly) and then ran iisreset.

After this, the callouts worked just like they should!

On the same topic, if you have a custom virtual directory bellow the CRM website, just add the file: C:\Program Files\Microsoft CRM\CRMWeb\bin\Microsoft.Crm.WebServices.dll to the GAC aswell, since it won't work otherwise. There are other ways of getting around this problem aswell, but I prefer this solution.

On the first of may I will be on parental leave for 4 months, so that I can really get to know my daughter without my wife getting in the way! ;)

Hopefully I will have time to write a bit on this blog aswell.

Gustaf Westerlund
Microsoft Dynamics CRM Architect

Logica Sweden
www.logica.com

p.s.
If you havn't tried Bio Shock on XBOX 360, you really should!

Tuesday, March 04, 2008

isv.config in CRM 4.0

I recently wanted to add a button in CRM 4.0 and I found that, even though there are many similarirties with CRM 3 there are some differences. I thought I'd share this with you and also some examples of it with a minimal (empty but working) isv.config and a one-button-in-order-version so that it will be easier for you to add your own buttons.

First of all, in CRM 4.0 there is no isv.config in the _resources folder any more. Not very strange since CRM 4.0 is multi-tennant and each tennant can have a unique isv.config. So, where is it? The most obvious place to look for it is in the "export customization" view, and surprise, there it is!

So, to change it in short, select isv.config from the export customizations and press select "export selected customizations" from the action menu. Save the zip-file somewhere, unzip the xml and open it in your favortite xml editor or notepad. When done, just import the xml directly (yes, it supports importing the xml file directly without zipping it first). If you have done your job correctly, there should be no problem, if not, you might get an error. Revert to an older version of the file (always save a backup before doing any changes) and then try a smaller change.

To activate isv.config customizations you have to "enable" these customizations from the web.config in the CRM web folder. Please see the SDK for more info.

To make things easier for you, here is the code in an empty/minimal isv.config (that has worked for me any how). There might be things that can be removed still, to make it smaller. Please leave a comment if you know of any. Please note the lcid:s (language code id:s) that appear all through, as you can see, this is the english version (1033).


<ImportExportXml version="4.0.0.0" languagecode="1033" generatedBy="OnPremise">
<Entities>
</Entities>
<Roles>
</Roles>
<Workflows>
</Workflows>
<IsvConfig>
<configuration version="3.0.0000.0">
<Root>
<NavBarAreas>
</NavBarAreas>
<!-- The main Global Menu Bar located at the top of all root level areas -->
<MenuBar>
<!-- Custom Menus that appear between the Goto Menu and the Help Menu -->
<CustomMenus>
<Menu>
</Menu>
</CustomMenus>
</MenuBar>
<!--
Application Level Tool Bar
-->
</Root>
<!-- Microsoft Customer Relationship Management Entities (Objects) -->
<Entities>
<Entity name="account" />
<Entity name="contact" />
<Entity name="lead" />
<Entity name="opportunity" />
<Entity name="list" />
<Entity name="campaign" />
<Entity name="campaignactivity" />
<Entity name="campaignresponse" />
<Entity name="incident" />
<!-- Case -->
<Entity name="quote" />
<Entity name="salesorder" />
<!-- Order -->
<Entity name="invoice" />
<!-- Custom Entities -->
<!-- <Entity name="new_myentity"/> -->
<!-- End Custom Entities -->
</Entities>
<!-- Microsoft Customer Relationship Management Service Management Customization -->
<ServiceManagement>
<AppointmentBook>
<SmoothScrollLimit>2000</SmoothScrollLimit>
<TimeBlocks>
<!-- All CSS Class mapping for Service activities -->
<TimeBlock EntityType="4214" StatusCode="1" CssClass="ganttBlockServiceActivityStatus1" />
<TimeBlock EntityType="4214" StatusCode="2" CssClass="ganttBlockServiceActivityStatus2" />
<TimeBlock EntityType="4214" StatusCode="3" CssClass="ganttBlockServiceActivityStatus3" />
<TimeBlock EntityType="4214" StatusCode="4" CssClass="ganttBlockServiceActivityStatus4" />
<TimeBlock EntityType="4214" StatusCode="6" CssClass="ganttBlockServiceActivityStatus6" />
<TimeBlock EntityType="4214" StatusCode="7" CssClass="ganttBlockServiceActivityStatus7" />
<TimeBlock EntityType="4214" StatusCode="8" CssClass="ganttBlockServiceActivityStatus8" />
<TimeBlock EntityType="4214" StatusCode="9" CssClass="ganttBlockServiceActivityStatus9" />
<TimeBlock EntityType="4214" StatusCode="10" CssClass="ganttBlockServiceActivityStatus10" />
<!-- All CSS Class mapping for Appointments -->
<TimeBlock EntityType="4201" StatusCode="1" CssClass="ganttBlockAppointmentStatus1" />
<TimeBlock EntityType="4201" StatusCode="2" CssClass="ganttBlockAppointmentStatus2" />
<TimeBlock EntityType="4201" StatusCode="3" CssClass="ganttBlockAppointmentStatus3" />
<TimeBlock EntityType="4201" StatusCode="4" CssClass="ganttBlockAppointmentStatus4" />
<TimeBlock EntityType="4201" StatusCode="5" CssClass="ganttBlockAppointmentStatus5" />
<TimeBlock EntityType="4201" StatusCode="6" CssClass="ganttBlockAppointmentStatus6" />
</TimeBlocks>
</AppointmentBook>
</ServiceManagement>
</configuration>
</IsvConfig>
<EntityMaps />
<EntityRelationships />
<Languages>
<Language>1033</Language>
<Language>1036</Language>
<Language>1031</Language>
<Language>3082</Language>
<Language>1053</Language>
</Languages>
</ImportExportXml>

And the one containing only one button:

<ImportExportXml version="4.0.0.0" languagecode="1033" generatedBy="OnPremise">
<Entities>
</Entities>
<Roles>
</Roles>
<Workflows>
</Workflows>
<IsvConfig>
<configuration version="3.0.0000.0">
<Root>
<NavBarAreas>
</NavBarAreas>
<!-- The main Global Menu Bar located at the top of all root level areas -->
<MenuBar>
<!-- Custom Menus that appear between the Goto Menu and the Help Menu -->
<CustomMenus>
<Menu>
</Menu>
</CustomMenus>
</MenuBar>
<!--
Application Level Tool Bar
-->
</Root>
<!-- Microsoft Customer Relationship Management Entities (Objects) -->
<Entities>
<Entity name="account" />
<Entity name="contact" />
<Entity name="lead" />
<Entity name="opportunity" />
<Entity name="list" />
<Entity name="campaign" />
<Entity name="campaignactivity" />
<Entity name="campaignresponse" />
<Entity name="incident" />
<!-- Case -->
<Entity name="quote" />
<Entity name="salesorder">
<MenuBar>
<!-- Custom Menus that you may add -->
</MenuBar>
<!-- The Account Tool Bar -->
<ToolBar ValidForCreate="0" ValidForUpdate="1">
<Button Icon="/_imgs/ico_18_debug.gif" Url="http://www.microsoft.com" PassParams="1" WinParams="" WinMode="0">
<Titles>
<Title LCID="1033" Text="asdf" />
</Titles>
<ToolTips>
<ToolTip LCID="1033" Text="Info on Test" />
</ToolTips>
</Button>
</ToolBar>
<!-- The Account Left Nav Bar -->
</Entity>
<!-- Order -->
<Entity name="invoice" />
<!-- Custom Entities -->
<!-- <Entity name="new_myentity"/> -->
<!-- End Custom Entities -->
</Entities>
<!-- Microsoft Customer Relationship Management Service Management Customization -->
<ServiceManagement>
<AppointmentBook>
<SmoothScrollLimit>2000</SmoothScrollLimit>
<TimeBlocks>
<!-- All CSS Class mapping for Service activities -->
<TimeBlock EntityType="4214" StatusCode="1" CssClass="ganttBlockServiceActivityStatus1" />
<TimeBlock EntityType="4214" StatusCode="2" CssClass="ganttBlockServiceActivityStatus2" />
<TimeBlock EntityType="4214" StatusCode="3" CssClass="ganttBlockServiceActivityStatus3" />
<TimeBlock EntityType="4214" StatusCode="4" CssClass="ganttBlockServiceActivityStatus4" />
<TimeBlock EntityType="4214" StatusCode="6" CssClass="ganttBlockServiceActivityStatus6" />
<TimeBlock EntityType="4214" StatusCode="7" CssClass="ganttBlockServiceActivityStatus7" />
<TimeBlock EntityType="4214" StatusCode="8" CssClass="ganttBlockServiceActivityStatus8" />
<TimeBlock EntityType="4214" StatusCode="9" CssClass="ganttBlockServiceActivityStatus9" />
<TimeBlock EntityType="4214" StatusCode="10" CssClass="ganttBlockServiceActivityStatus10" />
<!-- All CSS Class mapping for Appointments -->
<TimeBlock EntityType="4201" StatusCode="1" CssClass="ganttBlockAppointmentStatus1" />
<TimeBlock EntityType="4201" StatusCode="2" CssClass="ganttBlockAppointmentStatus2" />
<TimeBlock EntityType="4201" StatusCode="3" CssClass="ganttBlockAppointmentStatus3" />
<TimeBlock EntityType="4201" StatusCode="4" CssClass="ganttBlockAppointmentStatus4" />
<TimeBlock EntityType="4201" StatusCode="5" CssClass="ganttBlockAppointmentStatus5" />
<TimeBlock EntityType="4201" StatusCode="6" CssClass="ganttBlockAppointmentStatus6" />
</TimeBlocks>
</AppointmentBook>
</ServiceManagement>
</configuration>
</IsvConfig>
<EntityMaps />
<EntityRelationships />
<Languages>
<Language>1033</Language>
<Language>1036</Language>
<Language>1031</Language>
<Language>3082</Language>
<Language>1053</Language>
</Languages>
</ImportExportXml>

Gustaf Westerlund,
Microsoft Dynamics CRM Architect,
Logica Sweden

Wednesday, February 13, 2008

SQL error when importing customization.xml

Today I was deploying from a development environment to a test environment and part of this is moving the customizations made within the CRM GUI. I simply exported the customizations.xml and tried to import it to the test system. Only to get a very angry "SQL Error". Hmm... not very nice to see those, that usually means that somethings gone really bad, and you usually wish you hade just taken a complete backup of CRM.

Well, things only got worse when I tried to access CRM with the common url, I got a really nasty error saying that some custom attribute wasn't at all like some other custom attribute. No dah, my worst fears just got real and I could only face the fact that the CRM meta database had somehow become corrupt. Really bad, testing was supposed to begin today, so really bad timing (and timeplan).

So, what to do? Since I couldn't access CRM I couldn't get to the import cusomtizations page, so I had a look in the SDK for the direct URL to the import customizations page (it is under sitemap customizations). I tried to reimport the customizations file from my development server, only to find that CRM now found the xml "malformed" in this file. After some testing, I found that it acctually found all customizations files to be malformed, not only the first one. So, something really sinister is at hand. Time to log into the SQL-Server.

The first message that faced me was that one of the drives had to litte disk space... I had a look and found that the main data disk had only 2 MB free. So, this was probably it. First, there probably hadn't been space enough for commiting all the changes that were in the new customization file and then there hadn't been space enough to upload the new customizations file. The error message of mal-formed xml had just been an erroneous error message.

So, I freed some space on the disk and just to be sure, I re-installed CRM entirely (it was just a test environment after all) and imported the customization file, and all went well!

Well, there was acctually one thing, when I imported the customization file I got an error saying that at some row XXX in the file there was something wrong. At the specific row, was a tag for setting "displayInApplication" or something like that for the entity "Bulk Operation". I tried to remove the tag and import it, which worked. I later remembered that I hadn't installed Update Rollup 2, which I later confirmed was the cause of this error. I had exported from a CRM 3 UR2 system and imported into a standard CRM 3, hence the error. So, I would suggest not removing the tag but instead updateing your CRM :).

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Installation of Virtual Server 2005 R2

We have invested in a virtual server host, a really cool machine with Dual Quadcore XEON processors and 16 GB memory (yes, I am some what of a techno-geek). To be able to use it properly, I wanted to install Virtual Server 2005 R2.

Not so easy. I connected with remote desktop and tried to install virtual server, but I just couldn't get it to work properly, so I went out on the net and looked for a solution.

The result was that I found that you cannot install or run the virtual server web interface using remote desktop if you do not connect as "console". Weird, but that's what I found.

So, how to connect with remote desktop as "console" (that is ID 0). If you like your command prompt, you'll know that Remote Desktop is called "mstsc" just, use that with the switch "/console" and you will connect as console.

Personally I like to make things simple, why I have made a small bat-file with the following content:
mstsc %1 /console

Then I just drag-n-drop my rdp-file ontop of the batfile. This will result in a console connection to the server set in the rdp-file.

I hope this helps!

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Friday, February 08, 2008

Jonas Deibes pictures and Q&A from the CRM 4.0 launch

I forgot to give you the link to Jonas Deibe's posting concerning the CRM 4.0 launch in Stockholm where he a nice picture from the blog corner and some interesting Q&A.

http://blogs.msdn.com/jonasd/archive/2008/02/07/blog-corner-report-from-the-swedish-crm-4-0-release.aspx

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

CRM 4.0 launch and more...

Yesterday Microsoft Dynamics CRM 4.0 finally launched and there was a big Microsoft happening i Nacka Strand close to Stockholm. The location was great, only about 100 m from my office :).

At the launch there was a blog corner where both Jonas Deibe and Michael Höhne were answering questions and drinking som coke. I took the opportunity to have a look at Michael's (http://www.stunnware.com/crm2/) filtered Lookup a bit closer. I had read some about it on his page and it is really a great piece of software. In short it enables filtering of lookups and in CRM even the intellisense. It is not yet fully supported by Microsoft, but Michael mentioned that it soon will be.

I also got the opportunity to talk to Jonas Deibe a bit and we talked mainly on what the differences in developing extensions are between CRM 3 and 4.0. I will go deeper into some of this in later postings.

I also got meet some of my Microsoft Dynamics CRM friends from Cybernetics, Cinteros, SysTeam and of course, Microsoft Sweden. I hope we'll meet again soon.

As I have described earlier, we at WM-Data (Will formally be named Logica from feb 27:th) are so busy at the moment that we have to de prioritize some customers, which I find very sad, since I don't like to disappoint anyone in general and customers, in particular. So, if you are a good Microsoft CRM developer and interested in working with really big customers with very interesting projects, concerning complex integration and other interesting customizations in an international organization that is really employee-friendly, please contact me and we can have a chat! My office is in Stockholm, but Logica has offices all over Europe and even in India (Bangalore).

Thats that for this time, hope to be back soon!
Stay in touch!

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Friday, January 25, 2008

Adding SQL Reporting Services reports to CRM

As you are probably aware, Microsoft CRM 3 and 4 uses SQL Reporting Services for creating reports. If you are familiar with this tool from non-MS CRM implementations, there are a few tricks for getting the reports to work correctly. Please read the CRM SDK and the report writers guide for specific details on parameter naming and some other stuff.

The part that is the major deviation from normal SQL RS work, is how to deploy reports. Even though normal deployment might seem to work, the report won't be recognized by CRM properly.

So, what do you need to do?
1. Create a report that does NOT use a Shared Datasource. Instead create an embedded datasource called CRM that connects to the CRM database server. If you are going to use the Filtered Views, you have to use Windows Authentication. Save and build the new report (DO NOT deploy to the server).

2. Open CRM, Go to "Workplace" and select "Reports". Click "New" in the list. You will see a form where you can select the rdl-file and also select where in CRM the report will be available. Select the rdl-file that resides in the VS Project folder. Press Save.

If, at this point, you had used a Shared Data Source, you would be getting a very complicated error, as described by Menno here: http://blogs.msdn.com/mscrmfreak/archive/2006/04/27/584595.aspx

If all went well, the report will be uploaded correctly.

When uploading the report, CRM will replace the datasource in the rdl with the standard shared datasource. So, your report will still be movable.

Also, when uploading reports like this, CRM will hide all parameters starting with "CRM_". There are several parameters that CRM will fill with data for you if they exisit. For instance the parameter "CRM_URL" will be set to "http:///CRMReports/viewer/drillopen.aspx". This enables the report to create drill-down functionality that loops back into CRM (since there is very good support for URL-addressability in CRM).

Please note that all deployment of reports to CRM should be done in this manner and never directly from Report Designer. This is a bit of a hazzle since it is a bit tedious compared to just deploying from the Report Designer.

In CRM 4 there is a very nice wizard in the application for generating reports, even though it is not nearly as advanced as the report designer.

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Thursday, January 24, 2008

Integration basics

As I have been writing, I am currently involved in a rather large integration project. For those of you who don't have experience of working with larger integration projects I would like to just share my view of how to set up the architecture connecting Microsoft Dynamcis CRM with the integration engine (BizTalk, WebSphere, Sonic and more). Bellow, I will refer to the Integration Engine, simply as "the Bus"

First of all, communication with the bus can be divided into two different classes:
  1. CRM Initiated Communication
  2. Bus initiated communication

In the picture to the right, these two are represented with a connection each (connection 1 = CRM Initiated Communication, connection 2 = bus initiated communication)

CRM initiated communication might be considered the simplest, since it mainly controlled from CRM. It can be code that runs from aspx-pages, callouts/plug-ins or workflow addons. It simply consumes the webservice at the CRM adapter on the bus.

Bus initiated communication is set up by the bus consuming a customly created web service. This "proxy" webservice translates from integrationmessages and datastructures to CRM native communication.

Integration is then definied by defining messages that uses either connection 1 or 2. Each message has two parts, Request and Response, and the response is the syncronous answer to the request. Assyncronous messages should be set up as two individual messages one for each adapter.

So, why create a proxy web service? Why cannot the bus connect directly to the CRM web service? The reason for this is usually that the communication is defined using messages (as described above) and the person responsible for the CRM Adapter on the bus cannot be expected to have any CRM knowledge in general or specificly CRM Webservice knowledge, hence that is the CRM developers job.

These are some of my experiences and reflections on integration with a centralized integration architecture. If you have any comments or you have some other method that you use, please leave a comment, so that we can discuss it further.




Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Wednesday, January 09, 2008

Busy, busy + SDK

It has been some time since my last entry and it is mainly due to the fact that I am currently involved up to my ears in two large integration projects with Microsoft Dynamcis CRM 3. Very interesting and demanding but the problems we are facing are mostly project specific and not anything I believe you would find interesting and my customers probably wouldn't want me to talk to much about. When I run into something that I think will be of interest, and I have the time, I will of course let you know.

Personally, I havn't had much time to dig into CRM 4.0 yet but I noticed that the SDK has been released. You can find it here: http://www.microsoft.com/downloads/details.aspx?FamilyId=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&displaylang=en

Happy coding!

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Thursday, December 20, 2007

CRM 4.0 Trial ready for download

Finally CRM 4.0 has been released to manufacturing (RTM) and trial versions can be downloaded here: http://www.microsoft.com/downloads/details.aspx?FamilyID=a9c110fd-aac8-4d2a-b401-7801b1866e82&DisplayLang=en

I would also like to point out that there are (at least) three different media types in general released from Microsoft.

MSDN - Can use MSDN or Trial keys.

Normal - Can use Trial or "Normal" license keys.

Volume Licence - Can only use volume license keys. If you want a trial, use it for a maximum of 90 days and uninstall it.

This is important when installing a trial environment that might be upgraded to production environment in the future at a customer. Consideration has to be taken to their current license agreement with Microsoft, and you can never use the MSDN media to install a production server.

There might be exceptions to this rule, for instance, a MSDN media might accept a normal license key, but I would not expect it.

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Friday, December 07, 2007

Problems with ViewState in aspx page residing in Virtual Directory beneith MS CRM

I have been developing a front-end user GUI for a product configurator as a normal aspx-page. I started the development localy and then moved the project to our development server in a virtual directory bellow the CRM directory. (Please read earlier posts concerning problems with this and how to handle it) This is an unsupported way of placing your custom aspx-pages, but the disadvantages of doing it any other way are to great.

Well, my code used ViewState to store some data between requests and this had worked fine on my local machine. But, when I moved it to the virtual directory bellow the CRM site, the ViewState handling stopped. I tried to override the LoadViewState-method but it was never fired. I tried to explicitly set the page to have the property EnableViewState = true, but that didn't help either.

Then I remembered some things about how settings are inherited from the master website to all virtual directories bellow (i.e. the web.config settings are inherited). This is the reason for why you have to add some <remove assembly="...">tags to the virtual directory's web.config when deploying bellow the CRM website.

I thought that there might be some swith in the CRM web.config that disabled the ViewState and there was; the tag I found was the following:


<pages buffer="true" enablesessionstate="false" enableviewstate="false" validaterequest="false">

So, I copied the entire tag to the web.config in the virtual directory, changed enableviewstate="true" and magic, it worked!

So, specific advice: This is why viewstate might not be working in a Virtual Directory bellow the CRM site.
General advice: All settings in a websites web.config are automatically inherited to all virtual directories bellow. If you want to change anything, set this explictly in a local copy of web.config.

Over and out.

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Friday, November 30, 2007

WebServiceStudio 2.0

SOAP is a great thing, not only does it get you clean, but it is also the foundation for most modern webservice communication. It is supposed to be platform independent.

A good thought but does, however, seem to have it's limitation. To be able to thoroughly understand the communication between the client and webservice a good program is needed that can help you study how the web service works and how the SOAP-messages are sent and received.

When working in a .NET environment, a .NET based client is very advantageous and a business partner of mine at the company Lemontree, Oskar Mattsson, suggested a very good application. I havn't had time to try it out fully yet, but it is also a GotDotNet-project so you can also read the code of how it is doing it's calls.

The name of the program is WebServiceStudio 2.0 and you can download it here:
here

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Thursday, November 29, 2007

Fake lookups = unsupported

My colleague Daniel Westerblom at WM-Data asked my a question concerning the fake lookups that I have referenced bellow and that I know are commonly used by many partners. The question was if these customizations are supported.

When I was at convergence I asked this explicit question to, I think it was, Clint Warriner (CRM Escalation Engineer at Microsoft Support) and he gave me confirmation on what I had suspected, that these customizations are not supported. They fall under the last point concerning unsupported customizations described in the SDK:
"The use of custom HttpModules to inject HTML/DHTML into the Microsoft CRM Forms."

Since the HTML DOM is modified, this is not supported.

The reason for this is most probably that Microsoft might choose to change this in future releases of CRM (for instance CRM 4.0) and might also have internal scripting references to objects they expect to be there according to the standard HTML DOM.

I don't know if these fake lookups will upgrade from CRM 3.0 to 4.0 without problems. If you have any experience of it, please let me know.

If you have any comments on this subject, please feel free to comment bellow. I always publish comments that concern the subject and are not directly offensive. (I have activeted moderation on comments just to avoid comment spamming).

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Problems consuming webservices when developing locally

Usually I develop on a CRM server but sometimes, when a larger piece of CRM-independent part needs to be developed, I develop on my local machine.

Presently I am working in an integration project with an integration engine and needed to consume one of it's webservices. I did so and I added some code to handle it (intellisense working fine) but when I tried to run it, it crashed on the constructor or the service class with the following error:

System.IO.FileNotFoundException: File or assembly name gvy6umsk.dll, or one
of its dependencies, was not found.

There was also a reference to the Windows\Temp-directory. The filename is obviously some temporary filename for the proxy-object.

After checking the web a bit, I found the error to be caused by the fact that the user running the software, did not have read/write access to the c:\windows\temp directory. I fixed it and the program ran like it should!

So, if you are in the same situation, just fix the right for the windows\temp directory and you should be fine.

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Friday, November 23, 2007

Great solution concerning javascript include files

Michael Höhne of Germany is a very resourceful CRM MVP and has just published a great posting on how to, in a simple and good manner create include files for javascript in a supported way. So, with great applause from me and hopefully the rest of the CRM community, give it up for Michael! Here is the link:

http://www.stunnware.com/crm2/topic.aspx?id=JS18

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

CRM License specification

I have previously blogged on the licensing issues of Microsoft CRM and I am still waiting for an answer from the Microsoft representatives in Sweden who have forwarded the question. As soon as I get an answer, I will let you know.

I have also been involved in some discussions concerning what the specifics of the external connection licese are. The following URL describes the details of this for CRM (and also other products). Please have a look:

http://www.microsoftvolumelicensing.com/userights/ProductPage.aspx?pid=161


Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Monday, November 19, 2007

ASP page LifeCycle

Currently I am working with a product configurator via an integration hub, a very interesting project that is quite complex. One part of this is to create a dynamic apsx-page that let's the user choose properties of that are definied from the product configurator. Hence I am creating a new aspx-page that has to dynamically create lots of controls.

In order to do this properly, it is vital to understand the execution model of aspx-pages and the lifecycle of the page. I found this page that describes this, in an easy and understandable fashion. Please review it, if you are in similar needs as I.

http://www.15seconds.com/issue/020102.htm

Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Thursday, November 08, 2007

Nice video of Microsoft CRM use!

while checking out some CRM-blogs, I found this funny Microsoft CRM video.
Check it out!



Gustaf Westerlund
Microsoft Dynamics CRM Consultant

WM-Data/Logica CMG
www.logicacmg.com

Wednesday, November 07, 2007

Problems with Aug 07 VPC

Menno, the VPC god of Dynamics CRM land has created the very nice Aug 07 VPC of CRM 3. Sadly, a common error in it has to do with some new blocking of hacker attacks. It results in an error, that after a while of running it, you get a login-prompt and CRM stops working. The temporary solution is to restart IE.

Menno has written some about this on his blog, please read it. http://blogs.msdn.com/mscrmfreak/archive/2007/11/02/august-2007-vpc-fix.aspx

I personally liked "Method 1" described in the references KB-article. The details are described bellow. I have tested it for 5 minutes and it seems to be working. Here is a copy of the text:

Method 1: Disable the loopback check

Follow these steps:
1.
Click Start, click Run, type regedit, and then click OK.
2.
In Registry Editor, locate and then click the following registry key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3.
Right-click Lsa, point to New, and then click DWORD Value.
4.
Type DisableLoopbackCheck, and then press ENTER.
5.
Right-click DisableLoopbackCheck, and then click Modify.
6.
In the Value data box, type 1, and then click OK.
7.
Quit Registry Editor, and then restart your computer.


Gustaf Westerlund
Microsoft Dynamics CRM Consultant

Logica CMG
www.logicacmg.com

Tuesday, November 06, 2007

Installed at Logica and a bit about CRM and Mobility

After some fiddeling, I am now more or less installed at Logica CMG. Some systems still need configuring and I still have to place a few calls to India (where our support is situated) to get it all up and running.

At Convergence, I had the opportunity to browse around and talk to some of the ISV (Independent Software Vendors) that supply 3:rd party addons for Microsoft CRM. One of the companies I found was CWR Mobility that have developed a very competent mobile client for Microsoft CRM 3 (and soon 4). It is a much more mature product (from what I could judge) than the normal Mobile Client, and it supports sometimes-connected scenarios and offline sync, as well as an offline SDK. So, if you are facing a customer with mobility demands, be sure to check out their products.

Gustaf Westerlund
CRM Consultant

Logica CMG
www.logicacmg.com