Dan Newcome on technology

I'm bringing cyber back

Accessing Microsoft CRM from IronRuby

with 3 comments

In a fit of madness It crossed my mind to try to get data out of Microsoft CRM using Ruby. The reason isn’t important now, and I may blog about it later, but suffice it to say that I hoped that it would be possible to leverage the CRM SDK libraries in other .NET environments and that it wouldn’t be necessary to resort to the odd Ruby SOAP library to accomplish the task.

There are some oddities when loading existing .NET assemblies within the IronRuby environment, but they are easily understood and don’t prevent us from getting the SDK libraries to work.

Let’s get started. We need 2 things to get things working: IronRuby and the CRM 4 SDK. Of course it also helps to have a CRM installation handy to test that it actually works.

For starters, let’s get a simple .NET program running in IronRuby:

file: hello-dotnet.rb

require "System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089"
System::Console::WriteLine( 'Hello World' )

Running with IronRuby looks like this:

ir.exe hello-dotnet.rb

Several things to note — first is that we use require in the code rather than a compiler reference to access the .NET assembly. Just like in any other .NET code, we reference the assembly with its display name that describes its identity. It should also be obvious that, like many other languages, IronRuby uses a double colon :: scope resolution operator. This means that namespaces and static methods of objects must be accessed via this operator rather than the single dot operator that C# and VB uses.

Another odditiy that will be evident in the next code sample that we’ll look at is that method and member names are rewritten from pascal or camel case to Ruby naming conventions. For a good tutorial on this check out IronShay’s post on running .NET code in IronRuby.

require "System, Version=, Culture=neutral, PublicKeyToken=b77a5c561934e089"
require "microsoft.crm.sdk.dll"
require "microsoft.crm.sdktypeproxy.dll"
require "CrmQuery.dll"

include Djn::Crm
include Microsoft::Crm::Sdk
include Microsoft::Crm::Sdk::Query

query = CrmQuery.select().from( 'contacts' ).query
bec = DynamicEntityHelper::get_dynamic_entity_collection( query );
puts bec.business_entities.count

This code uses CrmQuery to build the query and a helper that wraps the CRM CrmService’s Execute() method. I haven’t shown the helper code but the CRM SDK contains most of the boilerplate stuff that you need to create a service connection so I haven’t shown it here.

I’m going to be using the capability that I’ve just shown in an upcoming CRM project that I’m keeping under wraps for now. I’ll detail more about what I have in mind in a later post.

Written by newcome

December 4, 2010 at 10:39 pm

Posted in Uncategorized

3 Responses

Subscribe to comments with RSS.

  1. […] I like to do is to try to get it working with another platform that I already know well. I’ve done this with Ruby in the past, and it is a good way to learn your way around the new […]

  2. Çok iyi paylaşımlarda bulunuyorsunuz sağolun

  3. Harika paylaşımlarda bulunuyorsunuz çok teşekkür ederim

    web tasarımı

    July 19, 2017 at 6:21 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: