Tag Cloud

CRM 2011 (161) CRM 4.0 (144) C# (116) JScript (109) Plugin (92) Registry (90) Techpedia (77) PyS60 (68) WScript (43) Plugin Message (31) Exploit (27) ShellCode (26) FAQ (22) JavaScript (21) Killer Codes (21) Hax (18) VB 6.0 (17) Commands (16) VBScript (16) Quotes (15) Turbo C++ (13) WMI (13) Security (11) 1337 (10) Tutorials (10) Asp.Net (9) Safe Boot (9) Python (8) Interview Questions (6) video (6) Ajax (5) VC++ (5) WebService (5) Workflow (5) Bat (4) Dorks (4) Sql Server (4) Aptitude (3) Picklist (3) Tweak (3) WCF (3) regex (3) Config (2) LINQ (2) PHP (2) Shell (2) Silverlight (2) TSql (2) flowchart (2) serialize (2) ASHX (1) CRM 4.0 Videos (1) Debug (1) FetchXml (1) GAC (1) General (1) Generics (1) HttpWebRequest (1) InputParameters (1) Lookup (1) Offline Plug-ins (1) OutputParameters (1) Plug-in Constructor (1) Protocol (1) RIA (1) Sharepoint (1) Walkthrough (1) Web.config (1) design patterns (1) generic (1) iframe (1) secure config (1) unsecure config (1) url (1)

Pages

Thursday, February 06, 2014

Retrive DynamicEntity from FetchXml query

Hi everyone , some times you need to supply a query form outside the code in a MS CRM solution. Using the following code snippet we can create the query dynamically and pass it to the code to get dynamic entities.

Now suppose i need to execute this query

<fetch mapping='logical'>
    <entity name='contact'>
        <filter type='and'>
            <condition attribute='lastname' operator='eq' value='xyz’/>
        </filter>
    </entity>
</fetch>

to get a list of dynamic entitles

Now either we can break the query and let the code just to have the logical section form this fetchXml or we can use the fetchXml as a whole. Now if i break the query  like

<entity name='contact'>
<filter type='and'>
<condition attribute='lastname' operator='eq' value='xyz’/>
</filter>
</entity>
And inside the code i can

		// here new_criteria contains the logical section from fetch xml(see above)
StringBuilder QueryBuilder = new StringBuilder(new_criteria);
QueryBuilder.Insert(0, "", 1);
QueryBuilder.Insert(QueryBuilder.Length, "
", 1);





Now the next thing i need to do is to convert his query to a CRM QueryExpression, thankfully CRM SDK contains some request & response classes to help






//This is the request/response object to Convert the FetchXML into a query expression.
FetchXmlToQueryExpressionRequest conversionRequest = new FetchXmlToQueryExpressionRequest
{
FetchXml = QueryBuilder.ToString()
};

// and here is the response
FetchXmlToQueryExpressionResponse conversionResponse =
(FetchXmlToQueryExpressionResponse)crmService.Execute(conversionRequest);




Now as we know that the query will results multiple records we will use it in RetriveMultiple


//Retrive Multiple Request
RetrieveMultipleRequest retrieve = new RetrieveMultipleRequest();
retrieve.Query = conversionResponse.Query;
retrieve.ReturnDynamicEntities = true;

//Retrieve Multiple Response
RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse)crmService.Execute(retrieve);

if (retrieved.BusinessEntityCollection.BusinessEntities.Count > 0 )
{
for (int entityCount = 0; entityCount < retrieved.BusinessEntityCollection.BusinessEntities.Count; entityCount++)
{
// retrive the first entity form the collection
DynamicEntity entity = (DynamicEntity)retrieved.BusinessEntityCollection.BusinessEntities[entityCount];


}
}



Converting a JavaScript Date object into the proper XML string


