Ruby library for accessing Microsoft Dynamics CRM Online 2011/2013 via their SOAP API.
Add this line to your application's Gemfile:
gem 'dynamics_crm' And then execute:
$ bundle Or install it yourself as:
$ gem install dynamics_crm client = DynamicsCRM::Client.new({organization_name: "orgname"}) client.authenticate('user@orgname.onmicrosoft.com', 'password')client.retrieve('account', '53291AAB-4A9A-E311-B097-6C3BE5A8DD60') # => #<DynamicsCRM::XML::Entity ... >client.retrieve_multiple('account', [["name", "Equal", "Test Account"]]) # => [#<DynamicsCRM::XML::Entity ... >] client.retrieve_multiple('account', [["name", "Equal", "Test Account"], ['salesstage', 'In', [0, 1, 2]]]) # => [#<DynamicsCRM::XML::Entity ... >] client.retrieve_multiple('account', [["telephone1", "EndsWith", "5558675309"], ["mobilephone", "EndsWith", "5558675309"]], [], "Or") # => [#<DynamicsCRM::XML::Entity ... >]# Build QueryExpression query = DynamicsCRM::XML::QueryExpression.new('account') query.columns = %w(accountid name) query.criteria.add_condition('name', 'NotEqual', 'Test Account') # Optional PageInfo query.page_info = DynamicsCRM::XML::PageInfo.new(count: 5, page_number: 1, return_total_record_count: true) # Get first page result = client.retrieve_multiple(query) while result.MoreRecords # Next page query.page_info.page_number += 1 query.page_info.paging_cookie = result.PagingCookie result = client.retrieve_multiple(query) end# Build QueryExpression query = DynamicsCRM::XML::QueryExpression.new('account') query.columns = %w(accountid name telephone1) # Switch to Or criteria query.criteria.filter_operator = 'Or' filter1 = DynamicsCRM::XML::FilterExpression.new('And') filter1.add_condition('name', 'Equal', 'Integration Specialists') filter1.add_condition('telephone1', 'In', ['(317) 845-2212', '3178452212']) filter2 = DynamicsCRM::XML::FilterExpression.new('And') filter2.add_condition('name', 'Equal', 'Thematics Development Inc.') filter2.add_condition('telephone1', 'Null') # Add Filters to criteria query.criteria.add_filter(filter1) query.criteria.add_filter(filter2) result = client.retrieve_multiple(query)# Raw XML Support xml = %Q{<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false"> <entity name="opportunityproduct"> <attribute name="opportunityproductid" /> <attribute name="productdescription" /> <attribute name="priceperunit" /> <attribute name="quantity" /> <order attribute="productid" descending="false" /> <link-entity name="product" from="productid" to="productid" alias="product" link-type="inner"> <attribute name="name" /> <attribute name="producttypecode" /> <attribute name="price" /> <attribute name="standardcost" /> </link-entity> <filter type="and"> <condition attribute="opportunityid" operator="eq" value="02dd7344-d04a-e411-a9d3-9cb654950300" /> </filter> </entity> </fetch>} result = client.fetch(xml) # => #<DynamicsCRM::XML::EntityCollection> # result.entity_name => 'opportunityproduct' # result.entities => [DynamicsCRM::XML::Entity, ...]# Using FetchXml::Builder builder = DynamicsCRM::FetchXml::Builder.new() entity = builder.entity('opportunityproduct').add_attributes( ['productdescription', 'priceperunit', 'quantity', 'opportunityproductid'] ).order('productid') entity.link_entity('product', to: 'productid', from: 'productid', :alias => 'product').add_attributes( ['name', 'producttypecode', 'price', 'standardcost'] ) entity.add_condition('opportunityid', 'eq', '02dd7344-d04a-e411-a9d3-9cb654950300') result = client.fetch(builder.to_xml) # => #<DynamicsCRM::XML::EntityCollection> # result.entity_name => 'opportunityproduct' # result.entities => [DynamicsCRM::XML::Entity, ...]# Add a new account client.create('account', name: 'Foobar Inc.') # => {id: '53291AAB-4A9A-E311-B097-6C3BE5A8DD60'} # Add a new contact client.create('contact', firstname: 'John', lastname: 'Doe', emailaddress1: "johndoe@mydomain.com") # => {id: '71ef2416-50f7-e311-93fc-6c3be5a8c054'}# Update the Account with id '53291AAB-4A9A-E311-B097-6C3BE5A8DD60' client.update('account', '53291AAB-4A9A-E311-B097-6C3BE5A8DD60', name: 'Whizbang Corp') # => {}# Delete the Account with id '53291AAB-4A9A-E311-B097-6C3BE5A8DD60' client.delete('account', '53291AAB-4A9A-E311-B097-6C3BE5A8DD60') # => {}# get the list of organization entities client.retrieve_all_entities # => [#<DynamicsCRM::Metadata::EntityMetadata>, ...]# get the entity metadata for the account object client.retrieve_entity('account') # => DynamicsCRM::Metadata::EntityMetadata# get AttributeMetadata for 'name' field on the account object client.retrieve_attribute('account', 'name') # => [#<DynamicsCRM::Metadata::AttributeMetadata>, ...]contacts = [ DynamicsCRM::XML::EntityReference.new("contact", contact["id"])] client.associate("account", account["id"], "contact_customer_accounts", contacts)If you want to log the REQUEST and RESPONSE, you can do through Logger class of Ruby.
client.logger = Logger.new(STDOUT)- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
