class DynamicsCRM::XML::Criteria

Constants

SUPPORTED_OPERATORS

Attributes

filter_operator[RW]

Public Class Methods

new(tuples = [], filter_operator: nil) click to toggle source
Calls superclass method
# File lib/dynamics_crm/xml/criteria.rb, line 7
def initialize(tuples = [], filter_operator: nil)
  filter_operator ||= 'And'
  raise "Supported operators: #{SUPPORTED_OPERATORS.join(',')}" if !SUPPORTED_OPERATORS.include?(filter_operator)

  super(tuples)
  @filter_operator = filter_operator

  # Convert to ConditionExpression
  @expressions = self.map do |tuple|
    attr_name, operator, value, data_type = *tuple
    ConditionExpression.new(attr_name, operator, value, type: data_type)
  end

  @filters = []
end

Public Instance Methods

add_condition(attr_name, operator, value = nil, type: nil) click to toggle source
# File lib/dynamics_crm/xml/criteria.rb, line 23
def add_condition(attr_name, operator, value = nil, type: nil)
  @expressions << ConditionExpression.new(attr_name, operator, value, type: type)
end
add_filter(filter) click to toggle source
# File lib/dynamics_crm/xml/criteria.rb, line 27
def add_filter(filter)
  @filters << filter
end
conditions_xml(options) click to toggle source
# File lib/dynamics_crm/xml/criteria.rb, line 47
def conditions_xml(options)
  ns = options[:namespace] ? options[:namespace] : 'a'

  if @expressions.empty?
    "<#{ns}:Conditions />"
  else
    xml_expression = @expressions.map do |conditional|
      conditional.to_xml(options)
    end.join('')

    %(<#{ns}:Conditions>
      #{xml_expression}
    </#{ns}:Conditions>)
  end
end
filters_xml(options) click to toggle source
# File lib/dynamics_crm/xml/criteria.rb, line 63
def filters_xml(options)
  ns = options[:namespace] ? options[:namespace] : 'a'
  if @filters.empty?
    "<#{ns}:Filters />"
  else
    fx = @filters.map { |f| f.to_xml(options) }.join('')
    %(<#{ns}:Filters>#{fx}</#{ns}:Filters>)
  end
end
to_xml(options = {}) click to toggle source

ConditionExpression can be repeated multiple times Operator: can be lots of values such as: eq (Equals), neq (Not Equals), gt (Greater Than)

get the values from a fetch xml query

Values -> Value can be repeated multiple times FilterOperator: and OR or depending on the filter requirements Filters: can contain FilterExpressions to support complex logical statements.

# File lib/dynamics_crm/xml/criteria.rb, line 37
def to_xml(options = {})
  ns = options[:namespace] ? options[:namespace] : 'a'

  %(<#{ns}:Criteria>
      #{conditions_xml(options)}
      <#{ns}:FilterOperator>#{@filter_operator}</#{ns}:FilterOperator>
      #{filters_xml(options)}
  </#{ns}:Criteria>)
end