You need to sign in to do that
Don't have an account?
Ean9
Web service callout from salesforce to .net using SOAP
When i update a picklist value from 'Requested' to 'Approved' then it should invoke a trigger which in turn calls an external web service (.net web application) and pass those data of the updated record along with it and those records should be received by the .net application and saved on sql server database. I am totally new to Salesforce and Web service.
Trigger,
trigger AdoDetailTrigger on PCS_Detail__c (after update)
{
List<PCS_Detail__c> pcsDetail = [Select Id,Tracking_Details__c From PCS_Detail__c Where Id IN :Trigger.new]; if(pcsDetail[0].Tracking_Details__c == 'Approved')
{
Set<Id> resultIds = (new Map<Id,SObject>(pcsDetail)).keySet();
InvokeWebServiceOnStatusChange.callWebService(resultIds);
}
}
Apex class future callout,
public class InvokeWebServiceOnStatusChange
{
@future(callout=true)
public static void callWebService(Set<Id> resultIds)
{
try
{
List<PCS_Detail__c> pcsDetail = [Select Name__r.Id,Name__r.Name,Name__r.Breed__c,Name__r.Species__c,Name__r.Gender__c From PCS_Detail__c Where Id IN :resultIds];
NewPetInformation.PackageServiceSoap obj = new NewPetInformation.PackageServiceSoap();
obj.UpdateDatabase(pcsDetail);
}
catch(System.AsyncException e)
{
System.debug('Exception' +e);
}
}
.NET web method,
[WebMethod]
public void UpdateDatabase(List<PCSDetail> values)
{
SqlConnection constr = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
SqlCommand comm = new SqlCommand();
comm.CommandText = "Insert into PetInformation(Id,Name,Breed,Species,Gender) values(@p0,@p1,@p2,@p3,@p4)"; comm.Parameters.AddWithValue("@p0", values[0].Id); comm.Parameters.AddWithValue("@p1", values[0].Name); comm.Parameters.AddWithValue("@p2", values[0].Breed); comm.Parameters.AddWithValue("@p3", values[0].Species); comm.Parameters.AddWithValue("@p4", values[0].Gender);
comm.Connection = constr;
comm.ExecuteNonQuery();
}
Model,
public class PCSDetail
{
public string Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public string Species { get; set; }
public string Gender { get; set; }
}
After generating WSDL and parsed the WSDL into apex classes when i save the apex class which calls the web service, i get the error saying
Method does not exist or incorrect signature: [NewPetInformation.PackageServiceSoap].UpdateDatabase(List). How to solve this.
http://salesforce.stackexchange.com/questions/115453/web-service-callout-from-salesforce-to-net-using-soap
Trigger,
trigger AdoDetailTrigger on PCS_Detail__c (after update)
{
List<PCS_Detail__c> pcsDetail = [Select Id,Tracking_Details__c From PCS_Detail__c Where Id IN :Trigger.new]; if(pcsDetail[0].Tracking_Details__c == 'Approved')
{
Set<Id> resultIds = (new Map<Id,SObject>(pcsDetail)).keySet();
InvokeWebServiceOnStatusChange.callWebService(resultIds);
}
}
Apex class future callout,
public class InvokeWebServiceOnStatusChange
{
@future(callout=true)
public static void callWebService(Set<Id> resultIds)
{
try
{
List<PCS_Detail__c> pcsDetail = [Select Name__r.Id,Name__r.Name,Name__r.Breed__c,Name__r.Species__c,Name__r.Gender__c From PCS_Detail__c Where Id IN :resultIds];
NewPetInformation.PackageServiceSoap obj = new NewPetInformation.PackageServiceSoap();
obj.UpdateDatabase(pcsDetail);
}
catch(System.AsyncException e)
{
System.debug('Exception' +e);
}
}
.NET web method,
[WebMethod]
public void UpdateDatabase(List<PCSDetail> values)
{
SqlConnection constr = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
SqlCommand comm = new SqlCommand();
comm.CommandText = "Insert into PetInformation(Id,Name,Breed,Species,Gender) values(@p0,@p1,@p2,@p3,@p4)"; comm.Parameters.AddWithValue("@p0", values[0].Id); comm.Parameters.AddWithValue("@p1", values[0].Name); comm.Parameters.AddWithValue("@p2", values[0].Breed); comm.Parameters.AddWithValue("@p3", values[0].Species); comm.Parameters.AddWithValue("@p4", values[0].Gender);
comm.Connection = constr;
comm.ExecuteNonQuery();
}
Model,
public class PCSDetail
{
public string Id { get; set; }
public string Name { get; set; }
public string Breed { get; set; }
public string Species { get; set; }
public string Gender { get; set; }
}
After generating WSDL and parsed the WSDL into apex classes when i save the apex class which calls the web service, i get the error saying
Method does not exist or incorrect signature: [NewPetInformation.PackageServiceSoap].UpdateDatabase(List). How to solve this.
http://salesforce.stackexchange.com/questions/115453/web-service-callout-from-salesforce-to-net-using-soap
Can you please post the apex code that was generated from the WSDL? I need that in order to help you with this issue.
Best regards,
Martijn Schwärzer
//Generated by wsdl2apex
public class NewPetInformation {
public class ArrayOfPCSDetail_x {
public NewPetInformation.PCSDetail_x[] PCSDetail_x;
private String[] PCSDetail_x_type_info = new String[]{'PCSDetail','http://businesssharp.com/packageservice/',null,'0','-1','true'};
private String[] apex_schema_type_info = new String[]{'http://businesssharp.com/packageservice/','true','false'};
private String[] field_order_type_info = new String[]{'PCSDetail_x'};
}
public class PCSDetail_x {
public String Id;
public String Name;
public String Breed;
public String Species;
public String Gender;
private String[] Id_type_info = new String[]{'Id','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] Name_type_info = new String[]{'Name','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] Breed_type_info = new String[]{'Breed','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] Species_type_info = new String[]{'Species','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] Gender_type_info = new String[]{'Gender','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] apex_schema_type_info = new String[]{'http://businesssharp.com/packageservice/','true','false'};
private String[] field_order_type_info = new String[]{'Id','Name','Breed','Species','Gender'};
}
public class UpdateDatabase_element {
public NewPetInformation.ArrayOfPCSDetail_x values;
private String[] values_type_info = new String[]{'values','http://businesssharp.com/packageservice/',null,'0','1','false'};
private String[] apex_schema_type_info = new String[]{'http://businesssharp.com/packageservice/','true','false'};
private String[] field_order_type_info = new String[]{'values'};
}
public class UpdateDatabaseResponse_element {
private String[] apex_schema_type_info = new String[]{'http://businesssharp.com/packageservice/','true','false'};
private String[] field_order_type_info = new String[]{};
}
public class PackageServiceSoap {
public String endpoint_x = 'http://localhost:3251/Services/PackageService.asmx';
public Map<String,String> inputHttpHeaders_x;
public Map<String,String> outputHttpHeaders_x;
public String clientCertName_x;
public String clientCert_x;
public String clientCertPasswd_x;
public Integer timeout_x;
private String[] ns_map_type_info = new String[]{'http://businesssharp.com/packageservice/', 'NewPetInformation'};
public void UpdateDatabase(NewPetInformation.ArrayOfPCSDetail_x values) {
NewPetInformation.UpdateDatabase_element request_x = new NewPetInformation.UpdateDatabase_element();
request_x.values = values;
NewPetInformation.UpdateDatabaseResponse_element response_x;
Map<String, NewPetInformation.UpdateDatabaseResponse_element> response_map_x = new Map<String, NewPetInformation.UpdateDatabaseResponse_element>();
response_map_x.put('response_x', response_x);
WebServiceCallout.invoke(
this,
request_x,
response_map_x,
new String[]{endpoint_x,
'http://businesssharp.com/packageservice/UpdateDatabase',
'http://businesssharp.com/packageservice/',
'UpdateDatabase',
'http://businesssharp.com/packageservice/',
'UpdateDatabaseResponse',
'NewPetInformation.UpdateDatabaseResponse_element'}
);
response_x = response_map_x.get('response_x');
}
}
}
You're calling the wrong method. Take a look at your wsdl one more time. You need to call this one:
Then, you need to pass an ArrayofPCSDetails which will contain your PCSDetail_x list as follows:
Thanks
Your web service callout takes a list of PCSDetail_x objects as argument (in the ArrayOfPCSDetail_x argument).
So you will have to convert your PCSDetail__c objects to PCSDetail_x objects, add them to the ArrayOfPCSDetail_x and use that as an argument in your webservice callout.
I've prepared some code to do that, no JSON involved:
Hope this helps!
Best regards,
Martijn Schwärzer
I am new in salesforces could PLEASE post code of creating webservices (asmx) file in visual studio- to generate WSDL in salesforces . PLEASE .