class SugarCRM::Connection
Public Class Methods
connect(url,consumer_key,consumer_secret,username,password,platform)
click to toggle source
# File lib/sugarcrm_v10.rb, line 17 def self.connect(url,consumer_key,consumer_secret,username,password,platform) begin $consumer_key = consumer_key $consumer_secret = consumer_secret $username = username $password = password $platform = platform $url=url uri = URI.parse(url) if uri.is_a?(URI::HTTP) && !uri.host.nil? oauth2_token_arguments = {"grant_type" =>"password", "client_id" =>consumer_key, "client_secret" =>consumer_secret, "username" =>username, "password" =>password, "platform" =>platform} http = Net::HTTP.new uri.host, uri.port http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new uri.request_uri request["Content-Type"] = "application/x-www-form-urlencoded" request.body = URI.encode_www_form(oauth2_token_arguments) response = http.request request $token = nil if response.kind_of? Net::HTTPSuccess $token = JSON.parse response.body return SugarCRM::Connection else raise "Unable to connect to sugarcrm" end end rescue Exception=>e puts e end end
create_record(module_name,record)
click to toggle source
# File lib/sugarcrm_v10.rb, line 188 def self.create_record(module_name,record) #creates a new record begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end uri = URI.parse($url) url = "https://"+uri.host+"/rest/v10/"+module_name response = execute_postreq(url,record) raise "Module '#{module_name}' not found" unless response.is_a? Net::HTTPSuccess rec= JSON.parse response.body id=rec["id"] return id rescue Exception =>e puts e end end
download_document(doc_id,path)
click to toggle source
# File lib/sugarcrm_v10.rb, line 350 def self.download_document(doc_id,path) #downloads a document via document module begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end uri= URI.parse($url) rec = fetch_single_record("Documents",doc_id) doc_rev_id = rec['document_revision_id'] file_name = rec['document_name'] url = "https://"+uri.host+"/rest/v10/DocumentRevisions/#{doc_rev_id}/file/filename" response = execute_uri(url) raise "Document id not found" unless response.is_a? Net::HTTPSuccess file_contents = response.body file_contents.force_encoding(Encoding::ISO_8859_1).encode(Encoding::UTF_8) file = path + file_name IO.binwrite file,file_contents rescue =>e puts e end end
execute_postreq(url,record)
click to toggle source
# File lib/sugarcrm_v10.rb, line 85 def self.execute_postreq(url,record) uri = URI.parse url http = Net::HTTP.new uri.host, uri.port http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new (url) request["OAuth-Token"] = $token["access_token"] request.add_field('Content-Type', 'application/json') request.body = record.to_json response = http.request(request) end
execute_putreq(url,record)
click to toggle source
# File lib/sugarcrm_v10.rb, line 99 def self.execute_putreq(url,record) uri = URI.parse url http = Net::HTTP.new uri.host, uri.port http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Put.new (url) request["OAuth-Token"] = $token["access_token"] request.add_field('Content-Type', 'application/json') request.body = record.to_json response = http.request(request) end
execute_uri(url)
click to toggle source
# File lib/sugarcrm_v10.rb, line 72 def self.execute_uri(url) #getrequest uri = URI.parse url http = Net::HTTP.new uri.host, uri.port http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new uri.request_uri request["Content-Type"] = "application/json" request["OAuth-Token"] = $token["access_token"] response = http.request request end
fetch_all(module_name,max_num=20,offset=0)
click to toggle source
# File lib/sugarcrm_v10.rb, line 134 def self.fetch_all(module_name,max_num=20,offset=0) # returns a set of records with all fields. begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end raise "Maximum number/offset should be a numeric value" unless max_num.is_a? Integer raise "Maximum number/offset should be a numeric value" unless offset.is_a? Integer uri=URI.parse($url) url="https://"+uri.host+"/rest/v10/"+module_name+"?max_num=#{max_num}&offset=#{offset}" response=execute_uri(url) raise "Module '#{module_name}' not found" unless response.is_a? Net::HTTPSuccess resp= JSON.parse response.body records=resp["records"] raise "No records found!" if records.empty? return records rescue Exception => e puts e end end
fetch_any_fields(module_name,max_num=20,offset=0,fields)
click to toggle source
# File lib/sugarcrm_v10.rb, line 154 def self.fetch_any_fields(module_name,max_num=20,offset=0,fields) #returns a set of records , passing required fields and module name begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end uri = URI.parse($url) raise "Maximum number/offset should be a numeric value" unless max_num.is_a? Integer raise "Maximum number/offset should be a numeric value" unless offset.is_a? Integer if fields.kind_of?(Array) @field=fields[0] i=1 while i<fields.length @field=@field+","+fields[i] i+=1 end else @field=fields end url = "https://"+uri.host+"/rest/v10/"+module_name+"?max_num=#{max_num}&"+"fields=#{@field}&"+"offset=#{offset}" response = execute_uri(url) raise "Module '#{module_name}' not found" unless response.is_a? Net::HTTPSuccess resp = JSON.parse response.body records=resp["records"] raise "No records found!" if records.empty? return records rescue Exception=>e puts e end end
fetch_single_record(module_name,id)
click to toggle source
# File lib/sugarcrm_v10.rb, line 114 def self.fetch_single_record(module_name,id) # returns a single record with given id begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end id=id.to_s uri = URI.parse($url) url = "https://"+uri.host+"/rest/v10/"+module_name+"/#{id}" response = execute_uri(url) raise "Module or record id not found" unless response.is_a? Net::HTTPSuccess resp = JSON.parse response.body return res= OpenStruct.new(resp) rescue =>e puts e end end
filter_by_and_or(module_name,max_num=20,offset=2,fields=nil,filter)
click to toggle source
# File lib/sugarcrm_v10.rb, line 224 def self.filter_by_and_or(module_name,max_num=20,offset=2,fields=nil,filter) # executes and/or nested conditions begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end @filter1="" @filter2="" filter.each do |key,value| value.each do |k,v| if v.class==Hash v.each do |x,y| @filter1 = "&filter"+"#{[0]}"+"[#{key}]"+"#{[0]}"+"[#{k}]"+"[#{x}]"+"="+"#{y}"+@filter1 end else @filter2 = "&filter"+"#{[0]}"+"[#{key}]"+"#{[0]}"+"[#{k}]"+"="+"#{v}"+@filter2 end end end @filter= @filter1+@filter2 if fields!=nil if fields.kind_of?(Array) @field=fields.join(",") else @field=fields end end uri = URI.parse($url) url = "https://"+uri.host+"/rest/v10/"+module_name+"?max_num=#{max_num}"+"&offset=#{offset}"+"#{@filter}"+"&fields=#{@field}" response = execute_uri(url) raise "Module not found" unless response.is_a? Net::HTTPSuccess resp= JSON.parse response.body records= resp["records"] raise "No records found!" if records.empty? return records rescue Exception =>e puts e end end
filter_records(module_name,max_num=20,offset=0,fields=nil,filter)
click to toggle source
# File lib/sugarcrm_v10.rb, line 264 def self.filter_records(module_name,max_num=20,offset=0,fields=nil,filter) #filter records with conditions { $starts,$contains ,$lt etc..} begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end raise " Add filter conditions" unless filter.class==Hash @filter2="" @filter1="" filter.each do |k,v| if v.class == Hash v.each do |key,value| @filter1 = "&filter"+"#{[0]}"+"[#{k}]"+"[#{key}]"+"="+"#{value}" + @filter1 end else @filter2 = "&filter"+"#{[0]}"+"[#{k}]"+"="+"#{v}" + @filter2 end end @filter = @filter1 + @filter2 if fields!=nil if fields.kind_of?(Array) @field=fields.join(",") else @field=fields end end uri = URI.parse($url) url = "https://"+uri.host+"/rest/v10/"+module_name+"?max_num=#{max_num}"+"#{@filter}"+"&offset=#{offset}"+"&fields=#{@field}" response = execute_uri(url) raise "Module not found" unless response.is_a? Net::HTTPSuccess resp= JSON.parse response.body records= resp["records"] raise "No records found!" if records.empty? return records rescue Exception =>e puts e end end
get_refreshtoken()
click to toggle source
# File lib/sugarcrm_v10.rb, line 53 def self.get_refreshtoken() #generates new token uri = URI.parse($url) oauth2_token_arguments = {"grant_type" =>"refresh_token", "client_id" =>$consumer_key, "client_secret" =>$consumer_secret,"refresh_token"=>$token["refresh_token"]} http = Net::HTTP.new uri.host, uri.port http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new uri.request_uri request["Content-Type"] = "application/x-www-form-urlencoded" request.body = URI.encode_www_form(oauth2_token_arguments) response = http.request request if response.kind_of? Net::HTTPSuccess $token = JSON.parse response.body return $token["access_token"] else return nil end end
update_record(module_name,id,record)
click to toggle source
# File lib/sugarcrm_v10.rb, line 205 def self.update_record(module_name,id,record) #updates the given record begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end updated = Hash.new id = id.to_s uri = URI.parse($url) url = "https://"+uri.host+"/rest/v10/"+module_name+"/#{id}" response = execute_putreq(url,record) raise "Module or record id not found" unless response.is_a? Net::HTTPSuccess rec= JSON.parse response.body return rec rescue Exception=>e puts e end end
upload_document(hash_options)
click to toggle source
# File lib/sugarcrm_v10.rb, line 373 def self.upload_document(hash_options) #uploads a file to Documents module begin if get_refreshtoken()==nil connect($url,$consumer_key,$consumer_secret,$username,$password,$platform) end uri = URI.parse($url) revision =revision.to_i request_opt = JSON.generate(hash_options) res = RestClient.post 'https://'+uri.host+'/rest/v10/Documents', request_opt, :content_type => 'application/json', :'OAuth-Token' => $token['access_token'], :'Cache-Control' => 'no-cache', :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE root = JSON.parse res.body @id = root['id'] document_id = @id path=hash_options["name"] response = RestClient.post "https://"+ uri.host+"/rest/v10/Documents/#{document_id}/file/filename", :filename => File.new(path, 'rb'), :format => 'sugar-html-json', :'OAuth-Token' => $token['access_token'], :'Cache-Control' => 'no-cache', :use_ssl => true, :verify_mode => OpenSSL::SSL::VERIFY_NONE return document_id rescue Exception =>e puts "Couldn't upload the file" end end