Showing posts with label SOAP. Show all posts
Showing posts with label SOAP. Show all posts

Wednesday, August 17, 2011

CRM 2011 messages using SOAP

Microsoft has provided CRM ODATA service to perform actions on CRM data. However, the ODATA service only allows you to perform basic CRUD operations on CRM entities. If you want to perform other operations like Change state or perhaps read Metadata information, you will need to access the CRM SOAP service.

You can add the reference to CRM SOAP service using the following URL.
http://Server_name/Organization_name/XRMServices/2011/Organization.svc

We have encountered various issues while trying to get our messages executed through SOAP. Here we are going to list out all the messages and the properties that are required to be set to get the SOAP message to execute successfully.

RetrieveAttribute request – This request allows you to read the metadata information of a given attribute.

TestApplication.CrmSdk.OrganizationRequest request = new TestApplication.CrmSdk.OrganizationRequest() { RequestName = "RetrieveAttribute" };

//Set all required parameters of request
request["EntityLogicalName"] = "Account";
request["RetrieveAsIfPublished"] = true;
request["LogicalName"] = "Address1_AddressTypeCode ";
request["MetadataId"] = Guid.Empty;

//Execute the request
service.Execute(request);

In call back function call end execute function to execute request and get response of request as shown in below line of code,

//end the request
TestApplication.CrmSdk.OrganizationResponse response = service.EndExecute(result);

//read the result
CrmSdk.PicklistAttributeMetadata picklist = (CrmSdk.PicklistAttributeMetadata)response["AttributeMetadata"];

In the above request make you to set the MetadataID to Guid.Empty or this message would not execute.


QualifyLead Request – This request allows you to qualify a lead and create Account, Contact and Opportunity from the lead record.

OrganizationRequest _qualifyRequest = new OrganizationRequest() { RequestName = "QualifyLead" };

//Initialize Member of qualify request as shown in below code

//set Account
_qualifyRequest["CreateAccount"] = true;

//set contact
_qualifyRequest["CreateContact"] = true;

//set opportunity
_qualifyRequest["CreateOpportunity"] = true;

//set Status
OptionSetValue status = new OptionSetValue();
status.Value = -1;
_qualifyRequest["Status"] = status;

//set currency
EntityReference currency = new EntityReference();
currency.LogicalName = "transactioncurrency";
currency.Id = new Guid(transactioncurrencyId);
_qualifyRequest["OpportunityCurrencyId"] = currency;


//set customer
EntityReference customer = new EntityReference();
customer .LogicalName = "account";
currency.Id = new Guid(accountId);
_qualifyRequest["OpportunityCustomerId "] = customer;

//set SourceCampaign
_qualifyRequest["SourceCampaignId"] = null;

//Execute the request
_service.BeginExecute(_qualifyRequest, new AsyncCallback(QualifyLeadCallBack), _service);


In call back function call end execute function to execute request and get response of request as shown in below line of code,

OrganizationResponse response = orgService.EndExecute(result);

When request execute successfully it return entityreferencecollection.We get create record using below line of code it return entityreferencecollection

EntityReferenceCollection entityCollection = (EntityReferenceCollection)response

SetState Request – Using this request we can activate/de-activate the record.

To activate/de-activate the record in Silverlight.

To activate/de-activate the record in Silverlight you have to trap “SetStateRequest”.

The member of “SetStateRequest” is given below,you have set this member.
EntityMoniker
State
Status

To trap “SetStateRequest” in Silverlight you have create object of “OrganizationRequest” and set RequestName =”SetState” , as shown in below line of code

SoapServiceReference.OrganizationRequest request = new SoapServiceReference.OrganizationRequest() { RequestName = "SetState" };

After that you have set member of SetStateRequest ,as shown in below lines of code

1. EntityMoniker
-It is of Entity reference type.In EntityMoniker you have set “Id” and “LogicalName” of record as shown in below line of code

SoapServiceReference.EntityReference ServiceActivity = new SoapServiceReference.EntityReference() { Id =accountId, LogicalName = "account" };

2. State - It is of optionset type. In state you have set value as “0” for Active or “1” for InActive. as shown in below line of code
SoapServiceReference.OptionSetValue States = new SoapServiceReference.OptionSetValue();
States.Value = 0; or States.Value = 1;

3. Status - It is of optionset type. In status you have set set value as “1” for Active or “2” for InActive. as shown in below line of code
SoapServiceReference.OptionSetValue Status = new SoapServiceReference.OptionSetValue();
Status.Value = 1; or Status.Value = 2;

Above code collectively return as below.
SoapServiceReference.OrganizationRequest request = new SoapServiceReference.OrganizationRequest() { RequestName = "SetState" };

request["EntityMoniker"] = ServiceActivity;
request["State"] = States;
request["Status"] = Status;

After setting all member execute the request as shown in below line of code.
Sevcie. BeginExecute method -Pass three parameter “Request”,”Async method”,and “Soap Service” as shown below line of code
//Excute request
service.BeginExecute(request, new AsyncCallback(SetActivityStateCompleted), service);
In callback fuction call below line of code,to execute the request.
SoapServiceReference.OrganizationResponse response = service.EndExecute(result);
If request execute successfully.It activate/de-activate the record.