Category Archives: Uncategorized

Microsoft Certified Trainer – Regional Lead 2016

Per questo 2016 sono stato selezionato per essere MCT Regional Lead in Italia assieme al collega Ruggiero Lauria (Congratulazioni! … ad entrambi).

Passato l’entusiasmo ed un po’ di orgoglio per l’opportunità ricevuta e l’entusiasmo per la sfida che ne consegue, nella mente si materializza la domanda fondamentale: ed ora che si fa?

Leggendo dal sito:

“The MCT Regional Leads play a key part in helping Microsoft serve the global MCT Community through community leadership, mentoring support, and engagement with Microsoft. Additionally, the MCT Program relies on the MCT Regional Leads for input on program changes, organizing events, forum engagement, and helping to disseminate key communication to the broader community.”

In sostanza siamo stati creati per fare da aggancio tra Microsoft e la comunità MCT.  Quindi devo sapere dai vari MCT cosa pensano Microsoft possa fare per migliorare  il nostro lavoro.

Parto con il condividere il mio pensiero.

Il mondo cambia intorno a noi, oggi la formazione on line fatta di materiale multimediale è una realtà e sta diffondendosi nel mondo. La qualità sta aumentando,  sempre più completa e facile da usufruire.

Ed in Italia?

Per ora siamo difesi dalla scarsa conoscenza (o meglio voglia di affaticarsi) dell’inglese (lingua nella quale si trovano la maggior parte dei materiali) ma sicuramente anche da noi le cose cambiano e cambieranno…
La mia esperienza mi insegna che avremo sempre meno formazione d’aula “generica”  e corsi a calendario.
Unite  le due considerazione e credo che si giunga alla conclusione che assisteremo alla scomparsa del classico corso d’aula sul prodotto. (Quei MOC, Microsoft Official Curriculum, che hanno fatto crescere migliaia di professionisti…)

E per gli MCT cosa succede? Il nostro è uno dei lavori che le nuove tecnologie andranno a cancellare?
Parafrasando Gaber: oggi no, domani forse, ma dopodomani sicuramente!
Quindi la risposta è si, se non sapremo adattarci all’evoluzione del nostro “ecosistema”.

Personalmente sto portando avanti una decisa riorganizzazione del mio lavoro di formatore e della divisione che si occupa di formazione all’interno di ZZ Soft.
Nel nostro futuro vedo tre aree trainanti:

  1. Formazione a distanza
  2. Formazione a personale IT a seguito di specifici interventi progettuali
  3. Produzione di contenuti multimediali per la formazione utente finale facilmente usufruibile e distribuibile

Condiviso il mio pensiero mi vengono in mente le cose più pratiche e meno filosofiche:
Rapporto MCT e mondo Dynamics ? Ha senso oggi per un MCT puntare sul mondo Dynamics ….

Beh spero che altri si uniranno nella condivisione di idee in proposito. Buon lavoro a tutti!

Lorenzo

Sharepoint 2013 and Dynamics CRM 2013: Unable to open Sharepoint in IFRAME

With SharePoint 2013 there is new security pattern who is explained here

So for open the SharePoint page in an IFrame (like Dynamics CRM do) you need to add to the page this dedicated control:
<WebPartPages:AllowFraming runat=”server” />

I have added this control in the Master page and all go done

 

Install Dynamics CRM 2013 on premise

The lab environment:

DC01 – Windows 2012 R2 Core Edition as Domain Controller
SQL01 – Windows 2012 R2 Standard with SQL 2012 Server Enterprise with all features
CRM01 – Windows 2012 R2 Standard (where we install the Microsoft Dynamics CRM 2013)

Prepare the environment
Create in Active Directory a specific Organizational Unit used by the system for permission management
Set the SQL Server Agent Service who start in Automatic mode and start it
Create service user and add specific user permission
Install the Dynamics CRM Server Email Router service (We don’t need this service so I don’t have installed)
Install the Dynamics CRM Server
Install the Dynamics CRM Reporting Extensions on Microsoft Reporting Server Service
Update to service pack 1 the Dynamics CRM Server and Dynamics CRM Reporting Extensions

Create service user
You need 6 service user who are just members of Domain Users:

  • Application service (crmapp.service)
  • Deployment web service (crmdepweb.service)
  • Sandbox processing service (crmsandbox.service)
  • VSS Writer Service (crmvsswriter.service)
  • Asynchronous Processing Service (crmasync.service)
  • Monitoring Service (crmmonitor.service)

Add the Application service (crmapp.service) user and Asynchronous Processing Service (crmasync.service) user to the Performance Log User local group of the Dynamics CRM Server

I have used this PowerShell command:

Import-Module ActiveDirectory
$ADPathContainer = "OU=ServiceUser,OU=ZZLAB,DC=intra,DC=zzlab,DC=com"
New-ADUser -SamAccountName "crmapp.service" -UserPrincipalName "crmapp.service@intra.zzlab.com" -Name "CRM Application Service User" -DisplayName "CRM Application Service User" -GivenName "CRM Application" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False
New-ADUser -SamAccountName "crmdepweb.service" -UserPrincipalName "crmdepweb.service@intra.zzlab.com" -Name "CRM Deployment Web Service User" -DisplayName "CRM Deployment Web Service User" -GivenName "CRM Deployment Web" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False
New-ADUser -SamAccountName "crmsandbox.service" -UserPrincipalName "crmsandbox.service@intra.zzlab.com" -Name "CRM Sandbox Processing Service User" -DisplayName "CRM Sandbox Processing Service User" -GivenName "CRM Sandbox Processing" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False
New-ADUser -SamAccountName "crmvsswriter.service" -UserPrincipalName "crmvsswriter.service@intra.zzlab.com" -Name "CRM VSS Writer Service User" -DisplayName "CRM VSS Writer Service User" -GivenName "CRM VSS Writer" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False
New-ADUser -SamAccountName "crmasync.service" -UserPrincipalName "crmasynchronous.service@intra.zzlab.com" -Name "CRM Asynchronous Service User" -DisplayName "CRM Asynchronous Service User" -GivenName "CRM Asynchronous" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False
New-ADUser -SamAccountName "crmmonitor.service" -UserPrincipalName "crmmonitor.service@intra.zzlab.com" -Name "CRM Monitoring Service User" -DisplayName "CRM Monitoring Service User" -GivenName "CRM Monitoring" -SurName "Service User" -Path $ADPathContainer -AccountPassword (ConvertTo-SecureString 'Pa$$w0rd' -AsPlainText -Force) -Enabled $True -PasswordNeverExpires $True -ChangePasswordAtLogon $False

Dynamics CRM Server Setup
Install the Dynamics CRM 2013 from the “autoplay menu” the application crash on my Windows 2012 R2 server. So I run the SetupServer.exe from the folder \Server\amd64.
The procedure ask me the following information:
1. Internet connection to check the upgrade
2. Insert the CRM 2013 product key
3. Accept the license agreement
4. Install required components
5. Select the installation location (I have accepted the default folder path)
6. Specify server role (I have installed every thinks on one server)
7. Specify deployment option (I have accepted the default “Create a new deployment” and I have specified the SQL01.intra.zzlab.com as SQL server)
8. Select the Organizational Unit (select the Organizational Unit created in the preparation environment section)
9. Specify the service user (Created in the preparation environment section)
10. Select the web site (I have choose for the default web site on my server)
11. Email Router Name (I have left blank because I don’t install the email router now)
12. Specify Organization Settings
13. Specify the report server url
14. Help us to improve customer experience
15. Select Microsoft Update preferences
16. System checks
17. Service disruption warnings
18. Ready to install

Install Dynamics CRM Reporting Extensions on Microsoft Reporting Service server
Also in this case the auto run setup lunch crash immediately on Windows 2012 R2 Server.
I run the SetupSrsDataConnector.exe from <DVD drive letter>:\Server\amd64\SrsDataConnector.
The setup wizard ask only for the Reporting Server name and automatically do everything.

Install the Service Pack 1 for Dynamics CRM Server and Dynamics CRM Reporting Extensions
The setup of service pack run automatically without any question

Delete un-used Shaepoint 2010/2013 database

During a Sharepoint 2013 Serach database rename I have made some mistakes and Sharepoint don’t have deleted the “old” SearchApplicationDB.
In the Event viewer I see the error : Unable to connect to the “Search_Service_ApplicationDB”. It’s correct: the database was renamed and deleted from SQL Server. Sharepoint server search work fine and use the SearchService_ApplicationDB.
Inside the Sharepoint Management Shell I run the command Get-SPDatabase and I see listed the new..and the old search server database.

How I can delete unused database?

Open powershell and run the command “Get-SPDatabase | Select Name, Id, Type” so I see the list of all my Sharepoint database
Get-SPDatabase
Choose the database to be deleted:
MarkDatabaseId
And the delete it with the two command:
$db = Get-SPDatabase
$db.Delete()
DeleteDatabase
Weel done!

System.Exception: Action Microsoft.Crm.Setup.Server.InstallDatabaseAction failed. —> System.IO.IOException: The network path was not found. Error while installing MS CRM 4.0 or 2011

During a test installation of Dynamics CRM with minimal permission, I have received the error:

System.Exception: Operazione Microsoft.Crm.Setup.Server.InstallDatabaseAction non riuscita. —> System.IO.IOException: The network name cannot be found.

I have tried some Google search but I do not have found lot of information. During the search the more probable cause of the error is who my setup user are unable to access on the SQL Server administrative share (ADMIN$,C$,..).

I have shared the C: drive as C$ and added the read and write permission to the user used for the Dynamics CRM Setup.

It worked for me

Delete X400 adress when migrate Exchnage to 2010

This is the powershell script who I have used for remove the X400 address from AD when end the migration to Exchange 2010.

$MbxList = Get-Mailbox -ResultSize unlimited;
foreach ($mbx in $MbxList)
{
$ea = $mbx.EmailAddresses | ? {(($_.PrefixString -ne “X400”) -or ($_.PrefixString -ne “x400”))};
Set-Mailbox $mbx -EmailAddresses $ea -WhatIf
}

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