+ Start a Discussion

cannot access data from Apex web services

I have an apex web service in an apex class that is called from the flex front end . The Flex is embedded in a VF page as a flash object <apex:flash> and I am logging into salesforce.com using the session Id (grabbing it from the controller using UserInfo.getSessionId()) and session URL = $Api.Partner_Server_URL_90.


I am developing in my sandbox.


The code for the apex class holding the webservice is as follows.


global class MyWebService 
	private static Datetime startDate {get; set;}
	private static Datetime endDate {get; set;}
	global class LeadObject
		public String name {get; set;}
		public String Id {get; set;}
		public String country {get; set;}
		public String city {get; set;}
		public String status {get; set;}
		public String annual_Rev_Range {get; set;}
		public String score {get; set;}
		public String company {get; set;}
		public LeadObject(Lead lead)
			name = lead.Name;
			Id = lead.Id;
			country = lead.Country;
			city = lead.City;
			status = lead.Status;
			annual_Rev_Range = lead.Annual_Revenue_Range__c;
			company = lead.Company;
			score = lead.Score__c.format();
	Webservice static List<LeadObject> getLeads(String startDateString , String startMonthString , String startYearString,
															String endDateString , String endMonthString , String endYearString)
		List<LeadObject> result = new List<LeadObject>();
		//set the start and the end dates
		setDates(startDateString , startMonthString , startYearString,
				endDateString , endMonthString , endYearString);
		//get Leads Data
		List<Lead_Key_Event__c> leadKEs;
		leadKEs = new List<Lead_Key_Event__c>();
		List<String> leadIds = getLeadIds(leadKEs); 
		result = new List<LeadObject>();
		For(Lead l : [Select l.Annual_Revenue_Range__c, l.City, l.Company, l.Country, l.FirstName,l.Name, l.Id, l.LastName, l.Score__c, l.Status 
					  from Lead l where l.Id IN : leadIds])
			result.add(new LeadObject(l));
		return result;
	private static List<String> getLeadIds(List<Lead_Key_Event__c> leadKeyEvents)
		List<String> uniqueIds = new List<String>();
		System.debug('Start date : ' + startDate.date().format() + ' End Date : ' + endDate.date().format());
		Map<String,Lead_Key_Event__c> uniqueLeadsMap = new Map<String , Lead_Key_Event__c>();
		For(Lead_Key_Event__c obj : [Select l.Id, l.Lead__c, l.Lead__r.Name , l.Name, l.Lead_Created_Date__c, l.Score__c from Lead_Key_Event__c l
					    			Where l.Lead__c != null And l.Lead_Created_Date__c >= : startDate And l.Lead_Created_Date__c <= : endDate])
	    	if(uniqueLeadsMap.get(obj.Lead__c) == null)
	    		uniqueLeadsMap.put(obj.Lead__c, obj);
	    return uniqueIds;
	private static void setDates(String startDateString , String startMonthString , String startYearString,
							String endDateString , String endMonthString , String endYearString)
		startDate = Datetime.newInstance(Integer.valueOf(startYearString),Integer.valueOf(startMonthString),Integer.valueOf(startDateString));
		endDate = DateTime.newInstance(Integer.valueOf(endYearString),Integer.valueOf(endMonthString),Integer.valueOf(endDateString));

 The code for the flex front end thats calling the webservice menthod getLeads() is as follows:



package Controller
	import Model.Model;
	import com.salesforce.AsyncResponder;
	import com.salesforce.Connection;
	import com.salesforce.objects.Parameter;
	import com.salesforce.results.Fault;
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;

	public class WebServiceClient
		public var results:ArrayCollection;
		public var binding:Connection;
		public function WebServiceClient(sfdcConnection:Connection)
			this.binding = sfdcConnection;
			if (!this.binding.IsLoggedIn)
				throw new Error("Connection to the server is not available.");	
		public function execute(startDate:Date , endDate:Date): void
			Alert.show("executing web service client");
			//preparing the parameters of the web service method
			var params : Array = new Array(6);
			var stDateStringParam:Parameter = new Parameter("startDateString",startDate.date.toString());
			params[0] = stDateStringParam;
			var stMonthStringParam:Parameter = new Parameter("startMonthString",startDate.month.toString());
			params[1] = stMonthStringParam;
			var stYearStringParam:Parameter = new Parameter("startYearString",startDate.fullYear.toString());
			params[2] = stYearStringParam;
			var endDateStringParam:Parameter = new Parameter("endDateString",endDate.date.toString());
			params[3] = endDateStringParam;
			var endMonthStringParam:Parameter = new Parameter("endMonthString",endDate.month.toString());
			params[4] = endMonthStringParam;
			var endYearStringParam:Parameter = new Parameter("endYearString",endDate.fullYear.toString());
			params[5] = endYearStringParam;
		private function getLeads(params:Array):void
			// using SFDC Aysync Responder to get the results in flex
			var tempCallBack: AsyncResponder = new AsyncResponder(
						if (result != null)
							var reportsDataController:ReportsDataController = new ReportsDataController();
							Alert.show("Leads are empty.", "Info");
						Alert.show("error in result handler : " + err.message);
				function(result: Fault):void { Alert.show("Operation failed", "Error");  }
			// call the execute method of the SFDC connection object to reach out the web service
			Alert.show("Invokin SOAP");
			binding.execute("MyWebService", "getLeads", params, tempCallBack);
				Alert.show("error in getLeads : " + err.message);	


if I look in the Debug logs , I know i am invoking the webservice and querying for the data , my problem is that the data is not being passed back to flex . i.e. the result object in my asyncresponder is coming back as null.


Any help would be greatly appreciated.







Best Answer chosen by Admin (Salesforce Developers) 

IIRC the properties in your LeadObject class must be declared with the "Webservice" modifier, if you wish them to be returned from a Webservice call.

All Answers


IIRC the properties in your LeadObject class must be declared with the "Webservice" modifier, if you wish them to be returned from a Webservice call.

This was selected as the best answer

Thanks , that worked.

Hi i am newly writing webservice can you post the correct answer