dynamics_crm 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +18 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +9 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +104 -0
  8. data/Rakefile +9 -0
  9. data/dynamics_crm.gemspec +28 -0
  10. data/lib/dynamics_crm/client.rb +295 -0
  11. data/lib/dynamics_crm/metadata/attribute_metadata.rb +42 -0
  12. data/lib/dynamics_crm/metadata/entity_metadata.rb +24 -0
  13. data/lib/dynamics_crm/metadata/retrieve_all_entities_response.rb +21 -0
  14. data/lib/dynamics_crm/metadata/retrieve_attribute_response.rb +16 -0
  15. data/lib/dynamics_crm/metadata/retrieve_entity_response.rb +17 -0
  16. data/lib/dynamics_crm/metadata/xml_document.rb +39 -0
  17. data/lib/dynamics_crm/response/create_result.rb +15 -0
  18. data/lib/dynamics_crm/response/execute_result.rb +26 -0
  19. data/lib/dynamics_crm/response/result.rb +78 -0
  20. data/lib/dynamics_crm/response/retrieve_multiple_result.rb +38 -0
  21. data/lib/dynamics_crm/response/retrieve_result.rb +20 -0
  22. data/lib/dynamics_crm/version.rb +3 -0
  23. data/lib/dynamics_crm/xml/attributes.rb +163 -0
  24. data/lib/dynamics_crm/xml/column_set.rb +34 -0
  25. data/lib/dynamics_crm/xml/criteria.rb +54 -0
  26. data/lib/dynamics_crm/xml/entity.rb +61 -0
  27. data/lib/dynamics_crm/xml/entity_reference.rb +56 -0
  28. data/lib/dynamics_crm/xml/fault.rb +42 -0
  29. data/lib/dynamics_crm/xml/fetch_expression.rb +27 -0
  30. data/lib/dynamics_crm/xml/message_builder.rb +222 -0
  31. data/lib/dynamics_crm/xml/message_parser.rb +68 -0
  32. data/lib/dynamics_crm/xml/orders.rb +36 -0
  33. data/lib/dynamics_crm/xml/page_info.rb +38 -0
  34. data/lib/dynamics_crm/xml/query.rb +38 -0
  35. data/lib/dynamics_crm.rb +46 -0
  36. data/spec/fixtures/associate_response.xml +17 -0
  37. data/spec/fixtures/create_response.xml +19 -0
  38. data/spec/fixtures/delete_response.xml +16 -0
  39. data/spec/fixtures/disassociate_response.xml +17 -0
  40. data/spec/fixtures/fetch_xml_response.xml +120 -0
  41. data/spec/fixtures/receiver_fault.xml +27 -0
  42. data/spec/fixtures/request_security_token_response.xml +62 -0
  43. data/spec/fixtures/retrieve_account_all_columns.xml +402 -0
  44. data/spec/fixtures/retrieve_all_entities.xml +614 -0
  45. data/spec/fixtures/retrieve_attribute_identifier_response.xml +117 -0
  46. data/spec/fixtures/retrieve_attribute_picklist_response.xml +1097 -0
  47. data/spec/fixtures/retrieve_attribute_response.xml +126 -0
  48. data/spec/fixtures/retrieve_entity_response.xml +671 -0
  49. data/spec/fixtures/retrieve_multiple_result.xml +67 -0
  50. data/spec/fixtures/sender_fault.xml +34 -0
  51. data/spec/fixtures/update_response.xml +16 -0
  52. data/spec/fixtures/who_am_i_result.xml +35 -0
  53. data/spec/lib/client_spec.rb +230 -0
  54. data/spec/lib/metadata/entity_metadata_spec.rb +24 -0
  55. data/spec/lib/metadata/retrieve_all_entities_response_spec.rb +26 -0
  56. data/spec/lib/metadata/retrieve_attribute_response_spec.rb +65 -0
  57. data/spec/lib/metadata/retrieve_entity_response_spec.rb +24 -0
  58. data/spec/lib/response/execute_result_spec.rb +20 -0
  59. data/spec/lib/response/retrieve_multiple_spec.rb +34 -0
  60. data/spec/lib/response/retrieve_result_spec.rb +67 -0
  61. data/spec/lib/xml/attributes_spec.rb +39 -0
  62. data/spec/lib/xml/column_set_spec.rb +19 -0
  63. data/spec/lib/xml/entity_reference_spec.rb +47 -0
  64. data/spec/lib/xml/entity_spec.rb +63 -0
  65. data/spec/lib/xml/fault_spec.rb +41 -0
  66. data/spec/lib/xml/query_spec.rb +43 -0
  67. data/spec/spec_helper.rb +17 -0
  68. data/spec/support/fixture_helpers.rb +14 -0
  69. metadata +240 -0
