Wednesday, June 17, 2009
SCRITTURA DEI METADATI VIA CODICE: ESEMPIO
Wednesday, June 17, 2009 11:15:28 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 


Summary Non c'è più il deletion service. Esiste un job schedulato ogni 24 ore. Un workaround per farlo partire subito.
Category CRM 4.0  
Description Esiste la schedulazione per la cancellazione fisica dei dati (record con DeletionStateCode = 2). La trovate nel db:
 
use MSCRM_CONFIG
select * from
ScalegroupOrganizationMaintenanceJobs
where OperationType=14
 
Il problema comunque non è di facile risoluzione.
E' a disposizione un tool (NON SUPPORTATO) e in allegato per la modifica dei dati del DB per alterare la schedulazione.
 
Devo dire che la schedulazione a me non ha funzionato bene, però modificando la data "Job Next Run" e mettendola su una data già passata e riavviando il servizio "Microsoft CRM Asynchronous Processing Service" la cancellazione vene fatta immediatamente.

 
Info sul tool su http://code.msdn.microsoft.com/ScaleGroupJobEditor/

Wednesday, June 17, 2009 10:54:49 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 

Dopo l'installazione di una rollup (dalla 2 in su) può accadere che non si sia più in grado di pubblicare i workflow nel CRM.
Ciò è dovuto ad un piccolo errore nel software di installazione della rollup che, andando a sovrascrivere il web.config del CRM, si "dimentica" di inserire un assembly necessario alla pubblicazione (il famoso mscorlib) fra gli assembly autgorizzati. Da qui il problema.

La soluzione è quindi molto semplice: modificare manualmente il web.config inserendo la seguente riga:

authorizedType Assembly="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Namespace="System.Globalization" TypeName="CultureInfo" Authorized="True"

Wednesday, June 17, 2009 10:52:53 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 

Associated View  
Summary: record visualizzati sulle Associated View
Category CRM 4.0
Description: Nel CRM 4.0 hanno tolto (bug?) la possibilità di visualizzare nelle associated view sia i record attivi che quelli inattivi. Compaiono solo quelli attivi relazionati all'entità principale.
.

Se si desidera modificare questo comportamento bisogna registrare un plug-in sul Retrieve Multiple dell'entità e scrivere un codice simile a questo:

using Microsoft.Crm.Sdk;
using Microsoft.Crm.Sdk.Query;

namespace Acme.Plugins
{
public class AssociatedViewPlugin : IPlugin
{
public void Execute(IPluginExecutionContext context)
{
if (context.InputParameters.Contains(ParameterName.Query))
{
QueryExpression qe = context.InputParameters[ParameterName.Query] as QueryExpression;

if (qe.EntityName == context.PrimaryEntityName && qe.Criteria != null && qe.Criteria.Conditions != null && qe.Criteria.Conditions.Count == 2)
{
ConditionExpression ce = qe.Criteria.Conditions[0] as ConditionExpression;
if (ce != null && ce.AttributeName == "statecode" && ce.Operator == ConditionOperator.Equal && ((int)ce.Values[0]) == 0)
{
qe.Criteria.Conditions.Remove(ce);
}
}
}
}
}

Wednesday, June 17, 2009 10:51:09 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, June 16, 2009


Il  CRM 4.0, specialmente se c'è installata la rollup 4, è pienamente compatibile con il nuovo Internet Explorer 8, anzi!
IE 8 interpreta più velocemente il javascript lato client e, di conseguenza, il rendereing delle pagine è più veloce.

L'unico problema viene sul client Outlook. Anche se il sito del CRM è inserito fra quelli per i quali non si desidera il blocco dei popup, ogni volta che se ne apre uno appare un alert di errore. Il popup si apre, il CRM funziona, ma ad ogni nuova finestra appare il messaggio e, a volte, quando si clicca sul pulsante "salva e chiudi" appare la finestra di avviso che il programma sta cercando di chiudere la finestra corrente.

 

Ciò è ovviamente dovuto a un'impostazione di IE8, ma quale?

Dopo varie prove ho sperimentato che le seguenti modifiche alla configurazione di IOE8 risolvono il problema:

1) Andare nelle opzioni Internet
2) Andare nella scheda protezione
3) Togliere il flag da "Attiva modalità protetta"
4) Cliccare il pulsante "Ripristina livello predefinito su tutte le aree"
5) Chiudere il browser e Outlook
6) Aprire IE
7) Andare nelle opzioni internet
8) Andare nella scheda protezione
9) selezionare il flag "Attiva modalità protetta"
10) Chiudere IE
11) Aprire Outlook.


FUNZIONA!!!

Tuesday, June 16, 2009 10:23:58 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, May 28, 2009
AUTENTICAZIONE MULTIAZIENDA CRM 4: esempio di codice
Thursday, May 28, 2009 8:52:44 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, May 25, 2009

   Spesso quando si fanno massicce chiamate alla platform del CRM via servizi web (si parla di decine o centinaia di migliaia di chiamate ad esempio durante un'importazione massiva), si può ottenere un errore di socket il cui messafggio è una frase del tipo "Non è possibile aprire più connessioni su una stessa porta".

Questo comportamento è legato all'IIS e non al codice del CRM o dello sviluppatore. Ogni server web rimane costantemente in ascolto su alcune pèorte TCP sulle quali sono attestati i siti. L'esempio più diffuso è quello della porta 80: siccome un sito è acceduto da più utenti in contemporanea, quando IIS riceve una chiamata sulla porta 80 la evade aprendo una connessione su una porta alta; questo perchè la porta 80 deve rimanere libera per le altre richieste. Le porte alte non utilizzate dalla macchina vengono quindi aperte con un socket e i flussi HTTP passano attraverso di esse. Ogni socket rimane aperto per un tempo stabilito e il range di porte alte da usare è scritto nel registro di sistema. Se le chiamate ai servizi web (un socket aperto per chiamata) sono molte e in rapida successione può succedere che il range di cui sopra si esaurisca, IIS ricomincia dai valori bassi di tale range trovando però i socket ancora aperti dalla chiamata precedente e scatendando quindi l'errore.

SOLUZIONE: per risolvere il problema bisogna intervenrire sulla configurazione di IIS in due modi NON mutualmente esclusivi. Bisogna però porre molta attenzione perchè eventuali errori potrebbero causare gravi errori nels erver web.

1) Diminuire il tempo di apertura dei socket (il default è 240 secondi): si va nella seguente chiave di registro e si modifica il valore ad esempio portandolo da 4 minuti a 30 secondi:
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\TCPTimedWaitDelay

2) Aumentare il range di porte alte che l'IIS usa per evadere le richieste: si va nella seguente chiave di registro e si modificano ni valori di conseguenza portandoli ad esempio dal default che è 5000 a 65000:
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort

Si riavia IIS.

Monday, May 25, 2009 8:42:51 AM (W. Europe Standard Time, UTC+01:00)  #    Disclaimer  |  Comments [0]  |