Microfoft CRM Integration: Import von Siebel Email Attachment – C # und MS Transact SQL Code

 

von Igor Kudryashov

 

Alba Spectrum Technologies

Deutschland (0177) 8349 806, Moskau (095) 918 3314, USA 1-866-528-0577

help@albaspectrum.com  

Microsoft CRM ist eine Lösung von Microsoft Business Solution, der den Marktbedarf von mittlere und kleinere Unternehmen bedeckt. Microsoft CRM hat sehr aggressive niedrige Priese. In Praxis gibt Beispiele wenn Siebel auf Microsoft CRM gewechselt ist.  

 

 

 

Ziel unsere heutige Diskussion ist Email- Import in MS CRM – Datenbank. Emails sind mit Hilfe von  Utility in CRM Siebel gespeichert. Jeder einzelnen Email ist extra Datei in Direktory.  Um Importaustausch zu verwirklichen, nutzen wir custom SQL table aus MS SQL Server 2000:

 

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[CrmAttachImporter]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [dbo].[CrmAttachImporter]

GO

 

CREATE TABLE [dbo].[CrmAttachImporter] (

                [Id]  uniqueidentifier ROWGUIDCOL  NOT NULL ,

                [CrmActivityGuid] [varchar] (50) NOT NULL ,

                [MsgFileName] [varchar] (2000) NOT NULL

) ON [PRIMARY]

GO

 

 Zur Tabelle geben wir noch kleine Erläuterung – das Ziel der Tabelle ist GUID-Übereinstimmung zwischen bestehende CRM Activity und hinzufügenden Email attachment Name zu halten. Im CrmActivityGuid - Feld speichern wir GUID der bestehende Activity, im MsgFileName – Feld ist Attachment Datei Name in gespeichert.

 

Konfigurationsdatei von unsere Utility sieht folgendes aus:

 

<config>

                <connectionString>provider=SQLOLEDB;Initial Catalog=Albaspectrum;Data Source=MSSQL1;User Id=sa;Password=sa;</connectionString>

                <msgFolder>data</msgFolder>

                <tableName>CrmAttachImporter</tableName>

                <activityGuidColumn>CrmActivityGuid</activityGuidColumn>

                <msgFileNameColumn> MsgFileName</msgFileNameColumn>

</config>

 

Hier beschrieben wir Verbindungsstelle zum MS SQL Server (Emailwegbeschreibung, Tabellename der GUID-Übereinstimmung zwischen bestehende CRM Activity und hinzufügenden Email attachment Name; Tabellespalten – das alles braucht man für Import- Verfahren).

 

Für Import-Kontrolle nutzen wir freie Bibliothek .NET log4net. Das kann man unter  http://logging.apache.org/log4net/  laden.

 

