CRM 2016 exposes odata/web api, and has functions and actions out of the box.
With the organization service, we can issue a request like this:
// Create the van required resource object.
RequiredResource vanReq = new RequiredResource
{
ResourceId = _vanId,
ResourceSpecId = _specId
};
// Create the appointment request.
AppointmentRequest appointmentReq = new AppointmentRequest
{
RequiredResources = new RequiredResource[] { vanReq },
Direction = SearchDirection.Backward,
Duration = 60,
NumberOfResults = 10,
ServiceId = _plumberServiceId,
// The search window describes the time when the resouce can be scheduled.
// It must be set.
SearchWindowStart = DateTime.Now.ToUniversalTime(),
SearchWindowEnd = DateTime.Now.AddDays(7).ToUniversalTime(),
UserTimeZoneCode = 1
};
// Verify whether there are openings available to schedule the appointment using this resource
SearchRequest search = new SearchRequest
{
AppointmentRequest = appointmentReq
};
SearchResponse searched = (SearchResponse)_serviceProxy.Execute(search);
if (searched.SearchResults.Proposals.Length > 0)
{
Console.WriteLine("Openings are available to schedule the resource.");
}
Is it possible to mimic this functionality using functions/action or any other odata functionality?
I believe that the request should be something like this:
crmOrg/api/v8.1/Search(AppointmentRequest=@request)?@request=
However, I'm not sure how to encode the rest of the request.
_serviceProxy.Execute
will send a request overhttp
(tcp port 80) to the end point (using HTTP GET). You can capture this request on your PC with either a network sniffer or with a debugging tool. I prefer Fiddler, you can configure this to be a proxy between your app and the end point and it will capture traffic. Then it is just a matter of reading the URL for each specific request you want to mimic. So create request in c# and capture generated URL in Fiddler (also it is a free tool, I have no affiliation with telerik). – Larimor