Archive for the 'General CRM' Category
Here are the rules of the $19 per user per month for Microsoft Dynamics CRM Online. Get 60% off the user price if you act before June 30th, 2010 !
Microsoft CRM Online is a complete sales, service and marketing application that is native to your user experiences. It integrates seamlessly into Microsoft Office, and the Microsoft CRM online service even has a new 99.9% (SLA).
Here are the rules and the regulations:
* Subscription must be activated by June 30th, 2010.
* Applies to an unlimited number of seats, but there is a 5 seat minimum purchase.
* Offer is available to new Dynamics CRM Customers Only
* Offer is available to any Microsoft Dynamics GP Customers Registered in Voice
* Offer available only in US and Canada, and cannot be combined with any other promotions
* Customer may cancel subscription in the first 30 days without any cancellation fees. Cancellation Fees of $175/seat will apply after the first 30 days.
* Price Guaranteed for one year and so long as the subscription remains active; if customer terminates their subscription, they are not eligible to reenroll at this discounted price.
If you have interest and don’t know how to get started please feel free to contact us toll free at 1.888.525.4220 and ask for the Dynamics CRM Team.
We can assist with getting you setup for a Free CRM 30-day trial and help you talk about different Dynamics GP and CRM possibilities such as integration assistance as well.
Looking forward to hearing from you all!
I found this while surfing through the internet looking for sharepoint 2010 update training. Nice free book on office 2010.
Well…. It was another great convergence. One thing that always happens when i attend the event is certain. I am always insipred by what i see, and from what others have achieved with CRM and GP and i know the sky is the limit for the platforms.
The cloud is definately alive and here and has become a force in the marketplace. How vars adapt to the changing market will be interesting in the next 5 years, but this will allow so much value to all businesses who get involved with these solutions.
It was good to see the release of Dynamics GP 2010, and participate in the upcoming Sharepoint 2010 releases. There were some great advanced troubleshooting CRM and GP sessions put on by the premier support engineers team as well.
Great things to come in 2010 and looking forward to Atlanta 2011 as well.
I am wrapping up a integration project and thought i would post some valuable information in case anyone else out there is also looking to integrate some older MySql applications with Scribe and Microsoft CRM 4. I learned a few pointers during the way and i hope that it helps.
I faced a few obstacles with the Scribe in a particluar MySQL to CRM Integration.
1.) The first obstacle was that there is no native integration adapter with the community edition of mysql. Most websites and other applications use the community edition because it has been free and is still free (currently) for use. Since Oracle has purchased MySql it may not be so for much longer but that is only my personal opinion…
Scribe promotes that they integrate natively with MySql and they do…. But…. the catch is not actually with the free community edition of the software! If you want to use scribe and the customer doesn’t mind paying the annual license fee for mysql enterprise ($900) then scribe will work natively with that version and the oledb adapter that comes in scribe insight.
Otherwise you will get a message that it doesn’t work with the community edition. ughh…. Actually really what is the difference in connecting to the database itself? Anyways…
2.) The next obstacle faced was that using the odbc drivers would time out your integrations in the Scribe Workbench. Ughh… You only have to use the odbc drivers because you cannot connect natively with Scribe, but either way another workaround.
A work around for this is to create your statements ahead of time, and not actually “build” them in the scribe workbench (as intended). Otherwise the odbc driver connections would time out. You can quickly paste them into the workbench as a source and click next to define your source as quickly as possible.
3.) The third and definitely largest problem was that the scribe trigger and shadow tables generation script don’t exist for MySQL! Ok, so with Sql Server Scribe provides native scribe shadow and trigger scripts that allow you to natively use Scribe on databases and tables with large datasets without any additional coding needed.
You must understand that this is not so with MySQL, “Triple ugh”. This means that the idea of “real-time” integration with scribe and a MySQL data source isn’t even possible “out of the box” with the software without some additional application changes, but we can find a solution to that also.
There are (2) ways that I found around this issue.
a.) Go into the application that you are wanting to integrate with and attach a flag field to every db table, and update your entire application to additionally write lines into the a shadow table for processing from scribe. (definitely not an option with the site we were integrating)
b.) The second and the option we chose was to create our own trigger scripts and customized shadow tables for each MySql table that needs the ability for “real time” integration. After looking at the application there were only a few tables that actually needed “real time” capability because the rest are not updated as often.
We created an exact copy of a table’s structure (without primary keys of course), and created triggers for Mysql to dump into those tables anytime that the table had a new record added, or a record updated. The record then ends up in the shadow table with the record itself an additional timestamp, scribestatus, and an update type (insert or update) appended to it.
This allowed complete integration without having to dig through the complete application and change all pages in it.
Using option (b) we are also able to control the status of the record in question to be updated, but this actually gave way to another problem, but at the same time it gave us a resolution as well.
The problem was that processing the DTS records will take a certain amount of time. During this time we need to ensure that only specific records are inserted/updated, and that the rest that are populating in the tables are left untouched until the integration completes and is re-ran in the next DTS cycle.
This is where the Pre-and Post integration commands come in handy. Before the WorkBench DTS runs we can do a post mysql command to change our status field in the shadow table to something meaningful. In my case I changed it to the number “2”. 2- means “being processed by Scribe”.
The DTS Job that runs only looks for fields in my shadow table with the value of 2 for source records. From there it does all the processing needed, and logs any errors for the integration job.
After the DTS processing is complete I run the Post integration job to cleanup any records in the shadow table with a value of 2. Leaving the new and untouched inserts and updates in the table with a value of 1, ready for the next scribe DTS cycle. Perfect!!!
This way I can schedule the integration to run every few seconds 10-15 and will have a very small number of records to process (based on the tables current usage), and this will give the ability for a real time integration for the application that is integrated.
There are lots more to this, but i will cut it short for now, and i just wanted to say that Scribe is a great tool for integration but sometimes you have to get a little creative with it and unsupported data types.
If you have any questions or comments feel free to let me know. Thanks!
Looking at the problems with file storage and CRM i yet again find myself looking for a better way to manage files and file storage through the wonderful CRM Interface. The main premise again sticking to the slogan of everything all in one place.
For this situation we have seperate network fileservers that handle our data storage on the network, and it wouldn’t make sense putting all that information into the CRM Database. Not to mention it isn’t indexable or searchable, so the value add for that would be really low.
The problem that i have ran into is that i do not want to have to change coding that i had previously from another post when my clients switch from Sharepoint Services and full sharepoint server in their Microsoft CRM implmenetations. So i have devised a different way to handle this that will also assist with future CRM 4 (IFD) and offsite Sharepoint Installations.
I first created a custom attribute in Microsoft CRM named SPFOLDER, and placed it on the company tab in Microsoft CRM. This was a simple bit flag that i will use for a CRMworkflow to determine if folders have already been created on our sharepoint server or not for a particular company.
For displaying on the company form you can add a simple check to see if the bit flag is set to yes or no. If it is set to true, then show the folder on the server through a simple iframe in CRM, named SPFiles. (as in the example below)
if (crmForm.all.sti_spfolder.DataValue == true)
{
crmForm.all.IFRAME_SPFiles.src = “http://fileserver/Client%20Data/Forms/AllItems.aspx?RootFolder=%2fClient%20Data%2f” + crmForm.all.accountnumber.DataValue;
}
if (crmForm.all.sti_spfolder.DataValue == false)
{
crmForm.all.IFRAME_SPFiles.src = “http://crmserver1/SPIntegration/default.aspx?accid=” + crmForm.all.accountnumber.DataValue;
}
I have structured the folder storage by account number because we have multiple names for some companies that are similar so i found account numbers work best, but you could adjust for whatever makes sense in your organization. In this example we use Dynamics GP inhouse and it is connected with CRM so the information is populated automagically!!!
So now that we have a simple way to handle how to display the sharepoint data, we simply need to have an event to create the folder structure.
Using a simple http webrequest we can generate these folders into Sharepoint from the data we have, and this will allow us to display the customers specific data folders as well.
HttpWebRequest request = (System.Net.HttpWebRequest)HttpWebRequest.Create(”http://fileserver/Client%20Data/” + lbl_CustomerName.Text + “”);
NetworkCredential netCredentials = new NetworkCredential(”sharepoint”, “Pass@word1″, “MEDTECH”);
request.Credentials = netCredentials;
//Send Request
request.Method = “MKCOL”;
HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
response.Close();
This will allow you to create company specific storage areas in Microsoft CRM. I have included some pictures as well to display how this looks in CRM on my machine.
After looking at the new CRM4 adapter for GP10 i had a few questions and most likely if you are reading this article then you had some questions as well and i hope that this article helps. I was glad to find out that this version is a completely new release and not a port from the older biztalk integration for CRM 3.0 and GP9.
The first thing i wondered was what are the 8 entities that integrated by default in the adapter? These are: Customers, Customer Addresses, Items, Price Levels, Sales Orders, Sales Invoices, and Contacts.
There is an SDK that is going to be out for the adapter Q4 2009, so additional integrations from other data sources will be possible. At the current time the adapter does not support hosted CRM, but since the adapter is developed as a webservice to webservice integration i would imagine that should follow shortly.
I found this great diagram depicting the integration paths for the adapter from the Microsoft Development Blog.

My next question was “The adapter is available but to who?” It is available to partners for no charge and Customers that have Microsoft CRM Software Assurance Plan and an active Microsoft Dynamics GP Enhancement Plan.
What versions of GP10 and CRM 4 does the adapter support? The customer will have to be on at least Dynamics GP10 Service Pack 4 and CRM update Rollup 5.
Where can i get it? This is the download link for Partners:
https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/MDGP10_CRMAdapter.htm
Overall i think that this adapter will provide a resource for GP and CRM users that want to integrate data. I will be interested in seeing the additional products that come after the SDK is released and as the product matures.
One simple but useful idea that was posted on the Microsoft Dynamics CRM Team Blog was how to use an IFrame to show a map of an accounts business location (http://blogs.msdn.com/crm/archive/2009/04/15/microsoft-dynamics-crm-iframe-magic.aspx).
We decided to take this idea one step further. Since our in-house technicians go out to several client locations in a given day, it would be nice to give them a set of map directions to go from client to client. Using Dynamics GP and Enterprise Scheduler in-house (along with Field Service Anywhere), we have a database of scheduled appointments as well as the client addresses.
First thing we did was to create a SQL view of all of the appointments for that day. The view includes the Tech ID and the client’s address.
Next, we created a .NET app that takes the Technicians ID as a passed parameter, pulled all of the appointments from the view using the Tech’s ID, ordered them by appointment date (done in SQL view), then created a URL for google maps with all of the addresses.
This next part can be done in many ways. You do not even need to do anything in CRM, just create a web form to allow the user to select a Tech ID, and call the .NET app above. We decided to embed it in CRM, and this is how we did it. We created an entity called Technician Service Route, made the “Name” field of a record the name of the technician (and made him the owner). We created a field for the Tech ID (which we manually enter), and added a tab for an IFRAME to link in the .net app. Pass the tech id to the .NET app, and all done. We also made the Route tab the first tab on the entity form. Now, when a technician opens up the Technician Service Routes, they have just their record, open it up, and there’s his map for the day.
Technician Service Route
One request we had recently was to show all the notes for a company, in order for a Sales rep to get a snapshot of anything currently going on with the client. This was to include all notes for the Account, Opportunities, tasks, appointments, and leads. This was to be viewable on the main company screen.
In order to accomplish this, we needed to first create SQL views of all the different notes we were going to need with the information we wanted. Instead of doing one massive view of all of the notes, we did a view for each type. For instance, for Opportunities, we created a view called Opportunity_Notes. It should be noted that since we are creating views, this is an unsupported way of getting the needed data. Here is the SQL script for the Opportunity_notes that we used:
SELECT dbo.AnnotationBase.ObjectId AS OpportunityId, dbo.OpportunityBase.AccountId, dbo.AccountBase.AccountNumber,
dbo.OpportunityBase.Name, dbo.AnnotationBase.NoteText, dbo.AnnotationBase.Subject, dbo.AnnotationBase.CreatedOn,
dbo.SystemUserBase.FullName AS CreatedBy
FROM dbo.OpportunityBase INNER JOIN
dbo.AnnotationBase ON dbo.AnnotationBase.ObjectId = dbo.OpportunityBase.OpportunityId INNER JOIN
dbo.AccountBase ON dbo.AccountBase.AccountId = dbo.OpportunityBase.AccountId INNER JOIN
dbo.SystemUserBase ON dbo.SystemUserBase.SystemUserId = dbo.AnnotationBase.CreatedBy
WHERE (dbo.AnnotationBase.IsDocument = ‘FALSE’) AND (dbo.AnnotationBase.NoteText IS NOT NULL) AND (dbo.OpportunityBase.AccountId IS NOT NULL)
ORDER BY dbo.AnnotationBase.CreatedOn
From there, we created a .asp page to create the screen to combine all of the notes. Pretty simple, just made a connection to the database, and used DataLists with SqlDataSource to create our record views.
One problem we did have was that our various headers (ie: OpportunityNotes) would show up, even if there were no Opportunity Notes for that Company. To hide the headers, we added a Selected event to each SqlDataSource. Within that event, set a variable to “block”. Then within each datalist, use a DIV with a Style of “display” set to the variable.
Lastly, within the Account Form, we added an IFrame. Within the Form Onload, we set the IFrame source to the .asp that we published on the CRM server, with the Customer Number as a passed variable in the URL. We use the Customer Number from GP, which is unique, and used that as the passed variable instead of the GUID.
Here’s a screenshot of the final product. Happy coding!
First off I was glad that I attended ms convergence 09. The show had 7000 plus attendees during the week and with our rfid tags in our eventforce badges they even told us a calculation of all the steps we had taken combined.
With kirill tartarinov at the opening speech and also the microsoft R&D presentation on thursday it was very apparent that everyone should be able to utilize something with their existing infrastructure better with the current economic climate.
Once again more with what you currently have, and making sure you have simple quick wins to aid with more challenging endevours such as BI.
I also discovered that I am not that excited about creole cooking.
I will stick with red beans and rice from a zatarans box!



