| Carsten 的个人资料Microsoft Dynamics CRM &...日志列表 | 帮助 |
Microsoft Dynamics CRM & CoNeuigkeiten, Tipps, Trends und Tricks |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Microsoft Dynamics CRM 4.0 | Update Rollup7 = neuer Outlook-Client
Microsoft hat zum 22.10. das Update Rollup 7 veröffentlicht und damit ein neues Major-Release für den Outlook-Client “still und heimlich” herausgebracht. Nach so manchem Frust, der sich um den Outlook-Client – insbesondere der Performance und der Administration - herum entwickelt hat, ist die nunmehr mit UR7 veröffentlichte Version kräftig überarbeitet worden. Nach erfolgter Installation auf Windows7-Clients war der Start von Outlook einfach – wie soll man sagen: Wie schon immer erwartet. Schnell und “meinem Arbeitsverhalten” angemessen. Eine ausführlicher Bericht aller Neuerungen steht unter http://blogs.msdn.com/crm/archive/2009/10/22/update-rollup-7-for-microsoft-dynamics-crm-4-0.aspx zur Verfügung. Scheint so, als habe der Roll-Out von Windows7 positive Auswirkungen in allen Microsoft Teams gehabt ;-) Da es sich beim UR7 wiederum um ein kumulatives Update Rollup handelt, brauchen die Vorgängerversionen bei Neuinstallationen nicht mit ausgerollt/verteilt zu werden. Nur zu gern wird bei diesen Szenarien jedoch vergessen, dass es einige Fixes gibt, die manuell aktiviert werden müssen. Um welche es sich handelt, liest man detailliert unter http://support.microsoft.com/default.aspx?kbid=971782. Dies also nicht vergessen, um auch wirklich von allen Neuerungen profitieren zu können. Jetzt genieße ich die Arbeit mit dem neuen Outlook-Client… Microsoft Dynamics CRM 4.0 | Unterstützter Datensatzzähler
Da ich in vergangenen und laufenden Projekten auch nach der Möglichkeit der Anzeige der Gesamtanzahl Datensätze angesprochen werde, möchte ich an dieser Stelle auf einen Blog-Artikel von a33ik hinweisen. In seinem Artikel beschreibt a33ik seinen Code zur Implementierung eines “supported record counters”. Der Code ist zwar nicht für mehrsprachige Systemumgebungen ausgelegt, von daher ist zu überlegen, in welcher Sprachvariante die Ergebnisse angezeigt werden sollen. Wer jedoch mit einem deutschsprachigen System arbeitet und die Ergebnisse in deutscher Sprache ausgegeben haben möchte, der muss lediglich eine Code-Zeile ändern. string result = string.Format("Total records = {0}, Total pages = {1}", totalRecordCount, totalPageCount);
string result = string.Format("Datensätze gesamt = {0}, Seiten gesamt = {1}", totalRecordCount, totalPageCount);
Da a33ik auch den Quellcode zum Download zur Verfügung stellt, ist diese Änderung schnell erledigt. Ich empfehle zuvor die Auswirkungen auf die Gesamtperformance des Systems zu prüfen. Microsoft Dynamics CRM 4.0 | Update Rollup 6
pünktlich hat Microsoft das Update Rollup 6 für Microsoft Dynamics CRM veröffentlicht. Und da dies bereits auf zahlreichen anderen Blogs angekündigt wurde, möchte ich Euch sagen, warum auch dieses Rollup wieder die Installation wert ist: Nicht nur, dass es sich wieder um ein kumulatives Update Rollup handelt (also alle Vorgänger beinhaltet) – der wohl wichtigsten Gründe dürften diesmal die im Rollup beinhalteten KB-Artikel 974597 und 974037 sein. Erster Artikel befasst sich mit der Sicherheit von HTM-, HTML-Anlagen an E-Mail-Nachrichten, die direkt via WebClient geöffnet werden konnten und Letzterer mit der in zahlreichen Foren schon nachgefragten Situation, dass E-Mail-Nachrichten manuell via Outlook nicht erfolgreich in CRM hochgestuft werden konnten. Es erfolgte eine Hinweis-Meldung “Ungültige E-Mail Adresse”, die ebenso nichtssagend, wie unzutreffend war. Ich empfehle also, das aktuelle Update Rollup 6 zu installieren. Und im September dann auch wieder mehr Tipps & Tricks von mir…
Microsoft Dynamics CRM 4.0 | Update Rollup 5
Fast pünktlich zum Monatsbeginn hat Microsoft das Update Rollup 5 zur Verfügung gestellt. Installationshinweise unter http://support.microsoft.com/kb/970141/en-us/. Besonders interessant dabei der Patch: ”An entity form loads slowly after you add many fields of several different attribute types in Microsoft Dynamics CRM 4.0”
Microsoft Dynamics CRM | Grid Aktionen (Bericht aus einem Codeplex-Projekt)
von Zeit zu Zeit lohnt sich immer mal wieder der Blick auf codeplex.com. Nachdem ich vor kurzem für ein Projekt diverse Aktionen aus der Grid-Ansicht heraus ermöglicht habe (unter anderem die Möglichkeit, auch Aktivitäten aus der Grid-Übersicht als “abgeschlossen” quittieren zu können), durfte ich vor kurzem feststellen, dass die Freunde von iCRM offenbar eine ganz ähnliche Anforderung aus einem Projekt hatte und auf codeplex.com in dem Projekt CRM Grid Actions Ihre Entwicklung als Download zur Verfügung stellen. Bereits mit wenigen Anpassungen ist daraus auch eine deutschsprachige Lösung in Eurem System integriert. Dazu bedarf es etwas Know-How der Anpassung der ISV-config.xml (Ein Beispiel wird in der Datei “ISVButtonsetting.xml” mitgeliefert und muss nur noch mit Übersetzungstext und entsprechendem Ländercode angepasst werden), sowie der Übersetzung der Ansichtstexte der beiden ASPX-Seiten MultiSelect- bzw. SingleSelect.aspx. Hinsichtlich der Integration des Buttons >>Aktivitäten abschließen<< darf ich allerdings auch den berühmten Spruch “Mit viel Macht kommt auch große Verantwortung” erneut ins Spiel bringen. Es findet keinerlei Plausibiltätsprüfung statt, die ausgewählten Aktivitäten werden als abgeschlossen abgespeichert. Wer dann noch eine versehentlich abgeschlossene Aktivität erneut bearbeiten möchte, der sollte sich auf jeden Fall einen Workflow “manuelle Ausführung” erstellen, mit dessen Hilfe der Status der Aktivität wieder auf “offen” gestellt wird und damit eine erneut Bearbeitung der Aktivität ermöglicht wird. Mein Fazit: Es lohnt sich immer, einen Blick auf codeplex.com zu riskieren.
Microsoft Dynamics CRM 4.0 | Berichte – Client Drucksteuerelement
seit Neuestem bekomme ich immer häufiger Anfragen hinsichtlich der Fehlermeldung bei dem Versuch die aus Microsoft Dynamics CRM heraus aufgerufenen SQL Berichte zu drucken. Nachdem ein Druck über die Schaltfläche des Report-Viewers versucht wird, meldet das System: “Das Client-Drucksteuerelement kann nicht geladen werden.” Microsoft hat hierzu bereits im Februar diesen Jahres einen Support-Artikel veröffentlicht, in dem die einzelnen Schritte beschrieben werden, die zur Bereinigung dieses Fehlers beitragen. Unter KB 967511 findet sich dieser Artikel. Also einfach die unter “Resolution” aufgeführten Schritte durchführen und sich anschließend auch wieder an der Druck-Möglichkeit des Berichtes erfreuen ;-)
Microsoft Dynamics CRM 4.0 | Systemansichten Manager (Public Views Manager)
Ich darf mich an dieser Stelle bei Andriy Butenko (aka a33ik ), dass er mir gestattet über seinen Public Views Manager zu berichten. Ich hatte die Gelegenheit seine Entwicklung ins Deutsche für ein Kundensystem zu übersetzen und erlaube mir, via meinem SkyDrive, Euch diese sehr sinnvollen Entwicklung anbieten zu können. Worum es geht? Die Systemansichten sind grundsätzlich für alle User im System sichtbar. Manchmal jedoch hat man die Anforderung, bestimmte Ansichten nur für gewisse Abteilungen “frei” schalten zu können. Genau dieses Problem greift der Public Views Manager auf und schafft über die Auswahl von Unternehmenseinheiten die Möglichkeit die Systemansichten (den Zugriff) einzuschränken. Kontakt-Ansicht vor Einsatz des Public Views Managers:
Kontakt-Ansicht nach Einsatz des Public Views Managers:
Auf der Blog-Seite findet Ihr auch ein Video mit genauer “Gebrauchsanweisung”. Nachdem Ihr den Public Views Manager (Systemansichten Manager) installiert habt, stehen Euch via den Unternehmenseinheiten Einschränkungen auf Systemansichten zur Verfügung. Jetzt müsst Ihr konsequenterweise nur noch Eure Abteilungen als Unternehmenseinheiten eingerichtet haben. Zur Installation: Ihr findet im o.g. Order die Anpassungs-XML-Datei. Diese zunächst in Euer System integrieren (1031 und 1033 als Ländercode enthalten). Anschließend mit dem Plug-In-Registration-Tool (im aktuellen SDK oder unter http://code.msdn.microsoft.com/crmplugin) die .dll-Datei registrieren und dann noch zwei Schritte registrieren. 1. Schritt: Message = Create, Entität = new_publicviewmanager, 2.Entität = none, Post, Synchron 2. Schritt: Message = RetrieveMultiple, Entität = savedquery, 2. Entität = none, Pre, Synchron Fertig !
Ich wünsche Euch viel Spass mit dem Systemansichten Manager (Public Views Manager) von a33ik.
Microsoft Dynamics CRM 4.0 | Sicherheit für Grid-Buttons
Folgendes Szenario: Ihr habt in einer Datensatzübersicht(Grid)-Ansicht einen Button hinzugefügt, der ein Ereignis auslöst. Nun habt Ihr jedoch die Anforderung, dass dieses Ereignis nur ein bestimmter Personenkreis ausführen darf. Hier hilft uns ein kleines, feines Script weiter: function DoSomething() { // Define the role names you wish to allow var allowedRoles = [ "Planer", "Systemadministrator" ]; // Check to see if the user's role matches one of the defined allowed roles var roleAllowed = IsRoleAllowed(allowedRoles); // If the role is not allowed, then alert if (! roleAllowed) { alert('Sie sind nicht berechtigt, die Funktion auszuführen.' return; } // Here comes the code which should fire, if the user is allowed } function IsRoleAllowed(allowedRoles) { // Find the user security roles var result = RetrieveUserRoles(); var foundResult = false; // Loop through the allowed role list checking if the user belongs to one of the roles. for (i=0;i<=allowedRoles.length;i++) { if (result.indexOf(allowedRoles[i]) > -1 ) { foundResult = true; break; } } return foundResult; } // Method to return the user's security roles function RetrieveUserRoles() { // Define URL to CRM API service var serverUrl = "/mscrmservices/2007/crmservice.asmx"; // Set up XMLHTTP request var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("POST", serverUrl, false); xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8") // Specify correct SOAP action in the header xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple") // Define the retrievemultiple message var message = [ "<?xml version='1.0' encoding='utf-8'?>", "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<soap:Header>", "<CrmAuthenticationToken xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">", "<AuthenticationType xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">0</AuthenticationType>", // Change Microsoft for your Organization name here. "<OrganizationName xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">MicrosoftCRM</OrganizationName>", "<CallerId xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">00000000-0000-0000-0000-000000000000</CallerId>", "</CrmAuthenticationToken>", "</soap:Header>", "<soap:Body>", "<RetrieveMultiple xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>", "<query xmlns:q1='http://schemas.microsoft.com/crm/2006/Query' xsi:type='q1:QueryExpression'>", "<q1:EntityName>role</q1:EntityName>", "<q1:ColumnSet xsi:type='q1:ColumnSet'><q1:Attributes><q1:Attribute>name</q1:Attribute></q1:Attributes></q1:ColumnSet>", "<q1:Distinct>false</q1:Distinct>", "<q1:LinkEntities>", "<q1:LinkEntity>", "<q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>", "<q1:LinkFromEntityName>role</q1:LinkFromEntityName>", "<q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>", "<q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>", "<q1:JoinOperator>Inner</q1:JoinOperator>", "<q1:LinkEntities>", "<q1:LinkEntity>", "<q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>", "<q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>", "<q1:LinkToEntityName>systemuser</q1:LinkToEntityName>", "<q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>", "<q1:JoinOperator>Inner</q1:JoinOperator>", "<q1:LinkCriteria>", "<q1:FilterOperator>And</q1:FilterOperator>", "<q1:Conditions>", "<q1:Condition>", "<q1:AttributeName>systemuserid</q1:AttributeName>", "<q1:Operator>Equal</q1:Operator>", "<q1:Values>", "<q1:Value xmlns:q2='http://microsoft.com/wsdl/types/' xsi:type='q2:guid'>", GetUserId(), "</q1:Value>", "</q1:Values>", "</q1:Condition>", "</q1:Conditions>", "</q1:LinkCriteria>", "</q1:LinkEntity>", "</q1:LinkEntities>", "</q1:LinkEntity>", "</q1:LinkEntities>", "</query>", "</RetrieveMultiple>", "</soap:Body>", "</soap:Envelope>" ].join(""); // Submit to the CRM API web service and receive a response xmlhttp.send(message); return xmlhttp.responseXML.text; } // Method to return the current user's systemuserid function GetUserId() { // Define URL to CRM API service var serverUrl = "/mscrmservices/2007/crmservice.asmx"; // Set up XMLHTTP request var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("POST", serverUrl, false); xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8") // Specify correct SOAP action in the header xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute") // Define the execute message var message = [ "<?xml version='1.0' encoding='utf-8'?>", "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<soap:Header>", "<CrmAuthenticationToken xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">", "<AuthenticationType xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">0</AuthenticationType>", // Change MicrosoftCRM for your Organization name here. "<OrganizationName xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">MicrosoftCRM</OrganizationName>", "<CallerId xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">00000000-0000-0000-0000-000000000000</CallerId>", "</CrmAuthenticationToken>", "</soap:Header>", "<soap:Body>", "<Execute xmlns='http://schemas.microsoft.com/crm/2007/WebServices'>", "<Request xsi:type='WhoAmIRequest' />", "</Execute>", "</soap:Body>", "</soap:Envelope>" ].join(""); // Submit to the CRM API web service and receive a response xmlhttp.send(message); var result = xmlhttp.responseXML.xml; // Create a new DOM document and load the response XML var doc = new ActiveXObject("MSXML2.DOMDocument"); doc.async = false; doc.loadXML(result); // Return the userid node var returnNode = doc.selectSingleNode("//UserId"); if( returnNode != null ) { // If the userid node exists, return its value return returnNode.text; } else { return null; } } Wenn Ihr jetzt vom Grid-Button aus, die Funktion DoSomething() ausführen würdet, dann müssen die Benutzer mindestens eine der ausgewählten Rechterollen zugewiesen haben, um die Funktion ausführen zu können. Damit ist der Button zwar auch für die anderen Benutzer im Grid sichtbar. Ein Klick darauf bewirkt jedoch, dass entweder die Funktion ausgeführt wird oder eben nicht.
Microsoft Dynamics CRM 4.0 | Titel bei mehrfach geöffneten nicht-gespeicherten Aktivitäten beeinflussen
Wie Ihr alle wisst, ist der Standard-Titel einer Aktivität zunächst “Neu”. Erst nach der Speicherung des Datensatzes wird der Betreff als Titel hergenommen. Das Problem: In der täglichen Praxis der Arbeit mit Aktivitäten kommt es vielleicht auch bei Euch häufiger vor, dass Ihr – gerade unter Nutzung der Registerkartenmöglichkeit mit dem IE7 oder IE8 – mehrere Aktivitäten gleichzeitig geöffnet habt, diese jedoch noch nicht gespeichert habt. Wenn dann z.B. im Support noch der Bezug der jeweiligen Aktivitäten auf einen Anfrage gestellt wurde, weiß man allenfalls hierüber noch den Bezug zu einem Anfragetitel, jedoch nicht mehr zu einem Kunden. Ich wollte also eine Möglichkeit schaffen, dass der Aktivitätstitel bei einer Relation einer Aktivität zu einer Anfrage den Kundennamen anzeigt, um eine Aktivitätszuordnung auch im “nicht-gespeicherten Zustand” besser zu visualisieren. Zunächst fand ich von Adi Katz ein Script “CRM LookupPreview”, mit dem es möglich ist, eine Vorschau auf Informationen eines Lookup-Feldes im OnMouseOver-Effekt ausgeben zu lassen.
Damit jedoch nicht genug, denn bei mehrfach geöffneten nicht-gespeicherten Aktivitäten (z.B. Telefonanrufen) müsste die Anwenderin/der Anwender nunmehr direkt den Mauszeiger auf das Lookup-Feld richten, um zu erkennen, für wen die Anfrage und damit die Aktivität angelegt wird. Ich wollte daher noch einen anderen optischen Hinweis: Ich fand die Möglichkeit, den Namen der Entität bereits zur Laufzeit zu beeinflussen eine geeignete Methode, einen optischen Hinweis zu platzieren. Damit könnten im Praxisbetrieb gleich mehrere Telefonanrufe geöffnet und nicht-gespeichert bleiben, dennoch wäre jedem klar ersichtlich, wofür die Aktivität angelegt werden sollte. Noch dazu müsste ich nicht das Betreff-Attribut um Informationen ergänzen, die mit dem Betreff eigentlich nichts zu tun haben – also z.B. den Betreff stets zu ergänzen um “Firmenname: Betreff“ Um diese Funktion zu realisieren sind zwei Lösungsbausteine hier kombiniert: 1.) Die Funktion den Titel zur Laufzeit zu beeinflussen und 2.) Die Funktion schnellstmöglich auf eine Entität referenzierende Informationen nach zu laden. Die komplette .js-Datei findet Ihr zum Download auf meinem Skydrive: Hier. Dieses Beispiel zeigt einmal mehr, dass die Kombination von einigen JScript-Funktionen die Anwendung noch erheblich benutzerfreundlicher gestaltet werden kann. Und jetzt seid Ihr an der Reihe…
Microsoft Dynamics CRM 4.0 | Datum/Zeit-Felder vorbelegen
Eine immer wieder auftretende Frage: Wie kann ich Datum-/Zeit-Felder vorbelegen, so dass die Eingabe für die Benutzer deutlich freundlicher ist? Mit Hilfe von JavaScript lässt sich das Verhalten dieser Felder wunderbar beeinflussen. Im OnLoad-Event lässt sich zum Beispiel hinzufügen: 1: var today = new Date(); 2: today.setHours (08); 3: today.setMinutes (00); 4: crmForm.all.your_datefield.DataValue = today;Damit setzt Ihr ein Datum-/Zeit-Feld auf das aktuelle Datum / 08.00 Uhr. Doch es geht auch noch komfortabler ! Aktuelles Datum und aktuelle Uhrzeit: 1: var today = new Date(); 2: var cur_hour = today.getHours(); 3: var cur_min = today.getMinutes(); 4: today.setHours(cur_hour); 5: today.setMinutes(cur_min); 6: crmForm.all.your_datefield.DataValue = today;Ein kleines Script – eine große Wirkung. Die Arbeitserleichterung bei der Eingabe zum Beispiel auf den Aktivitätsentitäten ist um ein vielfaches bequemer.
|
MrDave´s (David Yack) CRM Blog beinhaltet eine FAQ Datenbank zur neuen Version von Microsoft Dynamics CRM 4.0
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|