Philip's profilePhilip RichardsonBlogLists Tools Help

Blog


    May 04

    My Blog Has Moved

    My blog URL has now moved!
     
    Please update your links:
     
    Traffic has picked up on the new URL (and gone done on the old one). Please update your RSS Readers, OPML files and links.
    May 02

    New Blog URL

    My blog URL has now moved!
     
    Please update your links:
    May 01

    Another new CRM Blog

    Charles Eliot has just started a blog on msdn.com! Charles is our 'slave driver' on Titan.....

    CRM Team Blog

    Today the CRM Program Management (PM) team launched our blog: http://blogs.msdn.com/crm. Our aim to is publish a healthy stream of CRM content for customers, partners and prospects to consume. Feel free to post comments on the site with feedback and suggestions.
    April 26

    Looking for Players

    If you aren't a Microsoft FTE you can ignore this post.
     
    I recently posted on our Fantasy-RPG's public folder:
    Our wednesday night game is looking for an extra player. We play pretty much every Wednesday in building 'x' from 6:00pm to 9:30pm. We plan to spend the next 2-3 weeks trying out Dogs in the Vineyard (with a Jedi/Samurai focus) and then it's back to D&D for 6 month campaign in a custom setting. The last two months we spend playing/developing a custom setting.
     
    Email me for info and I can put you in contact with our GMs.
    If you are a loyal microserf looking for some regular gaming action - then we have a good game for you. Our group is a mix of PMs, devs and testers (in the past the PMs have been the GMs - what does that say?).
    April 21

    Private vs Public Communities

    I received an email this moring inviting me to join a private Microsoft CRM mailing list. This invitation provoked some interesting thoughts and sparked an interesting mail thread within the team.
     
    In the end I decided not to join the private community (they were looking for MVPs, product team people etc). My #1 goal is to work on Titan. Unfortunately anything else is secondary (I'm a Feature PM not an Evangelist): therefore any time spent in a private community would be time not spent in a public one.
     
    In the end one simply has to ask themself: what would Robert Scoble do?
    April 11

    New Record GUID's

    Aaron Elder (Invoke Systems) informs us that we can specify the GUID of records when we create them. As Aaron points out this is an awesome integration feature if the native system uses the uniqueidentifier data type.

    The Form Assistant

    It's no secret in the CRM team that I'm not a fan of the Form Assistant (it's that thing that appears on the right hand side of some of the CRM form and gives you lookup info for related entities). I should also point out that the Form Assistant is the 'pet feature' of Sayta's (my VP) Technical Assistant - so my dislike for the feature is bound to get me into trouble.
     
    If you want to remove the Form assistant here is the attribute to change in the ImportExport xml file:
     

    <forms>

              <entity name="account" objecttypecode="1">

                <form type="main" id="{b053a39a-041a-4356-acef-ddf00182762b}" enablerelatedinformation="false" relatedInformationCollapsed="true">
     
    The one you are after is 'enablerelatedinformation'. By default this is set to true. Simply change it to false and then import the file back to CRM and run a publish. If you really dislike the form asssitant then a find replace for enablerelatedinformation="true" with enablerelatedinformation="false" might be a good idea.
     
    Remember: run a back up of the database before doing this kind of stuff and like always this is inspirational not instructional.
     
     
    This posting is provided "AS IS" with no warranties, and confers no rights.

    Microsoft CRM Customer Portal Sample

    John Straumann has posted a cool sample over on his blog of a Microsoft CRM Customer Portal. This sample shows how you can connect Microsoft CRM to your company's external web presence - exposing appropriate information to your customers. The sample uses a mix of the Filtered View and Web Services provided by Microsoft CRM 3.0.
    April 03

    Convergence Munich

    Since Jim posted about this I'm guessing it's public: Convergence Europe is in Munich (in November). After the marathon drinking sessions at Dallas this year I'm not sure my liver could handle the Euros and their endless appetite for grog and the Bavarians with their love for strong wheat beer and giant pretzels. With any luck I'm in big trouble for going 'slideless' during my Dallas Convergence presentation so I won't be invited to present at Munich (my liver and cholesterol levels will be thankful). Besides I think I want to go to North Africa on holidays in November: Tangiers, Casablana and maybe even Tripoli (is that even legal??!?).

    Programmatically Modifying Picklists

    I have been infected with the Program Management cold (again). I suspect our competitors are placing germs in our building's air conditioner. The following post is taken from a reply I sent on an internal CRM mailing list - regarding the method to programmatically modify picklists. I thought it might be useful to a broader audience. Please excuse it's sketchy nature. Remember - blogs are inspirational not instructional.
     

    Here is the methodology for getting to the account picklists (but it works with pretty much any entity).

     

    ExportXmlRequest exportRequest = new ExportXmlRequest();

    exportRequest.ParameterXml = @"<importexportxml>

                                              <entities>

                                                    <entity>account</entity>

                                              </entities>

                                              <nodes/>

                                  </importexportxml>";

     

    ExportXmlResponse entities = (ExportXmlResponse)service.Execute(exportRequest);

     

     

    Now you will have string containing the Account ImportExport.xml. Load this into a XML document.

     

    Now parse throught the Attributes element looking for picklist attributes:

                <attribute PhysicalName="PreferredContactMethodCode">

                  <Type>picklist</Type>

                  <ValidForCreateApi>1</ValidForCreateApi>

                  <ValidForUpdateApi>1</ValidForUpdateApi>

                  <ValidForReadApi>1</ValidForReadApi>

                  <DisplayMask>ValidForAdvancedFind|ValidForForm|ValidForGrid</DisplayMask>

                  <Description>Preferred contact method for the account.</Description>

                </attribute>

     

    The actual picklist values are in the FieldXml element (not in the attributes - this is the trap for young players).

                <field name="preferredcontactmethodcode" requiredlevel="na" defaultvalue="1">

                  <displaynames>

                    <displayname description="Preferred Method of Contact" languagecode="1033" />

                  </displaynames>

                  <options nextvalue="7">

                    <option value="1">

                      <labels>

                        <label description="Any" languagecode="1033" />

                      </labels>

                    </option>

                    <option value="2">

                      <labels>

                        <label description="E-mail" languagecode="1033" />

                      </labels>

                    </option>

                    <option value="3">

                      <labels>

                        <label description="Phone" languagecode="1033" />

                      </labels>

                    </option>

                    <option value="4">

                      <labels>

                        <label description="Fax" languagecode="1033" />

                      </labels>

                    </option>

                    <option value="5">

                      <labels>

                        <label description="Mail" languagecode="1033" />

                      </labels>

                    </option>

                  </options>

                </field>

     

    Now you can edit these values here and then re-import the data back to CRM the ImportXml and Publish web service messages.

     

    Hint: don’t get distracted by the languagecode …. these are not the droids you are looking for.

     
     
    This posting is provided "AS IS" with no warranties, and confers no rights.
    March 30

    Customization and Source Control

    There was a couple of questions at Convergence last week regarding 'management' of customizations (eg. source control) and CRM 3.0. Recently I took ownership of the ImportExport APIs as part of my feature set - so I thought I would ponder some of the uses of these APIs.
     
    We actually provide some web service method for managing customizations. The six relevant messages are: ImportAllXml, ImportXml, ExportAllXml, ExportXml, PublishAllXml and PublishXml. All six are documented in our SDK and sample code is provided (they are in the following folder: ..sdk samples\reference\crmserviceapi\importexport). For example here is the code to extract the entire customizations xml from a CRM server:
    // Create the request.

    ExportAllXmlRequest request = new ExportAllXmlRequest();

     

    // Execute the request.

    ExportAllXmlResponse response = (ExportAllXmlResponse)service.Execute(request);

     

    // Load the results into an XML document.

    XmlDocument entityXml = new XmlDocument();

    entityXml.LoadXml(response.ExportXml);

    So now you have it an XML file - what do you do. Save it to the file system? How about considering the following options:
    • Use the Sharepoint Web Services to save the XML to a Sharepoint List Library.
    • Integrate directly into VSS.
    • Edit the XML to add version information which is specific to your products.
    • Integrate the Customizations.xml into an existing Visual Studio project.
    • Extract the XML from one server and automatically deploy it to another (eg. Dev to Prod). Simply call the Export method of one server and then the Import & Publish methods of the other.
    • Add some other web services methods into your tool. For example if you want to port the Price list from Dev/Test constantly you could read it out, save the objects as XML and then write them back to the target server.
    • Consider running your Export as a nightly batch job - backing up customizations made to your development server.
    • Writing the Import/Export as an ASP.NET application and then using ISV.config to add a button to CRM enabling you call your custom exporter from within CRM's web UI. You could even add a whole new 'Export Customizations' section to the application.
    If you are a partner or a large customer I'd strongly recommend that you have some kind of build process customized for your unique needs.
     
    This posting is provided "AS IS" with no warranties, and confers no rights.
    March 29

    Why you should use RSS and CRM

    So many of you will already be aware of the new RSS connector for CRM 3.0. You can download it from Microsoft.com here. For some technical background on the connector Michaeljon Miller the connector's creator has a great post on his blog.
     
    Why should you care about RSS? The impact of the pub/sub model is already having a huge impact on the way that people consume the internet. I believe the next wave of feed consumption will be inside organizations. If you are an IT Person: consider how you want to get important information into the hands of your users. If you are a Business Person: consider how you want your information to be delivered - why can't you have your latest Opportunities delivered like your morning news in RSS? If you are a Partner: consider the solutions you could build on top of RSS - an industry standard format with dozens of multi platform clients (and baked into IE7 and Vista).
     
    CRM is already a very strong SOA platform with it's powerful and flexible web services. With this new connector - you can make CRM the RSS 'hub' of your organization.

    Entity Diagrams for CRM 3.0

    We have released a set of visio diagrams of the out of the box CRM 3.0 entities. It can be downloaded from Microsoft.com here.
     
    Tip: When you create a new Entity with CRM it creates two database tables (dbo.<entityname>Base and dbo.<entityname>ExtensionBase), a basic view (dbo.<entityname>) and a Filtered View (dbo.Filtered<entityname>). You can easily point Visio at your SQL database to add these to your diagrams or using the SQL database diagram feature.
    March 28

    Converged

    Convergence is now winding down. I'm hiding out in the speakers room eating Danish Pastries.
     
    Highlights:
    - Annoucement of CRM Hosted (our Service Provider offering).
    - Drinking every night of the conference until 2:00am.
    - Jeroboam restaurant.
    - Meeting lots of customers and partners.
     
    Lowlights:
    - The Palms restaurant. Woke up in the middle of the night sweating and threw up.
    - Drinking every night of the conference until 2:00am.
     
    March 26

    Convergence Sunday

    I'm currently at the Microsoft CRM Expo booth at Convergence. Feel free to stop by to say 'Hi' or to ask any tricky CRM questions. I'll be here until 6:00pm.
     
    Tonight I'll be at the CRM Customer Party. If are an existing CRM customer at Convergence - stop by the booth and pick up an invite.
    March 23

    Convergence Begins

    I'm now in Dallas - here for the Microsoft Convergence conference. On the weekend I've got my focus groups to run and on Monday I'll be presenting a session. For the rest of the time I'll just be hanging out. My 'hanging out' duties include lab patrol, booth duty and being a good drinking buddy for colleagues/customers/partners.
     
    If you are a Convergence attendee and you want to catch up then ping me with Rio (the networking thing) or MSN Message me (philip@philiprichardson.org). Please: no stalkers.
     
    On the technical front I am really 'digging' ASP.NET and the new SQL Express (gone are the days when I'd load SQL Dev Edition). My new found love for SQL Express came as a bit of shock to me having been 'less than friends' with the old version of the desktop database.
     
    Sometime this week (in between hard work and hangovers) I hope to get my hands dirty with AJAX.
    March 07

    Custom Entity Icons

    I discovered an interesting feature today. I always thought that CRM stored custom icons in the inetpub folder. However it turns out that the custom entity icons are stored in the database (in the form xml).
     

            <Icon type="GridIcon">R0lGODlhEAAQANUzAP//s9nYh7+/fc/Pj9CkG9TJe//3n8+iG//xl/TQcPXsqc/HfM/PhP/+4///9f/Vcf/90tnZpc/Kf7+/if/8vcTEj9nZl//qjenLcdnZiP/de//6pNTFd8nJi9TPgf/Qat/fqunYftCkF//WcKmpc//geru5rP/9l//Ra//1j//uiNmmGv/ogv//8v//33l3a9KkEv//mf//zP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAADMALAAAAAAQABAAAAaNwJlwSCwKYcikUmmawRytqHTagr2cDZd2y3VZnRCZODKpgMTiL4wCAHRIgwHJ0gaoN7EYI5MXCPIxagYnhIQBJAGFaggpjSkSJB6OKWoXKpcqJAuYl2osn58FIaCfaholqCUkHKhKVzAPI7IjGAmyMAoEL00wHyi/wL8wIrtHK8fIyAfFQiYvz9DRTUJBADs=</Icon>

          </Icons>

     
    These are then rendered with an aspx page which takes the encoded image from the database and displays it as an image (naturally these are also cached for performance). All the 'application' icons are stored in the file system.
     
    The good news here is: when moving between different implementations - your icons will come over with the ImportExport.xml and you don't have to worry about deploying custom icons out to load balanced servers.
     
    This posting is provided "AS IS" with no warranties, and confers no rights.
    February 28

    Convergencebloggers.Net

    After my last post I received an email from one of site admins for: http://convergencebloggers.net/.
     
    It's in the same vein as the TechEd Bloggers and PDC Bloggers. Check it out and add your blog.

    Calling Convergence Bloggers

    Are there any other bloggers (or blog readers) out there heading to Convergence?
     
    Is there 'general interest' in having an unofficial blogospheric get together? If nothing has been organized yet - I'm happy to co-ordinate something.
     
    If you are interested leave me a comment on this post or email me (philip@philiprichardson.org).
     
     
     
    This posting is provided "AS IS" with no warranties, and confers no rights.