@@ -0,0 +1,222 @@
1
+ module DynamicsCRM
2
+ module XML
3
+ module MessageBuilder
4
+
5
+ def uuid
6
+ SecureRandom.uuid
7
+ end
8
+
9
+ def get_current_time
10
+ Time.now.utc.strftime '%Y-%m-%dT%H:%M:%SZ'
11
+ end
12
+
13
+ def get_tomorrow_time
14
+ (Time.now.utc + (24*60*60)).strftime '%Y-%m-%dT%H:%M:%SZ'
15
+ end
16
+
17
+ # Select the right region for your CRM
18
+ # The region can be pulled from the Organization WSDL
19
+ #
20
+ # urn:crmna:dynamics.com - North America
21
+ # urn:crmemea:dynamics.com - Europe, the Middle East and Africa
22
+ # urn:crmapac:dynamics.com - Asia Pacific
23
+ def build_ocp_request(username, password)
24
+ %Q{
25
+ <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
26
+ xmlns:a="http://www.w3.org/2005/08/addressing"
27
+ xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
28
+ <s:Header>
29
+ <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action>
30
+ <a:MessageID>urn:uuid:#{uuid()}</a:MessageID>
31
+ <a:ReplyTo>
32
+ <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
33
+ </a:ReplyTo>
34
+ <a:To s:mustUnderstand="1">#{Client::LOGIN_URL}</a:To>
35
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
36
+ <u:Timestamp u:Id="_0">
37
+ <u:Created>#{get_current_time}</u:Created>
38
+ <u:Expires>#{get_tomorrow_time}</u:Expires>
39
+ </u:Timestamp>
40
+ <o:UsernameToken u:Id="uuid-cdb639e6-f9b0-4c01-b454-0fe244de73af-1">
41
+ <o:Username>#{username}</o:Username>
42
+ <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
43
+ #{password}
44
+ </o:Password>
45
+ </o:UsernameToken>
46
+ </o:Security>
47
+ </s:Header>
48
+ <s:Body>
49
+ <t:RequestSecurityToken xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">
50
+ <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
51
+ <a:EndpointReference>
52
+ <a:Address>#{Client::REGION}</a:Address>
53
+ </a:EndpointReference>
54
+ </wsp:AppliesTo>
55
+ <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType>
56
+ </t:RequestSecurityToken>
57
+ </s:Body>
58
+ </s:Envelope>
59
+ }
60
+ end
61
+
62
+
63
+ def build_envelope(action, &block)
64
+ %Q{
65
+ <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
66
+ #{build_header(action)}
67
+ <s:Body>
68
+ #{yield}
69
+ </s:Body>
70
+ </s:Envelope>
71
+ }
72
+ end
73
+
74
+ def build_header(action)
75
+
76
+ caller_id = @caller_id ? %Q{<CallerId xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">#{@caller_id}</CallerId>} : ""
77
+
78
+ %Q{
79
+ <s:Header>
80
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/#{action}</a:Action>
81
+ #{caller_id}
82
+ <a:MessageID>
83
+ urn:uuid:#{uuid()}
84
+ </a:MessageID>
85
+ <a:ReplyTo><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo>
86
+ <a:To s:mustUnderstand="1">
87
+ #{@organization_endpoint}
88
+ </a:To>
89
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
90
+ <u:Timestamp u:Id="_0">
91
+ <u:Created>#{get_current_time}</u:Created>
92
+ <u:Expires>#{get_tomorrow_time}</u:Expires>
93
+ </u:Timestamp>
94
+ <EncryptedData Id="Assertion0" Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
95
+ <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"></EncryptionMethod>
96
+ <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
97
+ <EncryptedKey>
98
+ <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"></EncryptionMethod>
99
+ <ds:KeyInfo Id="keyinfo">
100
+ <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
101
+ <wsse:KeyIdentifier EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier">
102
+ #{@key_identifier}
103
+ </wsse:KeyIdentifier>
104
+ </wsse:SecurityTokenReference>
105
+ </ds:KeyInfo>
106
+ <CipherData>
107
+ <CipherValue>
108
+ #{@security_token0}
109
+ </CipherValue>
110
+ </CipherData>
111
+ </EncryptedKey>
112
+ </ds:KeyInfo>
113
+ <CipherData>
114
+ <CipherValue>
115
+ #{@security_token1}
116
+ </CipherValue>
117
+ </CipherData>
118
+ </EncryptedData>
119
+ </o:Security>
120
+ </s:Header>
121
+ }
122
+ end
123
+
124
+ def create_request(entity)
125
+ build_envelope('Create') do
126
+ %Q{<Create xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
127
+ #{entity.to_xml}
128
+ </Create>}
129
+ end
130
+ end
131
+
132
+ def update_request(entity)
133
+ build_envelope('Update') do
134
+ %Q{<Update xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
135
+ #{entity.to_xml}
136
+ </Update>}
137
+ end
138
+ end
139
+
140
+ # Tag name case MATTERS!
141
+ def retrieve_request(entity_name, guid, columns)
142
+ build_envelope('Retrieve') do
143
+ %Q{<Retrieve xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
144
+ <entityName>#{entity_name}</entityName>
145
+ <id>#{guid}</id>
146
+ #{columns.to_xml}
147
+ </Retrieve>}
148
+ end
149
+ end
150
+
151
+ def retrieve_multiple_request(object)
152
+ request = build_envelope('RetrieveMultiple') do
153
+ %Q{
154
+ <RetrieveMultiple xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
155
+ #{object.to_xml}
156
+ </RetrieveMultiple>
157
+ }
158
+ end
159
+ end
160
+
161
+ # Tag name case MATTERS!
162
+ def delete_request(entity_name, guid)
163
+ build_envelope('Delete') do
164
+ %Q{<Delete xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
165
+ <entityName>#{entity_name}</entityName>
166
+ <id>#{guid}</id>
167
+ </Delete>}
168
+ end
169
+ end
170
+
171
+ def associate_request(entity_name, id, relationship, relationship_entities=[])
172
+ modify_association("Associate", entity_name, id, relationship, relationship_entities)
173
+ end
174
+
175
+ def disassociate_request(entity_name, id, relationship, relationship_entities=[])
176
+ modify_association("Disassociate", entity_name, id, relationship, relationship_entities)
177
+ end
178
+
179
+ def modify_association(action, entity_name, id, relationship, relationship_entities=[])
180
+ entities_xml = ""
181
+ relationship_entities.each do |ref|
182
+ entities_xml << ref.to_xml(namespace: "b")
183
+ end
184
+
185
+ build_envelope(action) do
186
+ %Q{<#{action} xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts">
187
+ <entityName i:type="string">#{entity_name}</entityName>
188
+ <entityId xmlns:q10="http://schemas.microsoft.com/2003/10/Serialization/" i:type="q10:guid">#{id}</entityId>
189
+ <relationship i:type="b:Relationship">
190
+ <b:PrimaryEntityRole>Referenced</b:PrimaryEntityRole>
191
+ <b:SchemaName i:type="string">#{relationship}</b:SchemaName>
192
+ </relationship>
193
+ <relatedEntities i:type="b:EntityReferenceCollection">#{entities_xml}</relatedEntities>
194
+ </#{action}>}
195
+ end
196
+ end
197
+
198
+ def execute_request(action, parameters={})
199
+
200
+ # Default namespace is /crm/2011/Contracts
201
+ ns_alias = "b"
202
+ # Metadata Service calls are under the /xrm/2011/Contracts schema.
203
+ if ["RetrieveAllEntities", "RetrieveEntityMetadata", "RetrieveEntity", "RetrieveAttribute", "RetrieveMultiple"].include?(action)
204
+ ns_alias = 'a'
205
+ end
206
+
207
+ parameters_xml = XML::Parameters.new(parameters)
208
+ build_envelope('Execute') do
209
+ %Q{<Execute xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
210
+ <request i:type="#{ns_alias}:#{action}Request" xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:b="http://schemas.microsoft.com/crm/2011/Contracts">
211
+ #{parameters_xml}
212
+ <a:RequestId i:nil="true" />
213
+ <a:RequestName>#{action}</a:RequestName>
214
+ </request>
215
+ </Execute>}
216
+ end
217
+ end
218
+
219
+ end
220
+ # MessageBuilder
221
+ end
222
+ end
@@ -0,0 +1,68 @@
1
+ require 'ostruct'
2
+ require 'rexml/document'
3
+
4
+ module DynamicsCRM
5
+ module XML
6
+ module MessageParser
7
+
8
+ def self.parse_key_value_pairs(parent_element)
9
+ h = {}
10
+ # Get namespace alias (letter) for child elements.
11
+ namespace_alias = parent_element.attributes.keys.first || "c"
12
+ parent_element.each_element do |key_value_pair|
13
+
14
+ key_element = key_value_pair.elements["#{namespace_alias}:key"]
15
+ key = key_element.text
16
+ value_element = key_value_pair.elements["#{namespace_alias}:value"]
17
+ value = value_element.text
18
+ begin
19
+
20
+ case value_element.attributes["type"]
21
+ when "b:OptionSetValue"
22
+ # Nested value. Appears to always be an integer.
23
+ value = value_element.elements.first.text.to_i
24
+ when "d:boolean"
25
+ value = (value == "true")
26
+ when "d:decimal"
27
+ value = value.to_f
28
+ when "d:dateTime"
29
+ value = Time.parse(value)
30
+ when "b:EntityReference"
31
+ entity_ref = {}
32
+ value_element.each_element do |child|
33
+ entity_ref[child.name] = child.text
34
+ end
35
+ value = entity_ref
36
+ when "b:EntityCollection"
37
+ collection = []
38
+ value_element.elements["b:Entities"].elements.each do |entity_xml|
39
+ collection << XML::Entity.from_xml(entity_xml)
40
+ end
41
+ value = collection
42
+ when "d:EntityMetadata", /^d:\w*AttributeMetadata$/
43
+ value = value_element
44
+ when "d:ArrayOfEntityMetadata"
45
+ value = value_element.get_elements("d:EntityMetadata")
46
+ when "d:ArrayOfAttributeMetadata"
47
+ value = value_element.get_elements("d:AttributeMetadata")
48
+ when "b:Money"
49
+ # Nested value.
50
+ value = value_element.elements.first.text.to_f
51
+ when "d:int"
52
+ value = value.to_i
53
+ when "d:string", "d:guid"
54
+ # nothing
55
+ end
56
+ rescue => e
57
+ # In case there's an error during type conversion.
58
+ puts e.message
59
+ end
60
+
61
+ h[key] = value
62
+ end
63
+ h
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ module DynamicsCRM
2
+ module XML
3
+ # Represents Orders XML element.
4
+ class Orders
5
+
6
+ attr_accessor :attribute_name, :order_type
7
+
8
+ def initialize
9
+ @order_type = 0
10
+ end
11
+
12
+ # Using Entity vs entity causes the error: Value cannot be null.
13
+ # <Order> can be repeated multiple times
14
+ # orderType: 0 (Ascending) or 1 (Descending)
15
+ def to_xml
16
+ %Q{
17
+ <a:Orders>
18
+ <a:Order>
19
+ <a:attributeName>#{attribute_name}</a:attributeName>
20
+ <a:orderType>#{order_type}</a:orderType>
21
+ </a:Order>
22
+ </a:Orders>
23
+ }
24
+ end
25
+
26
+ def to_hash
27
+ {
28
+ :attribute_name => attribute_name,
29
+ :order_type => order_type
30
+ }
31
+ end
32
+
33
+ end
34
+ # Orders
35
+ end
36
+ end
@@ -0,0 +1,38 @@
1
+ module DynamicsCRM
2
+ module XML
3
+
4
+ class PageInfo
5
+
6
+ attr_accessor :count, :page_number, :paging_cookie, :return_total_record_count
7
+ def initialize
8
+ @count = 20
9
+ @page_number = 1
10
+ @paging_cookie = nil
11
+ @return_total_record_count = false
12
+ end
13
+
14
+ # Using Entity vs entity causes the error: Value cannot be null.
15
+ def to_xml
16
+ %Q{
17
+ <b:PageInfo>
18
+ <b:Count>#{count}</b:Count>
19
+ <b:PageNumber>#{page_number}</b:PageNumber>
20
+ <b:PagingCookie i:nil="true" />
21
+ <b:ReturnTotalRecordCount>false</b:ReturnTotalRecordCount>
22
+ </b:PageInfo>
23
+ }
24
+ end
25
+
26
+ def to_hash
27
+ {
28
+ :count => count,
29
+ :page_number => page_number,
30
+ :paging_cookie => paging_cookie,
31
+ :return_total_record_count => return_total_record_count
32
+ }
33
+ end
34
+
35
+ end
36
+ # PageInfo
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ module DynamicsCRM
2
+ module XML
3
+ # Represents Query XML fragment.
4
+ class Query
5
+
6
+ attr_accessor :columns, :criteria, :entity_name
7
+
8
+ def initialize(entity_name)
9
+ @entity_name = entity_name
10
+ end
11
+
12
+ def to_xml(options={})
13
+ namespace = options[:namespace] ? options[:namespace] : "b"
14
+
15
+ column_set = ColumnSet.new(columns)
16
+ @criteria ||= Criteria.new
17
+
18
+ xml = %Q{
19
+ #{column_set.to_xml(namespace: namespace, camel_case: true)}
20
+ #{@criteria.to_xml(namespace: namespace)}
21
+ <#{namespace}:Distinct>false</#{namespace}:Distinct>
22
+ <#{namespace}:EntityName>#{entity_name}</#{namespace}:EntityName>
23
+ <#{namespace}:LinkEntities />
24
+ <#{namespace}:Orders />
25
+ }
26
+
27
+ if options[:exclude_root].nil?
28
+ xml = %Q{<query i:type="b:QueryExpression" xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
29
+ #{xml}
30
+ </query>}
31
+ end
32
+ return xml
33
+ end
34
+
35
+ end
36
+ # Query
37
+ end
38
+ end
@@ -0,0 +1,46 @@
1
+ require "dynamics_crm/version"
2
+ # CRM
3
+ require "dynamics_crm/xml/message_builder"
4
+ require 'dynamics_crm/xml/message_parser'
5
+ require "dynamics_crm/xml/fault"
6
+ require "dynamics_crm/xml/attributes"
7
+ require "dynamics_crm/xml/column_set"
8
+ require "dynamics_crm/xml/criteria"
9
+ require "dynamics_crm/xml/query"
10
+ require "dynamics_crm/xml/fetch_expression"
11
+ require "dynamics_crm/xml/entity"
12
+ require "dynamics_crm/xml/entity_reference"
13
+ require "dynamics_crm/response/result"
14
+ require "dynamics_crm/response/retrieve_result"
15
+ require "dynamics_crm/response/retrieve_multiple_result"
16
+ require "dynamics_crm/response/create_result"
17
+ require "dynamics_crm/response/execute_result"
18
+ # Metadata
19
+ require "dynamics_crm/metadata/xml_document"
20
+ require "dynamics_crm/metadata/entity_metadata"
21
+ require "dynamics_crm/metadata/attribute_metadata"
22
+ require "dynamics_crm/metadata/retrieve_all_entities_response"
23
+ require "dynamics_crm/metadata/retrieve_entity_response"
24
+ require "dynamics_crm/metadata/retrieve_attribute_response"
25
+ # Client
26
+ require "dynamics_crm/client"
27
+
28
+ require 'bigdecimal'
29
+ require 'base64'
30
+ require "rexml/document"
31
+ require 'mimemagic'
32
+ require 'curl'
33
+
34
+ module DynamicsCRM
35
+
36
+ class StringUtil
37
+ def self.underscore(str)
38
+ str.gsub(/::/, '/').
39
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
40
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
41
+ tr("-", "_").
42
+ downcase
43
+ end
44
+ end
45
+
46
+ end
@@ -0,0 +1,17 @@
1
+ <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Header>
3
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/AssociateResponse
4
+ </a:Action>
5
+ <a:RelatesTo>urn:uuid:2df2ff28-b16e-4684-bb58-d96b432dc8cc</a:RelatesTo>
6
+ <ActivityId CorrelationId="9395279d-8e7c-4053-ad55-b99c84aa8fde" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
7
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
8
+ <u:Timestamp u:Id="_0">
9
+ <u:Created>2014-03-03T17:39:31.032Z</u:Created>
10
+ <u:Expires>2014-03-03T17:44:31.032Z</u:Expires>
11
+ </u:Timestamp>
12
+ </o:Security>
13
+ </s:Header>
14
+ <s:Body>
15
+ <AssociateResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"/>
16
+ </s:Body>
17
+ </s:Envelope>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0"?>
2
+ <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
3
+ <s:Header>
4
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/CreateResponse</a:Action>
5
+ <a:RelatesTo>urn:uuid:db950b07-cc15-4da9-ba78-807295cda52d</a:RelatesTo>
6
+ <ActivityId CorrelationId="93787a70-d770-4cb0-9a08-526b4543f5bc" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
7
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
8
+ <u:Timestamp u:Id="_0">
9
+ <u:Created>2014-02-28T20:19:19.007Z</u:Created>
10
+ <u:Expires>2014-02-28T20:24:19.007Z</u:Expires>
11
+ </u:Timestamp>
12
+ </o:Security>
13
+ </s:Header>
14
+ <s:Body>
15
+ <CreateResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
16
+ <CreateResult>c4944f99-b5a0-e311-b64f-6c3be5a87df0</CreateResult>
17
+ </CreateResponse>
18
+ </s:Body>
19
+ </s:Envelope>
@@ -0,0 +1,16 @@
1
+ <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Header>
3
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/DeleteResponse</a:Action>
4
+ <a:RelatesTo>urn:uuid:c92ec99b-3093-4856-85dc-c46d6aad5bcc</a:RelatesTo>
5
+ <ActivityId CorrelationId="700b5b17-bbdb-4769-bba0-bb76513e1695" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
6
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
7
+ <u:Timestamp u:Id="_0">
8
+ <u:Created>2014-02-28T20:24:33.196Z</u:Created>
9
+ <u:Expires>2014-02-28T20:29:33.196Z</u:Expires>
10
+ </u:Timestamp>
11
+ </o:Security>
12
+ </s:Header>
13
+ <s:Body>
14
+ <DeleteResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"/>
15
+ </s:Body>
16
+ </s:Envelope>
@@ -0,0 +1,17 @@
1
+ <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Header>
3
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/DisassociateResponse
4
+ </a:Action>
5
+ <a:RelatesTo>urn:uuid:be010af5-f3c7-4f90-9a86-2360dbf1d43e</a:RelatesTo>
6
+ <ActivityId CorrelationId="88cb28d4-340f-49b9-a8b3-8b34992df052" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
7
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
8
+ <u:Timestamp u:Id="_0">
9
+ <u:Created>2014-03-03T17:39:31.120Z</u:Created>
10
+ <u:Expires>2014-03-03T17:44:31.120Z</u:Expires>
11
+ </u:Timestamp>
12
+ </o:Security>
13
+ </s:Header>
14
+ <s:Body>
15
+ <DisassociateResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"/>
16
+ </s:Body>
17
+ </s:Envelope>
@@ -0,0 +1,120 @@
1
+ <s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
2
+ <s:Header>
3
+ <a:Action s:mustUnderstand="1">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/ExecuteResponse
4
+ </a:Action>
5
+ <a:RelatesTo>urn:uuid:cf266ae7-0139-40dd-bdaa-c64765d16a1f</a:RelatesTo>
6
+ <ActivityId CorrelationId="5c0bd162-f7d9-4059-a709-a7e8b7bbaa04" xmlns="http://schemas.microsoft.com/2004/09/ServiceModel/Diagnostics">00000000-0000-0000-0000-000000000000</ActivityId>
7
+ <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
8
+ <u:Timestamp u:Id="_0">
9
+ <u:Created>2014-03-13T23:31:44.643Z</u:Created>
10
+ <u:Expires>2014-03-13T23:36:44.643Z</u:Expires>
11
+ </u:Timestamp>
12
+ </o:Security>
13
+ </s:Header>
14
+ <s:Body>
15
+ <ExecuteResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services">
16
+ <ExecuteResult i:type="b:RetrieveMultipleResponse" xmlns:b="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
17
+ <b:ResponseName>RetrieveMultiple</b:ResponseName>
18
+ <b:Results xmlns:c="http://schemas.datacontract.org/2004/07/System.Collections.Generic">
19
+ <b:KeyValuePairOfstringanyType>
20
+ <c:key>EntityCollection</c:key>
21
+ <c:value i:type="b:EntityCollection">
22
+ <b:Entities>
23
+ <b:Entity>
24
+ <b:Attributes>
25
+ <b:KeyValuePairOfstringanyType>
26
+ <c:key>new_tinderboxdocumentid</c:key>
27
+ <c:value i:type="d:guid" xmlns:d="http://schemas.microsoft.com/2003/10/Serialization/">9c27cf91-ada3-e311-b64f-6c3be5a87df0</c:value>
28
+ </b:KeyValuePairOfstringanyType>
29
+ <b:KeyValuePairOfstringanyType>
30
+ <c:key>new_name</c:key>
31
+ <c:value i:type="d:string" xmlns:d="http://www.w3.org/2001/XMLSchema">6 orders of Product SKU JJ202</c:value>
32
+ </b:KeyValuePairOfstringanyType>
33
+ <b:KeyValuePairOfstringanyType>
34
+ <c:key>createdon</c:key>
35
+ <c:value i:type="d:dateTime" xmlns:d="http://www.w3.org/2001/XMLSchema">2014-03-04T14:59:23Z</c:value>
36
+ </b:KeyValuePairOfstringanyType>
37
+ </b:Attributes>
38
+ <b:EntityState i:nil="true"/>
39
+ <b:FormattedValues>
40
+ <b:KeyValuePairOfstringstring>
41
+ <c:key>createdon</c:key>
42
+ <c:value>3/4/2014 6:59 AM</c:value>
43
+ </b:KeyValuePairOfstringstring>
44
+ </b:FormattedValues>
45
+ <b:Id>9c27cf91-ada3-e311-b64f-6c3be5a87df0</b:Id>
46
+ <b:LogicalName>new_tinderboxdocument</b:LogicalName>
47
+ <b:RelatedEntities/>
48
+ </b:Entity>
49
+ <b:Entity>
50
+ <b:Attributes>
51
+ <b:KeyValuePairOfstringanyType>
52
+ <c:key>new_tinderboxdocumentid</c:key>
53
+ <c:value i:type="d:guid" xmlns:d="http://schemas.microsoft.com/2003/10/Serialization/">0b534c29-f5aa-e311-b64f-6c3be5a87df0</c:value>
54
+ </b:KeyValuePairOfstringanyType>
55
+ <b:KeyValuePairOfstringanyType>
56
+ <c:key>new_name</c:key>
57
+ <c:value i:type="d:string" xmlns:d="http://www.w3.org/2001/XMLSchema">6 orders of Product SKU JJ202</c:value>
58
+ </b:KeyValuePairOfstringanyType>
59
+ <b:KeyValuePairOfstringanyType>
60
+ <c:key>createdon</c:key>
61
+ <c:value i:type="d:dateTime" xmlns:d="http://www.w3.org/2001/XMLSchema">2014-03-13T21:19:29Z</c:value>
62
+ </b:KeyValuePairOfstringanyType>
63
+ </b:Attributes>
64
+ <b:EntityState i:nil="true"/>
65
+ <b:FormattedValues>
66
+ <b:KeyValuePairOfstringstring>
67
+ <c:key>createdon</c:key>
68
+ <c:value>3/13/2014 2:19 PM</c:value>
69
+ </b:KeyValuePairOfstringstring>
70
+ </b:FormattedValues>
71
+ <b:Id>0b534c29-f5aa-e311-b64f-6c3be5a87df0</b:Id>
72
+ <b:LogicalName>new_tinderboxdocument</b:LogicalName>
73
+ <b:RelatedEntities/>
74
+ </b:Entity>
75
+ <b:Entity>
76
+ <b:Attributes>
77
+ <b:KeyValuePairOfstringanyType>
78
+ <c:key>new_tinderboxdocumentid</c:key>
79
+ <c:value i:type="d:guid" xmlns:d="http://schemas.microsoft.com/2003/10/Serialization/">107a6fbc-f4aa-e311-af52-6c3be5a8ad70</c:value>
80
+ </b:KeyValuePairOfstringanyType>
81
+ <b:KeyValuePairOfstringanyType>
82
+ <c:key>new_name</c:key>
83
+ <c:value i:type="d:string" xmlns:d="http://www.w3.org/2001/XMLSchema">6 orders of Product SKU JJ202</c:value>
84
+ </b:KeyValuePairOfstringanyType>
85
+ <b:KeyValuePairOfstringanyType>
86
+ <c:key>createdon</c:key>
87
+ <c:value i:type="d:dateTime" xmlns:d="http://www.w3.org/2001/XMLSchema">2014-03-13T21:16:27Z</c:value>
88
+ </b:KeyValuePairOfstringanyType>
89
+ </b:Attributes>
90
+ <b:EntityState i:nil="true"/>
91
+ <b:FormattedValues>
92
+ <b:KeyValuePairOfstringstring>
93
+ <c:key>createdon</c:key>
94
+ <c:value>3/13/2014 2:16 PM</c:value>
95
+ </b:KeyValuePairOfstringstring>
96
+ </b:FormattedValues>
97
+ <b:Id>107a6fbc-f4aa-e311-af52-6c3be5a8ad70</b:Id>
98
+ <b:LogicalName>new_tinderboxdocument</b:LogicalName>
99
+ <b:RelatedEntities/>
100
+ </b:Entity>
101
+ </b:Entities>
102
+ <b:EntityName>new_tinderboxdocument</b:EntityName>
103
+ <b:MinActiveRowVersion>-1</b:MinActiveRowVersion>
104
+ <b:MoreRecords>false</b:MoreRecords>
105
+ <b:PagingCookie>&lt;cookie page=&quot;1&quot;&gt;&lt;new_name last=&quot;Test Proposal&quot;
106
+ first=&quot;6 orders of Product SKU JJ202&quot;
107
+ /&gt;&lt;new_tinderboxdocumentid
108
+ last=&quot;{B4F20991-D399-E311-AD92-6C3BE5A8AD70}&quot;
109
+ first=&quot;{9C27CF91-ADA3-E311-B64F-6C3BE5A87DF0}&quot;
110
+ /&gt;&lt;/cookie&gt;
111
+ </b:PagingCookie>
112
+ <b:TotalRecordCount>-1</b:TotalRecordCount>
113
+ <b:TotalRecordCountLimitExceeded>false</b:TotalRecordCountLimitExceeded>
114
+ </c:value>
115
+ </b:KeyValuePairOfstringanyType>
116
+ </b:Results>
117
+ </ExecuteResult>
118
+ </ExecuteResponse>
119
+ </s:Body>
120
+ </s:Envelope>