function SwConvertDateTimeToXml(dateTime) {

var offset = (ORG_TIMEZONE_OFFSET < 0) ? -ORG_TIMEZONE_OFFSET : ORG_TIMEZONE_OFFSET;
var timezoneOffsetHours = Math.floor(offset / 60);
var timezoneOffsetMinutes = offset - timezoneOffsetHours * 60;

var s =
dateTime.getYear().toString() + "-" +
SwGetFormattedDatePart(dateTime.getMonth() + 1) + "-" +
SwGetFormattedDatePart(dateTime.getDate()) + "T" +
SwGetFormattedDatePart(dateTime.getHours()) + ":" +
SwGetFormattedDatePart(dateTime.getMinutes()) + ":" +
SwGetFormattedDatePart(dateTime.getSeconds()) +
((ORG_TIMEZONE_OFFSET < 0) ? "-" : "+") +
SwGetFormattedDatePart(timezoneOffsetHours) + ":" +
SwGetFormattedDatePart(timezoneOffsetMinutes);

return s;
}

function SwGetFormattedDatePart(value) {
return (value < 10) ? ("0" + value.toString()) : value.toString();
}

Converting an XML date string to a JavaScript Date object


function SwConvertXmlToDateTime(crmDateTimeString) {
var dateTimeParts = crmDateTimeString.split("T");
var dateString = dateTimeParts[0];
var timeString = dateTimeParts[1];
var dateParts = dateString.split("-");
var timeZoneSeparator = (timeString.indexOf("-") != -1) ? "-" : "+";
var timeZoneParts = timeString.split(timeZoneSeparator);
var timeParts = timeZoneParts[0].split(":");

var date = new Date(SwParseInt(dateParts[0]), SwParseInt(dateParts[1]) - 1, SwParseInt(dateParts[2]), SwParseInt(timeParts[0]), SwParseInt(timeParts[1]), SwParseInt(timeParts[2]));
return date;
}

function SwParseInt(value) {
if ((value.length == 2) && (value.substr(0, 1) == "0")) {
value = value.substr(1, 1);
}

return parseInt(value);
}

CrmService proxy for plug-ins that execute in the child pipeline.

We always come across creating a CrmService Proxy for plug-ins that execute in the child pipeline. In a Child pipeline, you must instantiate the CrmService or MetadataService manually. We just need to check the InvocationSource Property (Child = 1, Parent = 0) of the IPluginExecutionContext. Pass the InvocationSource Property value to the below method.

Below is very simple code which creates a proxy.




public class CRM4_ServiceProx
{


/// The execution context that was passed to the plug-in's Execute method.
/// Set to True to use impersonation.
/// A CrmServce instance.
private CrmService CreateCrmService(IPluginExecutionContext context, Boolean flag)
{
CrmAuthenticationToken authToken = new CrmAuthenticationToken();
authToken.AuthenticationType = 0;
authToken.OrganizationName = context.OrganizationName;

// Include support for impersonation.
if (flag)
authToken.CallerId = context.UserId;
else
authToken.CallerId = context.InitiatingUserId;

CrmService service = new CrmService();
service.CrmAuthenticationTokenValue = authToken;
service.UseDefaultCredentials = true;

// Include support for infinite loop detection.
CorrelationToken corToken = new CorrelationToken();
corToken.CorrelationId = context.CorrelationId;
corToken.CorrelationUpdatedTime = context.CorrelationUpdatedTime;
corToken.Depth = context.Depth;
//Get the server name form registry
RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");

service.Url = String.Concat(regkey.GetValue("ServerUrl").ToString(), "/2007/crmservice.asmx");
service.CorrelationTokenValue = corToken;

return service;
}

}


List of Webservices in Dynamics CRM 2011

