Best Software Act! is very popular CRM for small and mid-size organization. This system attracts business owner by its low price, plus system is very easy to use. However if your business is growing you should reach the moment to implement more advanced CRM solution. Natural question is – how do we convert the data from Act! to new CRM solution and the mapping of your objects for conversion. You would probably like to avoid operator data entry with potential numerous errors and mistypes. Assuming that you are IT specialist, we’ll give you technical side of Act to MS CRM data migration
This system attracts business owner by its low price, plus system is very easy to use. However if your business is growing you should reach the moment to implement more advanced CRM solution. Natural question is – how do we convert the data from Act! to new CRM solution and the mapping of your objects for conversion. You would probably like to avoid operator data entry with potential numerous errors and mistypes. Assuming that you are IT specialist, we’ll give you technical side of Act to MS CRM data migration:
using Act.Framework;using Act.Framework.Activities;using Act.Framework.Companies;using Act.Framework.ComponentModel;using Act.Framework.Contacts;using Act.Framework.Database;using Act.Framework.Groups;using Act.Framework.Histories;using Act.Framework.Lookups;using Act.Framework.MutableEntities;using Act.Framework.Notes;using Act.Framework.Opportunities;using Act.Framework.Users;using Act.Shared.Collections;
ActFramework framework = new ActFramework();framework.LogOn("Act Username", "password", "SERVER”, "Database");
private void ShowContactsFieldsDescriptions(ActFramework framework) {
ContactFieldDescriptor[] cFields = framework.Contacts.GetContactFieldDescriptors();
ContactFieldDescriptor cField;
for(int x = 0; x < cFields.Length; x++)
{
cField = cFields[x]; Console.WriteLine("Table Name:tt{0}", cField.TableName); Console.WriteLine("Column Name:t{0}", cField.ColumnName); Console.WriteLine("Display Name:t{0}", cField.DisplayName); Console.WriteLine("ACT Field Type:t{0}", cField.ACTFieldType); Console.WriteLine("");
}
}
ContactList cList = framework.Contacts.GetContacts(null);FileInfo t = new FileInfo("Contacts.xml");StreamWriter stw = t.CreateText();
for (int i = 0; i < cList.Count; i++) {
string strContactXml = "<contact>";
ContactFieldDescriptor cField; Object oValue;
// First Name cField = framework.Contacts.GetContactFieldDescriptor("TBL_CONTACT.FIRSTNAME"); oValue = cField.GetValue(cList[i]); if (oValue != null && !(oValue.ToString().Trim().Equals(""))) strContactXml += "<firstname><![CDATA[" + oValue.ToString() + "]]></firstname>";
// Last Name cField = framework.Contacts.GetContactFieldDescriptor("TBL_CONTACT.LASTNAME"); oValue = cField.GetValue(cList[i]);
if (oValue != null && !(oValue.ToString().Trim().Equals(""))) strContactXml += "<lastname><![CDATA[" + oValue.ToString() + "]]></lastname>"; else strContactXml += "<lastname>" + "N/A" + "</lastname>";
// Salutation cField = framework.Contacts.GetContactFieldDescriptor("TBL_CONTACT.SALUTATION"); oValue = cField.GetValue(cList[i]); if (oValue != null && !(oValue.ToString().Trim().Equals(""))) strContactXml += "<salutation><![CDATA[" + oValue.ToString() + "]]></salutation>";
// Job Title cField = framework.Contacts.GetContactFieldDescriptor("TBL_CONTACT.JOBTITLE"); oValue = cField.GetValue(cList[i]);
if (oValue != null && !(oValue.ToString().Trim().Equals(""))) strContactXml += "<jobtitle><![CDATA[" + Regex.Replace(oValue.ToString(), "rn", "<BR>") + "]]></jobtitle>";
The XML export file should look like this:
<contact><firstname><![CDATA[John]]></firstname><lastname><![CDATA[Smith]]></lastname><salutation><![CDATA[John]]></salutation><address1_line1><![CDATA[1234 W. Big River]]></address1_line1><address1_city><![CDATA[Chicago]]></address1_city><address1_stateorprovince><![CDATA[IL]]></address1_stateorprovince><address1_postalcode><![CDATA[123456]]></address1_postalcode><description><![CDATA[Toy Corporation]]></description><ownerid type="8">{4F1849C3-9184-48B5-BB09-078ED7AB2DAD}</ownerid></contact>
Microsoft.Crm.Platform.Proxy.BizUser bizUser = new Microsoft.Crm.Platform.Proxy.BizUser();
ICredentials credentials = new NetworkCredential(crmUsername, crmPassword, crmDomain);
bizUser.Url = crmDir + "BizUser.srf";
bizUser.Credentials = credentials;
Microsoft.Crm.Platform.Proxy.CUserAuth userAuth = bizUser.WhoAmI();
// CRMContact proxy object
Microsoft.Crm.Platform.Proxy.CRMContact contact = new Microsoft.Crm.Platform.Proxy.CRMContact ();
contact.Credentials = credentials; contact.Url = crmDir + "CRMContact.srf"; CorrectXML("Contacts.xml", userAuth.UserId); StreamReader reader = File.OpenText("Contacts.xml");
string input = null;
while ((input = reader.ReadLine()) != null)
{
string strContactId = contact.Create(userAuth, input); Console.WriteLine("Contact {0} is created", strContactId); log.Debug("Contact " + strContactId + " is created");
}
private void CorrectXML(string fileName, string userId) {
File.Move(fileName, fileName + ".old"); StreamReader reader = File.OpenText(fileName + ".old"); FileInfo t = new FileInfo(fileName); StreamWriter writer = t.CreateText(); string input = null;
while ((input = reader.ReadLine()) != null) {
input = Regex.Replace(input, "{_REPLACE_ME_}", userId); writer.WriteLine(input);
}
reader.Close(); writer.Close(); File.Delete(fileName + ".old");
}
Good luck with integration! If you want us to do the job - give us a call 1-630-961-5918 or 1-866-528-0577! help@albaspectrum.com
Dexterity Customization for Dynamics GP Evaluation Level Paper
When you are developer it is always a good idea to read technical manuals. But if you was just assigned to the IT team to decide if Dexterity is the right tool to customize your ERP application then first you need something which is in style of ‘easy reading papers’ or FAQPlanning Dynamics GP Customization in Large Corporation
If you are reading this page then chances are high that you were not able to find ISV add-on and need customization project. Let’s talk about planning, quality assurance and future event such as version updates.Dynamics GP Invoice Logo Attributed to Specific Company or Crossing the Borders of Three SOP Forms
Initial Great Plains Dynamics architecture had three SOP Invoice forms: Long, Short and Blank. Modern GP is popular in scenarios where you have more than three companies under one business entity umbrella