Hier nehmen wir Scannerverfahren von potential attachment - Direktory unter Lupe:

 

                public void scanFolder() {

                                log = LogManager.GetLogger(typeof(AttachImporter));

                                DOMConfigurator.Configure(new FileInfo("log.config"));

 

                                try {

                                                DirectoryInfo dirInfo = new DirectoryInfo(msgFolder);

                                                FileInfo[] files = dirInfo.GetFiles();

                                                Hashtable emails = new Hashtable();

                                                               

                                                foreach (FileInfo fileInfo in files) {

                                                                log.Debug("Analizing file: " + fileInfo.Name);

 

                                                                Guid activityId = GetActivityIdByFileName(fileInfo.Name);

 

                                                                if (! activityId.ToString().Equals(new Guid().ToString())) {

                                                                                emails.Add(activityId, fileInfo.DirectoryName + @"\" + fileInfo.Name);

 

                                                                                Console.WriteLine("Marked for import: " + fileInfo.Name);

                                                                                log.Debug("Marked for import: " + fileInfo.Name);

                                                                }

                                                                else {

                                                                                Console.WriteLine("Not found in activity import list: " + fileInfo.Name);

                                                                                log.Debug("Not found in activity import list: " + fileInfo.Name);

                                                                }

                                                }

 

                                                ProcessMessages(emails);

                                }

                                catch (Exception e) {

                                                Console.WriteLine(e.Message + "\r\n" + e.StackTrace);

                                }

                }

 

Sehr wichtiger Moment in vorgeschlagenen Verfahren ist  Übereinstimmung – Kontrolle zwischen CRM Activity GUID – Tabelle und Dateinamen in Direktory:

 

                private Guid GetActivityIdByFileName(string fileName) {

                                //create the database connection

                                OleDbConnection conn = new OleDbConnection(connectionString);

 

                                conn.Open();

 

                                //create the command object and store the sql query

                                OleDbCommand command = conn.CreateCommand();

 

                                command.CommandText = "SELECT " + activityGuidColumn + ", " + msgFileNameColumn + " FROM " + tableName + " WHERE UPPER(LTRIM(RTRIM(" + msgFileNameColumn + "))) = UPPER(LTRIM(RTRIM(?)))";

 

                                log.Debug("Preview checking SQL query: " + command.CommandText);

                                log.Debug("Using file name: " + fileName);

               

                                command.Parameters.Add(new OleDbParameter(msgFileNameColumn, fileName));

 

                                //create the datareader object to connect to table

                                OleDbDataReader reader = command.ExecuteReader();

 

                                if (reader.Read()) {

                                                Guid activityGuid = new Guid(reader.GetString(0));

 

                                                reader.Close();

                                                conn.Close();

 

                                                return activityGuid;

                                }

                                else {

                                                reader.Close();

                                                conn.Close();

 

                                                return new Guid();

                                }

                }

 

Gebauten Messenger – Hesh ist Parameter für Importsverfahren, welche führen direkter Import von Attachments in MS CRM durch:

 

                private void ProcessMessages(Hashtable emails)

                {

                                try

                                {

                                                log.Debug("Start importing process");

 

                                                CRMConnector crmConnector = new CRMConnector();

 

// Connect to CRM DB

crmConnector.SetCrmConfigPath(Environment.SystemDirectory + "/Albaspectrum/MSCRMGateway.xml");

crmConnector.SetCrmContentType(Environment.SystemDirectory + "/Albaspectrum/ContentType.txt");

crmConnector.Connect(log);

 

                                                if (emails != null) {

                                                                ICollection keys = emails.Keys;

                                                                int attCounter = 0;

           

                                                foreach (Guid o in keys) {

                                                                                string attName = (string)(emails[o]);

 

crmConnector.AddAttachmentToActivity(o, attName, (new FileInfo(attName)).Length, attCounter);

                               

                                                                                attCounter++;

                                                                }

                                                }

 

                                                crmConnector.Close();

                                }

                                catch (Exception ex)

                                {

                                                log.Debug(ex.Message + "\n" + ex.StackTrace);

                                }

                }

 

Alle notwendige Form von MS CRM Activity sind in der Bibliothek MSCRMGateway und Beschreibung sind unten:

·        http://www.albaspectrum.com/Customizations_Whitepapers/Dexterity_SQL_VBA_Crystal/MSCRMCUstomizationEmailAttachment.htm

·        http://www.albaspectrum.com/Customizations_Whitepapers/Dexterity_SQL_VBA_Crystal/MSCRMCUstomizationClosedActivity.htm

 

Wir wünschen Ihnen viel Erfolg bei der Softwareimplementierung und Berichterstellung. Falls sich Ihrerseits Fragen bzw. Problemstellungen ergeben sollten, stehen wir Ihnen jederzeit unter der Rufnummer in Deutschland (0177) 8349 806, in Moskau (095) 918 3314, in USA 1-866-528-0577  oder unter help@albaspectrum.com zur Verfügung.

 

Igor Kudryashov ist ein zertifizierter Navision Spezialist von Ronix Systems ( http://www.ronix.ru ) eines Microsoft Business Solution Partners und die Europäische Abteilung von Alba Spectrum Technologies, USA ( http://www.albaspectrum.com ). Wir sind in Deutschland (in Köln, Bonn, Düsseldorf und Dortmund), in Russland, USA und Brasil tätig. Diese weltweit autorisierte Unternehmung spezialisierte sich auf Navision, Great Plains und den Microsoft CRM Kundenservice.