Search
A lazy port scanner written in c#
Fing system user by name in MSCRM4
// find system user by name private systemuser GetUser(string name) { QueryByAttribute query = new QueryByAttribute(); ColumnSet column = new ColumnSet(); column.EntityName = EntityName.systemuser.ToString(); //column.Attributes = new String[] { "name", "systemuserid" }; query.EntityName = EntityName.systemuser.ToString(); systemuser sysUser = new systemuser(); return sysUser; //returns system user }
Get all roles assigned to a user in MSCRM 4.0
// Get all roles assigned to a user private BusinessEntityCollection CurrentUserRoles(ICrmService service, Guid userId) { var queryForUserRole = new QueryExpression { EntityName = "role", ColumnSet = new AllColumns() }; // Create the link entity from role to systemuserroles. var linkEntityRole = new LinkEntity{ LinkFromEntityName = "role", LinkFromAttributeName = "roleid", LinkToEntityName = "systemuserroles", LinkToAttributeName = "roleid" }; var linkEntityUserRoles = new LinkEntity{ LinkFromEntityName = "systemuserroles", LinkFromAttributeName = "systemuserid", LinkToEntityName = "systemuser", LinkToAttributeName = "systemuserid" }; // Create the condition to test the user ID. var conditionForUserRole = new ConditionExpression{ AttributeName = "systemuserid", Operator = ConditionOperator.Equal, Values = new object[] { userId } }; // Add the condition to the link entity. linkEntityUserRoles.LinkCriteria = new FilterExpression(); linkEntityUserRoles.LinkCriteria.Conditions.Add(conditionForUserRole); // Add the from and to links to the query. linkEntityRole.LinkEntities.Add(linkEntityUserRoles); queryForUserRole.LinkEntities.Add(linkEntityRole); // Retrieve the roles and write each one to the console. BusinessEntityCollection currentUserRoles = service.RetrieveMultiple(queryForUserRole); return currentUserRoles; }
Grant/Revoke Security principles in CRM 4
/* Grant/Revoke Security principles in CRM 4 */ // Get Target owner dynamic private TargetOwnedDynamic GetTargetOwned(string entityName, Guid entityGuid) { return new TargetOwnedDynamic() { EntityId = entityGuid, EntityName = entityName }; } //Retrieve shared principle access private PrincipalAccess[] GetPrincipals(TargetOwnedDynamic target) { //Describe the target for entity instances that are owned by a security principal. RetrieveSharedPrincipalsAndAccessRequest retrieve = new RetrieveSharedPrincipalsAndAccessRequest(); retrieve.Target = target; RetrieveSharedPrincipalsAndAccessResponse retrieved = (RetrieveSharedPrincipalsAndAccessResponse)_crmService.Execute(retrieve); return retrieved.PrincipalAccesses; } //Retrieve team shared principle access private PrincipalAccess[] GetTeamPrincipals(TargetOwnedDynamic target) { //Describe the target for entity instances that are owned by a security principal. RetrieveSharedPrincipalsAndAccessRequest retrieve = new RetrieveSharedPrincipalsAndAccessRequest(); retrieve.Target = target; RetrieveSharedPrincipalsAndAccessResponse retrieved = (RetrieveSharedPrincipalsAndAccessResponse)_crmService.Execute(retrieve); return retrieved.PrincipalAccesses.TakeWhile(tm=>tm.Principal.Type==SecurityPrincipalType.Team).ToArray(); } // Remove principle access over target private void RemovePrincipals(TargetOwnedDynamic target, PrincipalAccess[] principals) { RevokeAccessRequest request = new RevokeAccessRequest(); request.Target = target; foreach (PrincipalAccess principal in principals) { request.Revokee = principal.Principal; RevokeAccessResponse response = (RevokeAccessResponse)_crmService.Execute(request); } } // Removes all team access over target private bool RevokeAllTeamAccess(TargetOwnedDynamic target) { PrincipalAccess[] allPrinciples = GetPrincipals(target); PrincipalAccess[] teamPrincipals = allPrinciples.Where(tp => tp.Principal.Type.Equals(SecurityPrincipalType.Team)).Select(tp => tp).ToArray(); RemovePrincipals(target, teamPrincipals); return true; } // Revoke unknown team access private bool RevokeUnknownTeamAccess(TargetOwnedDynamic target) { Guid unknownTeamGuid = GetTeamGuid(_configUnknownSalesTeam); PrincipalAccess unknownTeamPrincipal = GetPrincipals(target).Where( up => up.Principal.PrincipalId.Equals(unknownTeamGuid) && up.Principal.Type.Equals(SecurityPrincipalType.Team)) .Select(up => up).SingleOrDefault(); if (unknownTeamPrincipal != null) { RevokeAccessRequest request = new RevokeAccessRequest(); request.Target = target; request.Revokee = unknownTeamPrincipal.Principal; RevokeAccessResponse response = (RevokeAccessResponse)_crmService.Execute(request); return true; } else return false; } // Get Team GUID private Guid GetTeamGuid(string teamName) { QueryExpression query = new QueryExpression("team") { ColumnSet = new AllColumns(), Criteria = new FilterExpression {FilterOperator = LogicalOperator.And} }; ConditionExpression condition1 = new ConditionExpression { AttributeName = "name", Operator = ConditionOperator.Equal, Values = new object[] {teamName} }; query.Criteria.Conditions.Add(condition1); var teamRequest = new RetrieveMultipleRequest { Query = query, ReturnDynamicEntities = true }; var teamResponse = (RetrieveMultipleResponse)_crmService.Execute(teamRequest); if (teamResponse.BusinessEntityCollection.BusinessEntities.Count == 1) { DynamicEntity teamRetrived = (DynamicEntity)teamResponse.BusinessEntityCollection.BusinessEntities[0]; //Key teamKey = ((Key)teamRetrived.Properties["teamid"]).Value; return ((Key)teamRetrived.Properties["teamid"]).Value; } else { return Guid.Empty; } } // Share with unknown team private bool UnknownTeamShare(TargetOwnedDynamic target) { bool alreadySharedToUnknown = false; Guid unknownTeamGuid = GetTeamGuid(_configUnknownSalesTeam); //PrincipalAccess[] allPrinciples = GetPrincipals(target); PrincipalAccess[] teamPrincipals = GetPrincipals(target).Where(tp => tp.Principal.Type.Equals(SecurityPrincipalType.Team)).Select(tp => tp).ToArray(); alreadySharedToUnknown = teamPrincipals.Any(p => p.Principal.PrincipalId.Equals(unknownTeamGuid)); if (target != null && alreadySharedToUnknown == false) { SecurityPrincipal principal = new SecurityPrincipal(); principal.Type = SecurityPrincipalType.Team; principal.PrincipalId = GetTeamGuid(_configUnknownSalesTeam); UInt32 mask = 0; if (_configUnknownSalesTeamPermission.Count >= 1) mask = _configUnknownSalesTeamPermission.Aggregate(mask, (current, item) => current | UInt32.Parse(item.Value)); //Grant Access GrantAccessRequest request = new GrantAccessRequest(); request.Target = target; request.PrincipalAccess = new PrincipalAccess(); request.PrincipalAccess.AccessMask = (AccessRights)mask; request.PrincipalAccess.Principal = principal; GrantAccessResponse response = (GrantAccessResponse)_crmService.Execute(request); Log("The "+target.EntityName + " {" + target.EntityId +"} is shared with the sales team " + _configUnknownSalesTeam,false); return true; } else { return false; } }
How to reference Assemblies in the GAC
The Add Reference dialog box is path-based and does not enumerate the components from the GAC. The assembly folder under windows is a special folder view and so you cannot browse to an assembly from this folder and expect to be able to Add a reference to it in the normal way.
If you want to use an assembly from the GAC, you should drop your assemblies into a local folder, and then add a reference to the assembly from this folder. You may want to set the "Copy Local" property to False for that assembly if you do not want the assembly to be copied locally to your project folders. At runtime, the application will automatically use the assembly from the GAC.How to make your custom assemblies appear in the Add Reference dialog:
To display your assembly in the Add Reference dialog box, you can add a registry key, such as the following, which points to the location of the assembly[HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\MyAssemblies]@="C:\\MyAssemblies"
-- where "MyAssemblies" is the name of the folder in which the assemblies reside.
NOTE: You can create the this registry entry under the HKEY_LOCAL_MACHINE hive. This will change the setting for all of the users on the system. If you create this registry entry under HKEY_CURRENT_USER, this entry will affect the setting for only the current user.
For more information about assemblies and the GAC, vist the following MSDN Web Page: http://msdn.microsoft.com/library/en-us/cpguide/html/cpconglobalassemblycache.asp
shellcodetest.c
/*shellcodetest.c*/
char code[] = "bytecode will go here!";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) code;
(int)(*func)();
}
odfhex - objdump hex extractor
//************************************** odfhex - objdump hex extractor by steve hanna v.01 vividmachines.com shanna@uiuc.edu you are free to modify this code but please attribute me if you change the code. bugfixes & additions are welcome please email me! to compile: g++ odfhex.cpp -o odfhex note: the XOR option works perfectly, but i haven't implemented the full x86 payload decoder yet. so that option is mostly useless. this program extracts the hex values from an "objdump -d <binaryname>". after doing this, it converts the hex into escaped hex for use in a c/c++ program. happy shellcoding! ***************************************/ #include <stdio.h> #include <unistd.h> #include <memory.h> #include <string.h> #include <stdlib.h> #include <math.h> #define HEX_PER_LINE 17 char symbols[37] = "0123456789abcdefghijklmnopqrstuvwxyz"; const int MAX_BASE = 36; int GetIndex(char * pString, char search); int BaseToDec(char* number, int base) { if( base < 2 || base > MAX_BASE) return 0; //Failed int NumLength = strlen(number); int PlaceValue, total = 0; PlaceValue = (int)pow(base,NumLength-1); for(int i=0;i<numlength br="" i=""> { total += GetIndex(symbols,*number)*PlaceValue; number++; PlaceValue /= base; //Next digit's place value (previous/base) } return total; } int GetIndex(char * pString, char search) { int index = 0; while(*pString != '0') { if(*pString==search) break; pString++; index++; } return index; } int main(int argc, char** argv) { FILE* dump = NULL; long length = 0; char* content; int i=0; int count =0; int total=0; int XORvalue=0; bool XORit = false; char HexNumber[3]={'\0'}; printf("\nOdfhex - object dump shellcode extractor - by steve hanna - v.01\n"); if(argc < 2) { printf("%s: <object dump="" file=""> [-x xor offset in decimal] \n",argv[0]); return -1; } dump = fopen(argv[1],"r"); if(!dump) { printf("Error: Couldn't open file.\n"); return -1; } fseek(dump,0,SEEK_END); length = ftell(dump); content = new char[length+1]; memset(content,0,sizeof(content)); printf("Trying to extract the hex of %s which is %d bytes long\n",argv[1],length); if (argc > 3 && !strcmp(argv[2],"-x")) { XORit =true; XORvalue = BaseToDec(argv[3],16); printf("XORing with 0x%02x\n",XORvalue); } fseek(dump,0,SEEK_SET); for(int i=0; i < length; i++) { content[i] = fgetc(dump); } fclose(dump); while(count !=4) { if(content[i] == ':') count++; i++; } count = 0; printf("\""); while(i < length) { if( (content[i-1] == ' ' || content[i-1]=='\t') && (content[i+2] == ' ' ) && (content[i] != ' ') && (content[i+1] != ' ') && ((content[i]>='0' && content[i]<='9') || (content[i]>='a' && content[i]<='f')) && ((content[i+1]>='0' && content[i+1]<='9') || (content[i+1]>='a' && content[i+1]<='f')) ) { if(XORit) { HexNumber[0] = content[i]; HexNumber[1] = content[i+1]; printf("\\x%02x",BaseToDec(HexNumber,16) ^ XORvalue); } else printf("\\x%c%c",content[i],content[i+1]); count++; total++; } if(i+1 == length) { printf("\";\n"); } else if(count == HEX_PER_LINE) { printf("\"\\\n\""); count =0; } i++; } delete[] content; printf("\n%d bytes extracted.\n\n",total); return 0; }
Make your system type
Set ws = CreateObject("WScript.Shell")
str = "Hi there... ~ Dont click your mouse while i am typing." & _
" ~~This is a send key example, using which you can send your keystrokes" & _
"to any application you want.~~" & _
"you can increase the value of sleep to for longer delay~~" & _
"So enjoy~Napstr Rulz..."
ws.Run("notepad.exe")
WScript.Sleep(1000)
For c=1 To Len(str)
WScript.Sleep(100) 'Increase the value for longer delay
ws.SendKeys Mid(str,c,1)
Next
Inheritance in C#
using System;
namespace Tutorial
{
public class Parent
{
string parentString;
public Parent() // Constructor
{
Console.WriteLine("Parent Constructor.");
}
public Parent(string myString) // Constructor takes "myString" as parameter.
{
parentString = myString; // Assigns parameter to parentString
Console.WriteLine(parentString);
}
public void print()
{
Console.WriteLine("I'm a Parent Class.");
}
}
public class Child : Parent // Inheritance
{
public Child()
: base("From Derived") //Inherits and calls the base class constructor.
{
Console.WriteLine("Child Constructor.");
}
public void print()
{
base.print();
Console.WriteLine("I'm a Child Class.");
}
public static void Main() //Static main method, init of application
{
Child child = new Child();
child.print();
((Parent)child).print();
}
}
}
The new class—the derived class—then gains all the non-private data and behavior of the base class in addition to any other data or behaviors it defines for itself. The new class then has two effective types: the type of the new class and the type of the class it inherits.
Measure execution time
using System; DateTime startTime = DateTime.Now; Console.WriteLine ("Started: {0}", startTime); // Execute the task to be timed for (int i=1; i < 100000; i++){} DateTime stopTime = DateTime.Now; Console.WriteLine ("Stopped: {0}", stopTime); TimeSpan elapsedTime = stopTime - startTime; Console.WriteLine ("Elapsed: {0}", elapsedTime); Console.WriteLine ("in hours :" + elapsedTime.TotalHours); Console.WriteLine ("in minutes :" + elapsedTime.TotalMinutes); Console.WriteLine ("in seconds :" + elapsedTime.TotalSeconds); Console.WriteLine ("in milliseconds:" + elapsedTime.TotalMilliseconds);
Declare simple event
using System; public class MyClass : IDisposable { public event EventHandler Disposing; public void Dispose() { // release any resources here if (Disposing != null) { // someone is subscribed, throw event Disposing (this, new EventArgs()); } } public static void Main( ) { using (MyClass myClass = new MyClass ()) { // subscribe to event with anonymous delegate myClass.Disposing += delegate { Console.WriteLine ("Disposing!"); }; } } }
Versioning in C#
// versioning.cs
public class MyBase
{
public virtual string Meth1()
{
return "MyBase-Meth1";
}
public virtual string Meth2()
{
return "MyBase-Meth2";
}
public virtual string Meth3()
{
return "MyBase-Meth3";
}
}
class MyDerived : MyBase
{
// Overrides the virtual method Meth1 using the override keyword:
public override string Meth1()
{
return "MyDerived-Meth1";
}
// Explicitly hide the virtual method Meth2 using the new
// keyword:
public new string Meth2()
{
return "MyDerived-Meth2";
}
// Because no keyword is specified in the following declaration
// a warning will be issued to alert the programmer that
// the method hides the inherited member MyBase.Meth3():
public string Meth3()
{
return "MyDerived-Meth3";
}
public static void Main()
{
MyDerived mD = new MyDerived();
MyBase mB = (MyBase) mD;
System.Console.WriteLine(mB.Meth1());
System.Console.WriteLine(mB.Meth2());
System.Console.WriteLine(mB.Meth3());
}
}
Comparison Microsoft Dynamics CRM 3.0 to 4.0
Features | 3.0 | 4.0 | Description |
Multi-langual Support | No | Yes | The new multilingual user interface makes it possible to have more than one language available for the user interface, Help, and metadata in a single installation. so users can work and share data seamlessly in the language of their choice. |
Multi-currency Support | No | Yes | It supports multiple currencies with automatic exchange calculation for reporting purposes. Currency is defined on organization creation as base currency. Currency can also be defined by: org, user, Account. All financial transactions to capture the value of the transaction in both the base currency & transaction currency. System administrators to define transaction currencies and define an exchange rate to associate the base currency with the transaction currency Currency order. The account default currency is displayed if one had |
Multi-tenancy | No | Yes | A new multi-tenant architecture allows organizations to host multiple distinct instances of Microsoft Dynamics CRM 4.0 on the same server. This not only allows them to make better use of hardware, it reduces management and maintenance costs associated with the CRM application. Multiple organizations may each have their own instance of Microsoft Dynamics CRM 4.0 without requiring additional database servers, making it an excellent solution for companies that host CRM services for multiple customers, or for organizations with distinct business units who each need their own data repository. |
Smart Search | No | Yes | Smart Search makes it easier for you to find what you’re looking for by eliminating clicks and removing the necessity for a separate lookup window. Search results will automatically display if an exact match is found. Relevant options are also displayed on partial matches when you type so you can easily select the relevant item, enabling you to spend your time on higher-value tasks. |
Multi-stage Workflows | No | Yes | New tools in Microsoft Dynamics CRM 4.0 make it easier to create multi-stage workflows such as a sales cycle or customer retention process. Microsoft Dynamics CRM 4.0 also provides visibility into running workflow stages, enabling users to see and track the progress of business processes. End users can also see the status of workflows that are running, giving them greater insight into their customers. |
Metadata Application Programmer Interface | No | Yes | The Microsoft Dynamics CRM 4.0 metadata application programming interface (API) has been expanded to make it easier for developers to create flexible custom solutions and to enhance integration capabilities. Developers can now create, read, update, and delete metadata on the fly and create custom entities, attributes, and relationships programmatically. The Microsoft Dynamics CRM 3.0 Metadata API is still available to |
Support for SQL Mirroring | No | Yes | Line-of-business applications must be available to support business requirements without downtime or loss of data. When mission-critical applications go down, the impact can be significant and the result can be missed opportunities, dissatisfied customers, and lost employee productivity. With support for Microsoft SQL Server® mirroring, Microsoft Dynamics CRM 4.0 maintains a copy of its database so that in the event of a database failure it can switch databases automatically with minimal disruption. |
Clustering and Load Balancing | Yes | Yes | Microsoft Dynamics CRM 4.0 supports clustering and load balancing of all solution components, including Exchange Server, SQL Server Reporting Services, and Web services.Clustering allows you to scale your applications effectively so that you can support youruser base and expand as your business grows. |
Internet Facing Deployment | No | Yes | Microsoft Dynamics CRM 4.0 gives you an easier, faster way to access your data over the Internet with Internet-Facing Deployments. Now end users can use Microsoft Office Outlook to access the CRM application using hypertext transfer protocol (HTTP) with Secure Sockets Layer (SSL) from home or while travelling without requiring a VPNconnection. |
Resource Center | No | Yes | The new Resource Center provides an online community for people to share information and best practices, and learn about using Microsoft Dynamics CRM. In the Resource Center, you have access to a variety of problem-solving content, including: |
Advanced Relationship Modeling (Many to Many Relationships,System to System Relationships) | No | Yes | Now MSCRM4.0 allows to create |
Advanced Diagnostics | No | Yes | With new diagnostic tools, it is easier than ever to get a clear picture of how well the CRMsystem is running. Diagnostic tools provide administrators with a broad set of alerts and warnings to help detect and resolve issues with the CRM system, including detection of unsupported configurations, before they result in outages. |
Portable Application Model | No | Yes | Microsoft Dynamics CRM 4.0 extends the portable application model, which supports the export and import of the entire CRM application for seamless migration to another CRM server. Now security roles, workflows, organization settings, multi-language UI settings, and other metadata can all be imported and exported, making it easier for technical teams to move from development to testing to production or move the |
Duplicate Detection | No | Yes | Microsoft Dynamics CRM 4.0 helps ensure the quality of your data by providing duplicate detection when adding data to the system or during a regular maintenance cycle. |
Data Import Wizard | No | Data Import wizard is used to move data from other applications into Microsoft Dynamics CRM. Import Data Wizard, which is useful for importing data you have stored in a spreadsheet, importing leads that you have purchased, and for enriching existing data. | |
Windows Workflow Foundation | No | Yes | Microsoft Dynamics CRM 4.0 makes it easier to unify business processes across the business with Microsoft Windows® Workflow Foundation, a set of tools and technologies for creating and integrating data and processes from your CRM solution with other Microsoft line-of-business systems. Workflows built in Microsoft Dynamics CRM 3.0 are forward-compatible and will continue tofunction in Microsoft Dynamics CRM 4.0. |
Workflow Wizard | No | Yes | Microsoft Dynamics CRM workflow allows companies to automate how they use and manage data. Microsoft Dynamics CRM 4.0 builds on this capability by empowering end-users to create workflows without IT involvement using a new Web-based workflow wizard. Workflows can easily be shared using team, division, and system workflow libraries so that people can find workflows that are relevant to their work. |
Dynamic Data Access for Workflow Design | No | Yes | The workflow forms designer gives users access to dynamic data so they can easily createworkflows that provide rich contextual CRM data. Forms can be easily created that show data values based on live data in your CRM database. Incorporating dynamic data into workflows helps users deliver context-sensitive relevance alongside workflow functionality. |
Promote E-mail to Lead | No | Yes | In the past, when the sales manager or salesperson received an e-mail that they wanted to categorize as a lead, they needed to open the lead form and create a new lead. Now they can convert an activity directly into a lead. |
Promote E-mail to Case | No | Yes | E-mail messages can be promoted into cases automatically, helping you do your work more efficiently. This reduces the amount of manual work required to manage these typesof activities and speeds customer communications. |
Web Mail Merge | No | Yes | New and enhanced tools with support for custom attributes, as well as central storage and sharing of mail merge templates make it easier for users to manage and create mail merges. With CRM 4.0 you can create and share reusable templates with your coworkers so you can work more productively. A new Web-based tool for mail merges empowers users to work with mail merges through the Web. |
Reporting Wizard | No | Yes | Microsoft Dynamics CRM 4.0 empowers end users to create, share, and use reports without IT assistance. The Web-based Reporting Wizard provides simplified access to information, allowing users to work more independently and freeing IT staff to do other work. Users can also create and share personalized views and filters on reports to help them focus on the information that’s most relevant to their work and share insight |
Scheduled Reporting | No | Yes | Keeping up with changes in the customer repository is an ongoing challenge. Scheduled and recurring reports provide snapshots of the customer information as it evolves. On-demand reporting provides customer data in real time, so that people can stay informed and do their job better. |
Offline Reporting | No | Yes | Offline users can take advantage of reporting capabilities using synchronized data. Offline users can easily run reports against their locally synchronized data store on their client machine, and reports are republished in offline mode. Users have full access to reporting features, such as filtered views, helping them be effective even without a connection to the CRM system. |
Offline Customizations | No | Yes | Microsoft Dynamics CRM 4.0 offers a consistent user experience whether working online or offline, including the ability to take reports, workflows, and other custom functionality offline. A new offline software development kit (SDK) helps developers create solutions that provide functionality even when a connection to the server is not available. |
Smart Navigation | No | Yes | Each organization has its own way of using CRM. You can now easily define the layout of the left navigation pane in Microsoft Dynamics CRM 4.0 so that it exposes only the functionality that your users need. Access to navigation items is role-based, so that users can focus on items that are relevant to their job. |
E-Mail Smart Matching | No | Yes | Tracking correspondence is now easier than ever before with tracking enhancements in Microsoft Dynamics CRM 4.0. E-mail smart matching evaluates the incoming messages and automatically matches them with the appropriate conversation, without a visible tracking token. This capability streamlines communications, helping you improve customer response and build loyalty. |
Asynchronous Plugins | No | Yes | The plug-in model supports asynchronous in addition to synchronous events. Previous callouts only supported synchronous methods. But Microsoft Dynamics CRM 4.0 plug-ins can be configured as asynchronous events that can occur after the platform call. |
Event Framework Plug-ins | No | Yes | A new event framework in Microsoft Dynamics CRM 4.0 makes it easier to extend the capabilities of Microsoft Dynamics CRM with custom code components, called plug-ins, that are dynamically registered and run inside the CRM application. Close integration between custom code and the CRM application makes it easier for |
Templates | No | Yes | MSCRM 4.0 contains the following out of box templates |
Integration with Office Communicator | No | Yes | Integration with Microsoft Office Communications Server empowers quick communication and collaboration. Users can now see who is online or offline, free or busy, and launch a Microsoft Office Communicator session without leaving Microsoft Dynamics CRM 4.0. This makes it even easier for teams to work together quickly whether they’re in the same office or different geographical regions. |
New Deployment Wizards, which include bulk importing of users from Active Directory | No | Yes | Microsoft Dynamics CRM 4.0 improves administrator productivity by streamlining the process for adding users. New users can now be created in bulk. Tasks such as importing userinformation from the Microsoft Active Directory directory service, setting user roles, andassigning licenses can all be automated, greatly reducing the time and effort required tocreate new users and freeing up administrators to do other work. |
Email Topology changed to support more multiple choices of email routing | No | Yes | Microsoft Dynamics CRM 4.0 offers a broad range of choice for e-mail platforms. Native support for Exchange Server ensures seamless e-mail integration, and extends powerfulfeatures of Exchange Server to provide a richer e-mail experience. Support for POP3 andoutbound SMTP allow Microsoft Dynamics CRM 4.0 to support diverse business scenarios. |
Multiple ways to Authenticate | No | Yes | Microsoft Dynamics CRM supports multiple authentication models. The type of authentication interface that is used depends on if you are authenticated through Microsoft Dynamics CRM Online, on-premise, or Internet-facing deployment (IFD). |
New Data Mapping features | No | Yes | The data maps are used to map source data that is contained in the comma-separated values (CSV) source files to Microsoft Dynamics CRM entity attribute types. You have to map a column in the source file to an appropriate Microsoft Dynamics CRM entity attribute by using column mapping or complex transformation mapping. The data in the unmapped columns is not imported during the data migration operation. Data migration also includes owner mapping, notes and attachments, and complex transformation mapping in which data can be modified before migration. |
Direct External Interface into Dynamics CRM without a required VPN | No | Yes | Microsoft Dynamics CRM 4.0 allows mobile or travelling users access to the CRM system using the Microsoft Office Outlook client over the Internet without requiring a Virtual Private Network (VPN) connection. The revolution in portable computing has created new challenges to IT departments seeking to give mobile users more secure access to resources. The new Internet Facing Deployment capability in Microsoft Dynamics CRM 4.0 makes it easier for organizations to configure on-premise servers to be accessed over the Internet, reducing the burden on IT. Users can now access Microsoft Dynamics CRM using their Outlook client over hypertext transfer protocol |
Pop3 Support/Exchange 2007 Support (64 bit) | No | Yes | Microsoft Dynamics CRM 4.0 allows organizations to choose from a wide range of e-mail platforms. In Microsoft Dynamics CRM 4.0, the e-mail router supports POP3 e-mail stores as well as Microsoft© Exchange Server, giving administrators and users greater choice of e-mail technologies. Microsoft Dynamics CRM 4.0 also provides full support for Microsoft© Exchange Server 2007. |
Diagnostic Tools in the Outlook for CRM client | No | Yes | Microsoft Dynamics CRM 4.0 gives administrators superior visibility into the functioning of system and workflow processes as well as new diagnostic tools for Microsoft Office Outlook. Some Microsoft Dynamics CRM tasks require longer processing and time to execute than others. Customers requested better monitoring of these processes so they could gain greater visibility into the ongoing performance of Microsoft Dynamics CRM. Microsoft Dynamics CRM 4.0 adds process status viewers that allow administrators to monitor the functioning of asynchronous processes; including data imports, workflows, and duplicate checking. New Outlook diagnostics also make it easier to troubleshoot end-user problems. An administrator can view information about the functioning of the Microsoft Dynamics CRM client, including network connectivity, connection quality, user role, credentials, and synchronization status. |
More flexible licensing options such as device versus user CALs | No | Yes | Microsoft Dynamics CRM 4.0 introduces new options that let you match your licensing agreement with your buying criteria and deployment preferences. Every business has different needs and different ways of using CRM. Since the release of Microsoft Dynamics CRM 3.0, we’ve enhanced our licensing model better match how different companies use Microsoft Dynamics CRM. The new device CAL allows organizations to license Microsoft Dynamics CRM on a per-device basis rather than a per-user basis. This can help organizations save money in scenarios, such |
Multi-criteria email tracking. Email tracking token can be turned off
| No | Yes | E-mail tracking has been improved in Microsoft Dynamics CRM 4.0 to provide a seamlessuser experience with greater flexibility. E-mail tracking in Microsoft Dynamics CRM 3.0 enables users to track e-mails related to their customers, accounts, contacts. For example, a salesperson may wish to track responses to customer e-mails related to a particular sales campaign. This feature has been enhanced in Microsoft Dynamics CRM 4.0 to provide easier and more flexible tracking options, including automatic tracking and bulk selection of e-mails for tracking. E-mail tracking no longer requires a tracking token. Instead, e-mails can be tracked based on a variety of criteria, including subject, sender, and recipient. Users can customize these settings to match their needs so that important e-mails are tracked automatically. This enables them to be more efficient in their work and gain better visibility into customer interactions. |
Data Migration Manager | No | Yes | Data Migration Manager, which can be used to migrate data from another customerrelationship management system to Microsoft Dynamics CRM. |
Organization Import Wizard | No | Yes | Move Microsoft Dynamics CRM 4.0 organizations to other servers with the new Organization Import Wizard. This wizard allows a new organization to be created in your development environment and easily ported to your production environment. When you upgrade server farms, you can quickly import your existing CRM environments to the new farm, as well as import an organization from any domain in the Microsoft Active Directory® forest. The Organization Import Wizard allows you to keep current users, or map users in the new domain to your imported organization, saving you from manually managing user migration. |
Enhanced Performance | No | Yes | Microsoft Dynamics CRM 4.0 delivers several new and improved technologies that boost application performance and help accelerate your business. CRM has been tuned for etter performance in wide area network (WAN) environments, transferring only the data t hat needs to be transferred over slow connections. Microsoft Dynamics CRM 4.0 now uses asynchronous processing for bulk transactions and other long-running tasks, |
Component Scalability | No | Yes | Because each business uses the CRM application differently, organizations can elect to cluster CRM application services together to match their usage needs. For example, one organization may make heavy use of workflow, while another may have large data imports.Clustering the components and services your business uses most, to match your business needs,improves scalability and improves the responsiveness of your CRM application. |
System Job Monitor | No | Yes | Microsoft Dynamics CRM 4.0 gives administrators superior visibility into system and data management jobs. Process status viewers enable administrators to efficiently monitor the functioning of asynchronous processes including data imports, workflows, and duplicate checking. This keeps administrators better informed as to the functioning of the CRM system and makes it easier to diagnose issues. |
Advanced Workflow expressions AND Triggers | No | Yes | Workflow additions and enhancements help eliminate limitations so companies and end users can create a wide range of sophisticated automation solutions. The scope of workflow has been expanded to include more events and entities, workflow expressions now include support for transverse relationships, and improved branching conditions make workflows more flexible. Workflows can be triggered automatically when a data value or |
Workflow Accessibility | No | Yes | End users can access workflow functionality in Office Outlook or through the Microsoft Dynamics CRM 4.0 Web client, giving them broader access to business automation tools. Workflows can be published to a shared workflow library for thers to find and use. This enables users to capture and share their business processes with |
Campaign Automation | No | Yes | Campaigns are streamlined in Microsoft Dynamics CRM 4.0 so that users can create, launch, and complete campaigns more quickly and with fewer clicks. When a user creates a campaign, they can send campaign e-mail messages and close campaign activities automatically. Automating these manual tasks helps users spend less time |
Activity Synchronization | No | Yes | All activity types in Microsoft Dynamics CRM 4.0 can be synchronized with Microsoft Exchange Server, making it easier for users and organizations to track their work. This allows users to track CRM activities, such as phone calls or letters, in addition to tracking e-mail messages, tasks, and other Exchange Server activities. |