Monthly Archives: July 2011

Chiusura di un caso via codice C#

Partendo dal presupposto che si sia in possesso dell’ID ( il Guid del campo incidentid che nell’esempio è casoId) del caso (CRM Logical Name “incident”) che si vuole chiudere ecco il codice:

Microsoft.Xrm.Sdk.Entity caseResolution = new Microsoft.Xrm.Sdk.Entity("incidentresolution");
caseResolution.Attributes.Add("incidentid", new Microsoft.Xrm.Sdk.EntityReference("incident", casoId));
caseResolution.Attributes.Add("subject", "Caso chiuso!");
Microsoft.Crm.Sdk.Messages.CloseIncidentRequest closeIncidentdemand = new Microsoft.Crm.Sdk.Messages.CloseIncidentRequest();
closeIncidentdemand.IncidentResolution = caseResolution;
closeIncidentdemand.RequestName = "CloseIncident";
closeIncidentdemand.Status = new Microsoft.Xrm.Sdk.OptionSetValue(5);
Microsoft.Crm.Sdk.Messages.CloseIncidentResponse resp = (Microsoft.Crm.Sdk.Messages.CloseIncidentResponse)_service.Execute(closeIncidentdemand);

Unico riferimento che ho trovato per il valore dello status è un articolo su CRM 1.2 http://technet.microsoft.com/en-us/library/ms914670.aspx

Dynamics CRM 4.0 plugin

Esempio per la costruzione di un plugin in Dynamics CRM 4.0. Il plugin che andiamo a costruire avrà lo scopo di manutenre un campo contatore all’interno dell’entità LEAD del CRM 4.0.

1. Aggiunto l’attributo lso_contatore come intero all’oggetto LEAD
1a. Visualizzare in sola lettura il campo contatore nella form del LEAD
2. In VisualStudio 2008 e creato un progetto di tipo Libbreria di Classi .NET che ho chiamato CrmContatore
2a. Aggiunto la referenza al WebService ed alle classi del Microsoft CRM SDK
2b. Aggiungere la classe CrmContatorePlugIn con il seguente codice:

using System;
using System.Collections.Generic;
using System.Text;

namespace LSo.Lab
{
public class PlugInContatore : Microsoft.Crm.Sdk.IPlugin
{
///
/// Assegno automaticamente un valore progressivo al campo lso_contatore
/// in ogni nuovo Lead creato in Dynamics CRM 4.0
///
public void Execute(Microsoft.Crm.Sdk.IPluginExecutionContext context)
{
if (context.InputParameters.Properties.Contains("Target") && context.InputParameters.Properties["Target"] is Microsoft.Crm.Sdk.DynamicEntity)
{
Microsoft.Crm.Sdk.DynamicEntity entity = (Microsoft.Crm.Sdk.DynamicEntity)context.InputParameters.Properties["Target"];
if (entity.Name == Microsoft.Crm.SdkTypeProxy.EntityName.lead.ToString())
{
/*
* Preparo una quesry per avere il valore MAX usato per il campo
*/
Microsoft.Crm.Sdk.Query.ColumnSet cols = new Microsoft.Crm.Sdk.Query.ColumnSet();
cols.Attributes.Add("lso_contatore");
Microsoft.Crm.Sdk.Query.QueryExpression query = new Microsoft.Crm.Sdk.Query.QueryExpression();
query.EntityName = Microsoft.Crm.SdkTypeProxy.EntityName.lead.ToString();
query.ColumnSet = cols;
// Ordino in maniera decrescente cosi ho il valore MAX sul primo record
Microsoft.Crm.Sdk.Query.OrderExpression order = new Microsoft.Crm.Sdk.Query.OrderExpression();
order.AttributeName = "lso_contatore";
order.OrderType = Microsoft.Crm.Sdk.Query.OrderType.Descending;
query.Orders.Add(order);
Microsoft.Crm.Sdk.Query.PagingInfo pageInfo = new Microsoft.Crm.Sdk.Query.PagingInfo();
pageInfo.Count = 1;
pageInfo.PageNumber = 1;
query.PageInfo = pageInfo;
/*
* Faccio la chiamata al CRM
*/
Microsoft.Crm.SdkTypeProxy.RetrieveMultipleRequest req = new Microsoft.Crm.SdkTypeProxy.RetrieveMultipleRequest();
req.Query = query;
req.ReturnDynamicEntities = true;
Microsoft.Crm.Sdk.ICrmService svcCrm = context.CreateCrmService(context.UserId);
Microsoft.Crm.Sdk.BusinessEntityCollection colLeads = ((Microsoft.Crm.SdkTypeProxy.RetrieveMultipleResponse)svcCrm.Execute(req)).BusinessEntityCollection;
int leadContatore = 1;
// Recupero la propietà che mi interessa
foreach (Microsoft.Crm.Sdk.Property p in ((Microsoft.Crm.Sdk.DynamicEntity)colLeads.BusinessEntities[0]).Properties)
{
if (p.Name == "lso_contatore")
{
Microsoft.Crm.Sdk.CrmNumber r = ((Microsoft.Crm.Sdk.CrmNumberProperty)p).Value;
if (!r.IsNull)
{
leadContatore = r.Value;
leadContatore++;
}
}
}
Microsoft.Crm.Sdk.CrmNumberProperty lsoPropContatore = new Microsoft.Crm.Sdk.CrmNumberProperty();
lsoPropContatore.Name = "lso_contatore";
lsoPropContatore.Value = new Microsoft.Crm.Sdk.CrmNumber();
lsoPropContatore.Value.Value = leadContatore;
entity.Properties.Add(lsoPropContatore);
}
}
}
}
}

2c. Compilato il codice come classe firmata
3. Usare il CRM Regiatration Tools e registrare il plugin per l’evento di creazione del Lead nel PreEvent

A questo punto il gioco è fatto.
Info, note commenti e critiche a lorenzo pinto soncini chiocciola google punto com