Here is the list of services avaialable in CRM 2011. May sametimes you make use of some of it http:// crmserver:5555/AppWebServices/ActivitiesWebService.asmx http:// crmserver:5555/AppWebServices/AdvancedFind.asmx http:// crmserver:5555/AppWebServices/Annotation.asmx http:// crmserver:5555/AppWebServices/AppGridWebService.asmx http:// crmserver:5555/AppWebServices/AssociateRecords.asmx http:// crmserver:5555/AppWebServices/BulkDelete.asmx http:// crmserver:5555/AppWebServices/Connection.asmx http:// crmserver:5555/AppWebServices/Currency.asmx http:// crmserver:5555/AppWebServices/CustomerService.asmx http:// crmserver:5555/AppWebServices/DashboardWebService.asmx http:// crmserver:5555/AppWebServices/DateTimeService.asmx http:// crmserver:5555/AppWebServices/DialogList.asmx http:// crmserver:5555/AppWebServices/DocumentManagementWebService.asmx http:// crmserver:5555/AppWebServices/DuplicateDetection.asmx http:// crmserver:5555/AppWebServices/EmailTemplateService.asmx http:// crmserver:5555/AppWebServices/FormEditorWebService.asmx http:// crmserver:5555/AppWebServices/GanttControlWebService.asmx http:// crmserver:5555/AppWebServices/GoalManagement.asmx http:// crmserver:5555/AppWebServices/ImportJob.asmx http:// crmserver:5555/AppWebServices/ImportWebService.asmx http:// crmserver:5555/AppWebServices/InteractiveWorkflowWebService.asmx http:// crmserver:5555/AppWebServices/LookupMruWebService.asmx http:// crmserver:5555/AppWebServices/LookupService.asmx http:// crmserver:5555/AppWebServices/MailMerge.asmx http:// crmserver:5555/AppWebServices/MarketingAutomation.asmx http:// crmserver:5555/AppWebServices/MergeRecords.asmx http:// crmserver:5555/AppWebServices/MessageBar.asmx http:// crmserver:5555/AppWebServices/MruWebService.asmx http:// crmserver:5555/AppWebServices/OwnerManager.asmx http:// crmserver:5555/AppWebServices/PaneWebService.asmx http:// crmserver:5555/AppWebServices/PresenceService.asmx http:// crmserver:5555/AppWebServices/QueueItem.asmx http:// crmserver:5555/AppWebServices/RecentlyViewedWebService.asmx http:// crmserver:5555/AppWebServices/RegionalOptions.asmx http:// crmserver:5555/AppWebServices/RelatedInformation.asmx http:// crmserver:5555/AppWebServices/RelationshipRolePicklist.asmx http:// crmserver:5555/AppWebServices/reports.asmx http:// crmserver:5555/AppWebServices/ResourceGroupUI.asmx http:// crmserver:5555/AppWebServices/ResourceSpecTree.asmx http:// crmserver:5555/AppWebServices/Ribbon.asmx http:// crmserver:5555/AppWebServices/SalesForceAutomation.asmx http:// crmserver:5555/AppWebServices/SavedQuerySelectorWebService.asmx http:// crmserver:5555/AppWebServices/SchedulePlanning.asmx http:// crmserver:5555/AppWebServices/ScheduleService.asmx http:// crmserver:5555/AppWebServices/ScriptError.asmx http:// crmserver:5555/AppWebServices/Service.asmx http:// crmserver:5555/AppWebServices/Solution.asmx http:// crmserver:5555/AppWebServices/SubjectManager.asmx http:// crmserver:5555/AppWebServices/SystemCustomization.asmx http:// crmserver:5555/AppWebServices/TransactionCurrencyWebService.asmx http:// crmserver:5555/AppWebServices/UserEntityUISettings.asmx http:// crmserver:5555/AppWebServices/UserManager.asmx http:// crmserver:5555/AppWebServices/UserQuery.asmx http:// crmserver:5555/AppWebServices/View.asmx http:// crmserver:5555/AppWebServices/Workflow.asmx http:// crmserver:5555/MSCRMServices/Metadata.asmx http:// crmserver:5555/MSCRMServices/2007/CrmService.asmx http:// crmserver:5555/MSCRMServices/2007/MetadataService.asmx http:// crmserver:5555/MSCRMServices/2007/AD/CrmDiscoveryService.asmx