First in C# (I am using SOAPLogger solution included with the SDK:
// Connect to the Organization service.
// The using statement assures that the service proxy will be properly disposed.
using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri,
serverConfig.HomeRealmUri,
serverConfig.Credentials,
serverConfig.DeviceCredentials))
{
// This statement is required to enable early-bound type support.
_serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
IOrganizationService service = (IOrganizationService)_serviceProxy;
using (StreamWriter output = new StreamWriter("output.txt"))
{
SoapLoggerOrganizationService slos = new SoapLoggerOrganizationService(serverConfig.OrganizationUri, service, output);
//Add the code you want to test here:
// You must use the SoapLoggerOrganizationService 'slos' proxy rather than the IOrganizationService proxy you would normally use.
CreateRequest create = new CreateRequest();
Account tstAccount = new Account();
//set attributes here
tstAccount.Name = "test account in code";
tstAccount.Address1_City = "Richfield";
create.Target = tstAccount;
slos.Execute(create);
Now here is the Jscript nicely formatted by the CRM 2011 SOAP formatter. Available at: http://crm2011soap.codeplex.com/
This example is asynchronous, if you want to learn how to make JScript SOAP calls synchronously please visit this post: http://mileyja.blogspot.com/2011/07/using-jscript-to-access-soap-web.html
function runme() {
SDK.SAMPLES.CreateAccountRequest();
}
if (typeof (SDK) == "undefined")
{ SDK = { __namespace: true }; }
//This will establish a more unique namespace for functions in this library. This will reduce the
// potential for functions to be overwritten due to a duplicate name when the library is loaded.
SDK.SAMPLES = {
_getServerUrl: function () {
///<summary>
/// Returns the URL for the SOAP endpoint using the context information available in the form
/// or HTML Web resource.
///</summary>
var OrgServicePath = "/XRMServices/2011/Organization.svc/web";
var serverUrl = "";
if (typeof GetGlobalContext == "function") {
var context = GetGlobalContext();
serverUrl = context.getServerUrl();
}
else {
if (typeof Xrm.Page.context == "object") {
serverUrl = Xrm.Page.context.getServerUrl();
}
else
{ throw new Error("Unable to access the server URL"); }
}
if (serverUrl.match(/\/$/)) {
serverUrl = serverUrl.substring(0, serverUrl.length - 1);
}
return serverUrl + OrgServicePath;
},
CreateAccountRequest: function () {
var requestMain = ""
requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
requestMain += " <s:Body>";
requestMain += " <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
requestMain += " <request i:type=\"a:CreateRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\">";
requestMain += " <a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
requestMain += " <a:KeyValuePairOfstringanyType>";
requestMain += " <b:key>Target</b:key>";
requestMain += " <b:value i:type=\"a:Entity\">";
requestMain += " <a:Attributes>";
requestMain += " <a:KeyValuePairOfstringanyType>";
requestMain += " <b:key>name</b:key>";
requestMain += " <b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">New Account Code</b:value>";
requestMain += " </a:KeyValuePairOfstringanyType>";
requestMain += " <a:KeyValuePairOfstringanyType>";
requestMain += " <b:key>address1_city</b:key>";
requestMain += " <b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">Minneapolis</b:value>";
requestMain += " </a:KeyValuePairOfstringanyType>";
requestMain += " </a:Attributes>";
requestMain += " <a:EntityState i:nil=\"true\" />";
requestMain += " <a:FormattedValues />";
requestMain += " <a:Id>00000000-0000-0000-0000-000000000000</a:Id>";
requestMain += " <a:LogicalName>account</a:LogicalName>";
requestMain += " <a:RelatedEntities />";
requestMain += " </b:value>";
requestMain += " </a:KeyValuePairOfstringanyType>";
requestMain += " </a:Parameters>";
requestMain += " <a:RequestId i:nil=\"true\" />";
requestMain += " <a:RequestName>Create</a:RequestName>";
requestMain += " </request>";
requestMain += " </Execute>";
requestMain += " </s:Body>";
requestMain += "</s:Envelope>";
var req = new XMLHttpRequest();
req.open("POST", SDK.SAMPLES._getServerUrl(), true)
// Responses will return XML. It isn't possible to return JSON.
req.setRequestHeader("Accept", "application/xml, text/xml, */*");
req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
req.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
var successCallback = null;
var errorCallback = null;
req.onreadystatechange = function () { SDK.SAMPLES.CreateAccountResponse(req, successCallback, errorCallback); };
req.send(requestMain);
},
CreateAccountResponse: function (req, successCallback, errorCallback) {
///<summary>
/// Recieves the assign response
///</summary>
///<param name="req" Type="XMLHttpRequest">
/// The XMLHttpRequest response
///</param>
///<param name="successCallback" Type="Function">
/// The function to perform when an successfult response is returned.
/// For this message no data is returned so a success callback is not really necessary.
///</param>
///<param name="errorCallback" Type="Function">
/// The function to perform when an error is returned.
/// This function accepts a JScript error returned by the _getError function
///</param>
if (req.readyState == 4) {
if (req.status == 200) {
if (successCallback != null)
{ successCallback(); }
}
else {
errorCallback(SDK.SAMPLES._getError(req.responseXML));
}
}
},
_getError: function (faultXml) {
///<summary>
/// Parses the WCF fault returned in the event of an error.
///</summary>
///<param name="faultXml" Type="XML">
/// The responseXML property of the XMLHttpRequest response.
///</param>
var errorMessage = "Unknown Error (Unable to parse the fault)";
if (typeof faultXml == "object") {
try {
var bodyNode = faultXml.firstChild.firstChild;
//Retrieve the fault node
for (var i = 0; i < bodyNode.childNodes.length; i++) {
var node = bodyNode.childNodes[i];
//NOTE: This comparison does not handle the case where the XML namespace changes
if ("s:Fault" == node.nodeName) {
for (var j = 0; j < node.childNodes.length; j++) {
var faultStringNode = node.childNodes[j];
if ("faultstring" == faultStringNode.nodeName) {
errorMessage = faultStringNode.text;
break;
}
}
break;
}
}
}
catch (e) { };
}
return new Error(errorMessage);
},
__namespace: true
};
Now you can call the runme() function from your form jscript handler.
Thats all there is to it!
I hope this helps!
Thanks for posting this Jamie. It's been incredibly useful for me as I've been trying to write a SOAP client in Java for Dynamics CRM 2011.
ReplyDeleteNo problem!
ReplyDeleteGreat Jamie
ReplyDeletePlease can you tell how i should call or reference the function runme() in Javascrit?
And this c# code , how do i import it in my organisation so that i shoul be able to acces to that function from Javascript
Thanks
To run the jscript function you would have to upload the jscript as a jscript file into your web resource library for your organization. Then you can go into the forms designer (settings-customizations-customize the system-entities-pick an entity-forms and you can double click on the properties of the form after opening the form designer for a specific form. You can then add jscript functions to be called in the on-load and on-save events of the form. You can also examine the properties of the for fields and add jscript in the on-change event of fields in the form designer also.
DeleteThe .NET code would have to be used as part of a separate application that calls into the CRM web service or it could be a plugin or custom workflow assembly. For all of these things I would recommend starting with the CRM SDK and take a look at the examples there.
it's look like good but what if you get an error in your plugin?
ReplyDeleteThe easiest way to debug a plugin is to attach to the w3wp.exe process using remote debugger. This requires you to have the .pdb file deployed to the server\bin\assembly directory of your server.
DeleteYou can also write out error messages using InvalidPluginExecutionException. It allows you to easily put the exception.tostring in the message before throwing it. The error text will then be presented to the UI in CRM.
DeleteWow its an amazing blog
ReplyDeleteDot Net Online Training Hyderabad
This is quite educational arrange. It has famous breeding about what I rarity to vouch. Colossal proverb.
ReplyDeleteThis trumpet is a famous tone to nab to troths. Congratulations on a career well achieved. This arrange is synchronous s informative impolites festivity to pity. I appreciated what you ok extremely here
Selenium training in bangalore
Selenium training in Chennai
Selenium training in Bangalore
Selenium training in Pune
Selenium Online training
Thank you for taking time to provide us some of the useful and exclusive information with us.
ReplyDeleteRegards,
selenium course in chennai
This comment has been removed by the author.
ReplyDeleteWow, Great information and it is very useful for us.
ReplyDeleteCrm software development company in chennai
top interview questions.
ReplyDeletepython inteview questions
tableau interview questions
angularjs interview questions
java interview questions
mvc interview questions
best interview questions.
ReplyDeletemvc interview questions
important interview questions.
ReplyDeletepython interview questions
asp.net interview questions
interview questions for freshers.
ReplyDeleteasp.net interview questions
nice information.
ReplyDeletetableau interview questions
Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job. Keep it up…
ReplyDeleteUpgrade your career Learn Oracle Training from industry experts gets complete hands on Training, Interview preparation, and Job Assistance at My Training Bangalore.
Really very happy to say, your post is very interesting to read. I never stop myself to say something about it. You’re doing a great job. Keep it up…
ReplyDeleteStart your journey with RPA Training in Bangalore and get hands-on Experience with 100% Placement assistance from experts Trainers @Softgen Infotech Located in BTM Layout Bangalore. Expert Trainers with 8+ Years of experience, Free Demo Classes Conducted.
This is excellent information. It is amazing and wonderful to visit your site.Thanks for sharing this information,this is useful to me.
ReplyDeleteQlik Sense Online Training
Qlik Sense Classes Online
Qlik Sense Training Online
Online Qlik Sense Course
Qlik Sense Course Online
Wow it is really wonderful and awesome thus it is very much useful for me to understand many concepts and helped me a lot.
ReplyDeleteSAP MM Online Training
SAP MM Classes Online
SAP MM Training Online
Online SAP MM Course
SAP MM Course Online
After reading your article I was amazed. I know that you explain it very well. And I hope that other readers will also experience how I feel after reading your article.
ReplyDeletePMP certification Online Training in bangalore
PMP certification courses in bangalore
PMP certification classes in bangalore
PMP certification Online Training institute in bangalore
PMP certification course syllabus
best PMP certification Online Training
PMP certification Online Training centers
This is quite educational arrange. It has famous breeding about what I rarity to vouch. Colossal proverb.
ReplyDeleteThis trumpet is a famous tone to nab to troths
java training in chennai
java training in omr
aws training in chennai
aws training in omr
python training in chennai
python training in omr
selenium training in chennai
selenium training in omr
Wonderful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. This article resolved my all queries.
ReplyDeletesap training in chennai
sap training in tambaram
azure training in chennai
azure training in tambaram
cyber security course in chennai
cyber security course in tambaram
ethical hacking course in chennai
ethical hacking course in tambaram
Your tips helped to clarify a few things for me,Thanks for your informative article,Your post helped me to understand the future and career prospects &
ReplyDeleteKeep on updating your blog with such awesome article.
hadoop training in chennai
hadoop training in porur
salesforce training in chennai
salesforce training in porur
c and c plus plus course in chennai
c and c plus plus course in porur
machine learning training in chennai
machine learning training in porur
Wonderful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article. This article resolved my all queries.
ReplyDeleteAWS training in Chennai
AWS Online Training in Chennai
AWS training in Bangalore
AWS training in Hyderabad
AWS training in Coimbatore
AWS training
Thanks for sharing this unique and informative content which provided me the required information.
ReplyDeleteweb designing training in chennai
web designing training in velachery
digital marketing training in chennai
digital marketing training in velachery
rpa training in chennai
rpa training in velachery
tally training in chennai
tally training in velachery
Thanks for sharing this unique and informative content which gives enthusiastic to read. Keep posting like this.
ReplyDeletehadoop training in chennai
hadoop training in annanagar
salesforce training in chennai
salesforce training in annanagar
c and c plus plus course in chennai
c and c plus plus course in annanagar
machine learning training in chennai
machine learning training in annanagar
Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post .
ReplyDeleteacte reviews
acte velachery reviews
acte tambaram reviews
acte anna nagar reviews
acte porur reviews
acte omr reviews
acte chennai reviews
acte student reviews
the content on your blog was really helpful and informative. Thakyou. # BOOST Your GOOGLE RANKING.It’s Your Time To Be On #1st Page
ReplyDeleteOur Motive is not just to create links but to get them indexed as will
Increase Domain Authority (DA).We’re on a mission to increase DA PA of your domain
High Quality Backlink Building Service
1000 Backlink at cheapest
50 High Quality Backlinks for just 50 INR
2000 Backlink at cheapest
5000 Backlink at cheapest
Annabelle loves to write and has been doing so for many years.Cheapest and fastest Backlink Indexing Best GPL Store TECKUM IS ALL ABOUT TECH NEWS AND MOBILE REVIEWS
ReplyDeleteThank you so much for your contribution. Please visit our website to learn more about our excellent content - online Spoken english classes in noida prepares "IELTS" and "OEt" tests, as well as computer and digital marketing; please visit or contact us for more information.
ReplyDeleteIf you have any queries,
please call us at 91 9667-728-146.
Are you looking for a way to watch the latest Pathan movie in high-quality and for free? Look no further! Here we provide you with the best options to Pathan Full Movie Download 4K, HD, 1080p 480p, 720p in Hindi quality for free in Hindi. We have compiled a list of reliable sources that offer the highest quality streaming and downloading services. So get ready to dive into the world of Pathan with this ultimate guide on how to download it for free !
ReplyDeletekeep sharing blog.
ReplyDeleteadarsh welkin park
provident east lalbagh
This is a really interesting post. I appreciate the depth of your research and the clarity of your writing. Looking forward to reading more
ReplyDeleteKhajuraho Tour Packages
Western Group of Temples in Khajuraho
This post was exactly what I needed to read today. It’s very well-written and provides practical advice. Keep up the great work
ReplyDeleteDestination Wedding Planner Packages
Mice Tour Operators
Corporate Event Planner
Nice Article!
ReplyDeleteThanks for sharing with us 🙂
Embedded Systems Course In Hyderabad