| Carsten 的个人资料Microsoft Dynamics CRM &...日志列表 | 帮助 |
|
|
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.
Microsoft Dynamics CRM 4.0 | Dokumentation schnell erstellt
heute befasse ich mich einmal mit einem Randthema aus der Projektwelt “der Dokumentation” ;-). Viel zu oft ist es die Dokumentation, an der “gespart” wird und exakt dies ist auch viel zu häufig der Grund für Unstimmigkeiten in den Projekten oder nicht klar definierten Nachsorge-Leistungen. Gerade im Bereich der möglichen Erweiterung von Microsoft Dynamics CRM 4.0 durch einen selbst, oder aber durch einen Dienstleister, ist eine gute Dokumentation jedoch das A und O. Wer hat schon einen aktuellen Überblick über die im System befindlichen OnLoad-,OnSave oder OnChange Codes? Oder wer hat seine Picklisten wirklich “im Griff” und hat dafür gesorgt, dass Picklisten, die auf mehreren Entitäten vorkommen auch tatsächlich jeweils gleiche Werte enthalten? Und wer hat wenigstens eine aktuelle .xml oder .zip-Anpassungsdatei “zur Hand”, um damit das System schnellstmöglich wieder auf den aktuellen Stand der Dinge bringen zu können? Mal im Ernst: Nur zur gern wird an einer ordentlichen Dokumentation, sei es von Quellcode oder aber auch von Anpassungen, gespart und zu häufig höre ich vom “ungeliebten Kind” des Programmierers. Dabei kann eine Dokumentation mit einfachen Mitteln wirklich schnell und einfach erzeugt werden. Hier drei Hilfsmittel, mit denen ich eine ordentliche Dokumentation in meinen Projekten erzeuge: Um in der CRM-Anpassungswelt immer einen up-to-date-Status zu haben, empfehle ich die Installation des von Philip Richardson entwickelten CRM Customization Version Add-Ins unter http://code.msdn.microsoft.com/crmversion. Dieses Add-In lässt sich einfach installieren, und erzeugt vollkommen automatisch eine Versionierung der Anpassungsdateien (.xml bzw. .zip-Archive). Da auch noch der Quellcode von Philip mitgeliefert wird, kann schon mit wenigen Anpassungen eine Individualisierung stattfinden.
Mit dem Microsoft Dynamics CRM 4.0 Documentation Generator lassen sich mit Hilfe von Microsoft Excel 2007 folgende Dokumentationen erstellen: - Masken (Forms) - Scripte - Picklistenwerte Die resultierenden Excel-Arbeitsmappen können gerade mit Hilfe der neuen Möglichkeiten von Microsoft Excel 2007 und Word 2007 schnell formatiert werden und für eine individuelle Dokumentation aufbereitet werden. Die Installation des Tools ist denkbar einfach. Die Voraussetzungen für eine Installation schnell geschaffen, da ausführlich beschrieben.
Und wenn es darum geht bereits vorhandene JScripte schnell zu analysieren und ggfs. zu erweitern, dann greife ich gern auf das von Joris Kalz zur Verfügung gestellte Hilfsmittel Microsoft Dynamics CRM JScript Export Tool zurück.
Wer jetzt noch keine Dokumentation seines Systems oder seiner betreuten Systeme erstellt hat, der sollte sich schnellstens mit diesen Werkzeugen befassen. Denn eine ordentliche Nachsorge beginnt mit einer ausreichenden Kenntnis der Ausgangssituation. Und sich mühsam in jede Quellcode-Zeile einzulesen ist weitaus zeitintensiver, als die Benutzung dieser beiden nützlichen Tools. Viel Spass und Frohe Ostern
Microsoft Dynamics CRM 4.0 | Ansicht aller Firmen, denen kein Kontakt zugewiesen wurde
Auslöser für den heutigen Artikel ist eine Frage aus der mscrm-community. Und da mir diese Frage schon häufiger begegnet ist, sei an dieser Stelle einmal eine Antwort gegeben: Die Fragestellung: “Ist es möglich eine Ansicht zu generieren, in der alle Fírmen angezeigt werden, denen kein Kontakt zugeordnet ist?”
Die Antwort: “Ohne Programmierung / Anpassung ist dieses Szenario mit “Boardmitteln” nur bedingt zu lösen.”
Ich danke Greg Owens und übersetze aus dem engl. Original-Beitrag: Lösungsweg 1.) Zunächst erstellen wir uns mit einer Erweiterten Suche eine Ansicht aller Firmen (Anmerkung: Ich verwende z.B. die Filtereinstellungen “Status = aktiv” und “Firmenname enthält Daten”). Danach lasse ich mir die Suchtreffer ausgeben. 2.) Die Ergebnisliste exportiere ich nach Excel und wähle “Dynamische Tabelle” (Anmerkung: via “Spalten bearb.” kann ich mir noch diverse Zusatzinformationen ausgeben lassen, die mir eine nachträgliche Bearbeitung der Datensätze erleichtert) 3.) Nachdem die Ergebnisliste in Excel geöffnet ist, stelle ich den Mauszeiger irgendwo in die Ergebnisliste und klicke die rechte Maustaste. 4.) Aus dem Kontext-Menü wähle ich “Abfrage bearbeiten” 5.) Es erscheint die Standard-Warnung “Diese Abfrage kann mit dem Abfrage-Assistenten nicht bearbeitet werden.” – ich wähle trotzdem ok ;-) 6.) Im Microsoft Query-Fenster wähle ich den Button “SQL” aus, um mir die hinter meiner Ergebnisliste liegende Abfrage in SQL ansehen zu können. 7.) Eure SQL-Anweisung könnte wie folg aussehen: 1: select top 10000 account0.name as 'name' 2: account0.primarycontactidname as 'primarycontactidname', 3: account0.telephone1 as 'telephone1', account0.accountid as 4: 'accountid' from FilteredAccount as account0 where 5: (account0.statecode = 0 and account0.name is not null) order by 6: account0.name asc, account0.accountid asc
8.) In Zeile 5 setzen wir nunmehr bei dem in Klammern stehenden Ausdruck an und ergänzen mit 1: AND 0 = ( 2: SELECT COUNT(*) 3: FROM dbo.FilteredContact AS contact 4: WHERE contact.parentcustomerid = account.accountid 5: AND contact.statuscode = 1 6: )9.) Eure SQL-Anweisung sollte also nunmehr wie u.g. aussehen: 1: select top 10000 account0.name as 'name', 2: account0.primarycontactidname as 'primarycontactidname', 3: account0.telephone1 as 'telephone1', account0.accountid as 4: 'accountid' from FilteredAccount as account0 where 5: (account0.statecode = 0 and account0.name ist not null 6: and 0 = (select count(*) from dbo.FilteredContact as contact 7: where contact.parentcustomerid = account0.accountid 8: and contact.statuscode = 1 )) order by account0.name asc, 9: account0.accountid asc10.) Bestätigt die Anweisung mit Ok. Es erscheint eine Warnmeldung “Eine SQL-Abfrage kann nicht grafisch dargestellt werden. Möchten Sie den Vorgang fortsetzen? 11.) Bestätigt mit Ok. Ihr seid nun wieder in dem Microsoft Query Fenster. 12.) Schließt Microsoft Query und kehrt zurück zu Microsoft Excel. Es werden nur noch Datensätze angezeigt, die der Abfrage entsprechen. Fertig !
Ich wünsche viel Spass in der Umsetzung. Meinerseits baue ich gleiche SQL-Abfrage in eine aspx-Grid-Seite, die dem Layout von Microsoft Dynamics CRM entspricht und integriere diese ISV-Lösung via Sitemap. Alle hierfür erforderlichen Lösungsbausteine finden sich im SDK beschrieben.
Microsoft Dynamics CRM 4.0 | IE 8.0 (Erfahrungsberichte)
seit 19.03. verfügbar: Microsoft Internet Explorer 8.0 – schon die Beta-Phase habe ich aufmerksam im Hinblick auf die Unterstützung von Microsoft Dynamics CRM verfolgt. Die erste Aufgabe bestand daher in den letzten Tagen mit der Live-Version die Unterstützung / Kompatibilität noch einmal komplett unter die Lupe zu nehmen. Positiv: Die Ladezeiten der CRM Seiten haben sich merklich verbessert. Und das gilt nicht nur für die Standard-Installation von Microsoft Dynamics CRM, sondern auch für angepasste (div. JScript, teilweise mit WebService-Calls oder auch DOM-Nutzung zur Manipulation der Darstellung) Seiten. Und was der Anwender / die Anwenderin optisch wahrnimmt, konnte ich auch mit dem Fiddler2-Tool belegen. Die Ladezeitmessung hat eine Verbesserung vom Startwert 20sec. auf 6sec.(!) belegt. Wie auch von auf anderen Blog zu lesen (z.B. http://blog.customereffective.com/blog/2009/03/three-reasons-why-any-microsoft-dynamics-crm-40-user-should-love-ie-8.html) kann man die Installation von Internet-Explorer 8 hinsichtlich der angesprochenen Punkte empfehlen.
Negativ: Bei der Prüfung diverser angepasster Kundensysteme ist mir aufgefallen, dass mit dem IE8 wohl erneute Anpassungen notwendig werden. So hatte Customer Effective auf Ihrem Blog unter “Scroll Bars Missing From Web Sites Linked From Microsoft CRM Sitemap” berichtet, dass zum Aufruf von externen Seiten via CRM-Sitemap in 4.0 ein anderer Weg als in 3.0 gegangen werden muss. Wer diese Anpassung getätigt hat, der wird nach Installation von IE8 die Scrollbar erneut vermissen. Hier ist also noch einmal eine Anpassung erforderlich, damit via CRM Sitemap erneut externe Seiten korrekt mit Scrollbar(s) angezeigt werden.
Wer mit Hilfe von JScript “OnLoad” Navigationselemente beeinflusst hat, der wird feststellen, dass mit dem neuen IE8 diese kurzzeitig sichtbar sind, bevor das OnLoad-Script “Wirkung” zeigt, und z.B. einige Elemente ausgeblendet werden.
Alles in allem überwiegen die positiven Aspekte nach der Installation von IE8. Über diesen Artikel werde ich Euch über weitere Erfahrungen im Zusammenhang mit IE8 + Microsoft Dynamics CRM auf dem Laufenden halten. Ich wünsche Euch viel Spass mit der neuen Version ;-)
Microsoft Dynamics CRM 4.0 | Update Rollup 3 verfügbar
Seit dem 12.03. ist das Update Rollup 3 verfügbar, wie auch auf dem Microsoft Dynamics CRM Team Blog ersichtlich. Besonders darauf hinweisen darf ich, dass auf uns “gehört” wurde und die web.config-Datei nicht mehr automatisch angepasst/überschrieben wird. D.h. aber auch, dass wir diese ggfs. manuell anpassen müssen, wenn wir im KB-Artikel dazu aufgefordert werden. Weiterhin sind in Update Rollup 3 wieder einige Funktionen, die nur dann “arbeiten”, wenn sie manuell aktiviert wurden. Dies Aktivierungshinweise findet Ihr hier. Ich empfehle aus diesem Artikel auch den Abschnitt “Hotfixes, die als individuelle Fixes gelöst wurden” zu beachten. Hier finden sich: 953821 (http://support.microsoft.com/kb/953821/ ) A workflow is unexpectedly triggered when you update a record that has a duplicate record in Microsoft Dynamics CRM 4.0 957966 (http://support.microsoft.com/kb/957966/ ) You cannot export a record to an Excel worksheet if you use a dynamic option in Microsoft Dynamics CRM 4.0 957975 (http://support.microsoft.com/kb/957975/ ) Microsoft Dynamics CRM 4.0 processes a decimal value incorrectly when you run a workflow 951909 (http://support.microsoft.com/kb/951909/ ) Error message when you try to import a customization to another Microsoft Dynamics CRM 4.0 server: "Invalid name prefix" 966331 (http://support.microsoft.com/kb/966331/ ) You can assign a case from one queue to another in Microsoft Dynamics CRM 4.0 regardless of your security role privileges 968135 (http://support.microsoft.com/kb/968135/ ) Error message when you try to import a workflow rule in the Turkish version of Microsoft Dynamics CRM 4.0: "System.Data.SqlClient.SqlException: Invalid column name 'isCrmUIWorkflow'"
KB 953821, 957966 und 966331 musste ich schon auf deutschsprachigen Systemen installieren, um die aufgetretenen Symptome zu beseitigen. Ein Fehler, der im Übrigen immer noch nicht behoben zu sein scheint, ist die nicht korrekte Namenswiedergabe eines umbenannten Attributes auf der Maske. Jedenfalls existiert bei mir auch nach Einspielung des Update Rollup 3 dieser “Fehler” noch und es greift hier nur der “Workaround” das Attribut direkt umzubenennen, um das Bezeichner-Feld auch auf der Maske zu verändern.
Viel Spass
Microsoft Dynamics CRM 4.0 | Geocoding (WebService) / Check von Adressinformationen
ich werde in meinen Projekten immer wieder gefragt, ob es möglich ist, bei der Angabe von PLZ, Straßennamen, etc. eine gleichzeitige Prüfung vorzunehmen bzw. bei Angabe von PLZ z.B. die möglichen Ortsangaben vorgeschlagen zu bekommen.
Im SDK findet sich ein Artikel, wie man von einer CRM-Form aus per Code einen externen WebService "befragen" kann und die Antwort auswertet. Dieses Szenario lässt sich natürlich auch auf einen Geocoding-WebService anwenden. Diverse Beispiele finden sich bereits im WWW mit der Einbindung von GoogleMaps oder auch von Windows LiveMaps, etc., um z.B. eine Routenberechnung für Außendienstmitarbeiter direkt zum Kunden auf der CRM Form anzeigen zu lassen. Will man hingegen Adressinformationen prüfen, so gilt es zunächst einmal einen WebService zu ermitteln, der a) einen entsprechenden Online-Service bietet, b) den preislichen Rahmenbedingungen "Stand halten" kann, c) möglichst aktuelle Daten zurückliefert, auf deren Basis sich aufbauen lässt. Ein Beispiel ist http://www.geonames.org Ein Aufruf von http://ws.geonames.org/postalCodeSearch?postalcode=<EURE Postleitzahl>&maxRows=10 sollte Euch z.B. ein XML-Dokument zurück liefern. Nun benötigt man nur noch einen "Antworten-Interpreter", etwas AJAX-JSCRIPT Code (um z.B. eine Auswahlliste möglicher Ortsangaben auf der CRM-Form anzeigen zu lassen und fertig...
Um eine Autovorschlagsliste bei der Eingabe von Feldinformationen zu bekommen, hilft Euch der Artikel von Joris Kalz auf seinem Blog http://blogs.msdn.com/joris_kalz/archive/2006/07/14/666225.aspx. Unterhalb des Artikels, finden sich auch alle wichtigen Links zu diesem Thema um weitere Informationen zu erhalten.
Microsoft Dynamics CRM 4.0 | Drag & Drop aus IE-Seiten direkt in das CRM Formular (Fehler Schnellsuche)
Jeder von uns kennt die Schnellsuche in Firmen, Kontakten, Interessenten und anderen Entitäten. Wir sind es gewohnt, hier einen Suchbegriff einzugeben und eine Suchtrefferliste angezeigt zu bekommen. Doch heute hatte ich das Phänomen, dass mir nach einem bestimmten Suchbegriff mit * vorweg oder auch ohne keine Suchtreffer ausgegeben wurden. Ich bekam nur das obligatorische Fenster "Wenden Sie sich an Ihren Systemadministrator..." Nun gibt es in der Firmenansicht ja auch noch das A - Z Register (unterer Bildrand). Ich klickte auf A - alle Kontakte mit A wurden angezeigt, ich klickte auf E - hoppla eine CRM Fehlermeldung "Wenden Sie sich an Ihren Systemadministrator...". Wo waren all meine Firmen mit E hin? Erst ein Blick in die SQL - Datenbank half, meinem Problem auf die Schliche zu kommen. Dort finden sich die GUIDs. Mit Hilfe der URL http://<server name>/<org name>/SFA/accts/edit.aspx?id={GUID}# war es mir also möglich, die Datensätze noch einmal in der CRM Form anzeigen zu lassen. Ich entdeckte in dem Feld Postleitzahl zwei Zeichen, die da nicht hingehörten. Es waren CR (CarriageReturn)-Zeichen. Doch wie war es möglich einen Datensatz so zu speichern? In CRM sind die Postleitzahlenfelder char-Felder, um auch ausländische Postleitzahlen (z.B. England) erfassen zu können. Offensichtlich ist ein CR-Zeichen hier ein gültiges Zeichen (auch, wenn es im Nachgang einen Fehler in der Anwendung verursacht). Erzeugt wurde das Zeichen, da aus dem IE bei der Dateneingabe die Drag & Drop-Funktion genutzt wurde, um vom Impressum des Kunden den Eintrag direkt in die CRM Form zu ziehen. Nun war die Impressum-Seite der Firma so aufgebaut, dass sich hinter der Postleitzahl zwei nicht angezeigte CR-Zeichen befanden (Erst durch Einsicht in den Quellcode der Seite ersichtlich). Diese wurden durch Drag & Drop in das Postleitzahlenfeld übertragen und der Datensatz anschließend gespeichert. Nachdem ich die Zeichen gelöscht hatte, funktionierte a) die Schnellsuche wieder und b) auch der Aufruf aus dem A - Z Register (hier Buchstabe E) brachte mir wieder alle Firmen mit E zur Anzeige
Fazit: Achtet bei der Dateneingabe unbedingt darauf, dass Ihr keine CR-Zeichen versehentlich in die char-Felder kopiert. Lediglich ntext (z.B. das Beschreibungsfeld) kann mit derartigen Zeichen umgehen.
Microsoft Dynamics CRM 4.0 | Importe via 3rd Party-Tool und Ihre Tücken
aus der Praxis erneut ein Beispiel - Ich hatte folgendes Fehlerbild, das es zu beheben galt: Ein simpler Workflow, der ein Update zweier Attribute auf der Firmenmaske durchführen sollte, wurde nicht ausgeführt. Der Blick ins Eventlog verriet mir einen Fehler im Asynchronen Verarbeitungsdienst
Eine Prüfung des Dienstes bestätigte mir, dass der Dienst nicht gestartet war. Den Dienst also neu gestartet, doch schon nach kurzer Zeit hatte ich erneut die Fehlermeldung und der Dienst war angehalten. Zunächst untersuchte ich den Workflow auf mögliche Fehler, doch hier war nichts zu finden - wie auch, bei einem wirklich simplen "Überprüfung durchführen - Datensatz aktualisieren". Die Suche ging also weiter. Bei dem System werden Fremddaten via 3rd Party-Tool importiert. Ich schaute mir daher die Daten im SQL - Server an. Jeder Datensatz hatte eine GUID vergeben bekommen, dennoch musste irgendwo ein Fehler sein. Ein Blick auf die Import-Regeln bestätigte mir dann, dass ein Attribut (auf der CRM Form ist dies ein Pflichtfeld und der Datensatz kann nicht gespeichert werden, ohne dass hier ein Wert hinterlegt wird), keinen Wert zugewiesen bekam. Trotzdem wurde der Datensatz erstellt. D.h. das Tool arbeitet hier via SDK mit Hilfe des Create-Befehls (WebService) und erstellte mir "korrupte Datensätze". Erst nachdem ich diese Datensätze allesamt aus dem System entfernt hatte, ließ sich der Asynchrone Verarbeitungsdienst starten - und blieb auch gestartet und die in der Pipeline befindlichen Workflows wurden abgearbeitet. Fazit: Bei der Erstellung von Datensätzen via SDK / WebService darauf achten, dass wirklich alle Pflichtfelder mit gültigen Werten versorgt werden, um keine "korrupten Datensätze" im System verweilen zu lassen.
Microsoft Dynamics CRM 4.0 | AsyncOperationBase - Tabelle
Nachdem Update Rollup 2 sich proaktiv um das Anwachsen dieser Tabelle durch "Workflow Expansion Tasks" kümmert, gilt es vor allem die Daten der Vergangenheit möglichst schnell zu bereinigen. Ein sicheres Anzeichen dafür, dass diese Tabelle bereits eine gewisse Größe angenommen hat, ist die Tatsache, dass sich bei dem Versuch, sich im Einstellungsbereich unter Systemaufträgen diese ansehen zu wollen, der SQL Server mit einem TimeOut reagiert und der User nur bei eingeschalteten Dev-Errors, diesen TimeOut auch angezeigt bekommt. Noch gravierender wirkt sich die Größe dieser Tabelle auf die allgemeine Performance des CRM-Systems aus. "Je schlanker, desto performanter" - so das Motto. Doch wie bereinigt man diese Tabelle, wenn die Abfrage: 1: Select Count(*) from AsyncoperationBase Where OperationType = 1 AND StateCode = 3 AND StatusCode = 30 schon über 100.000 Datensätze zurückliefert? Hierzu darf ich auf zwei für mich wertvolle Blog-Einträge verweisen: http://blogs.msdn.com/benlec/archive/2009/01/20/deadlocks-performance-issues-mscrm-database-growth-asyncoperationbase-table-increase.aspx bzw. Ich hoffe, dass damit so manchem Administrator "die Kopfschmerzen" genommen sind.
Microsoft Dynamics CRM 4.0 | Update Rollup2 (Installationserfahrungen)
Nachdem das Update Rollup2 verfügbar ist, kann ich gleich mehrere Erfahrungen weitergeben. Zunächst leicht zu überlesen: Hotfixes und Aktualisierungen, die Sie aktivieren oder manuell konfigurieren müssen ! Dieser Abschnitt enthält verweise auf zusätzliche KB-Artikel, in denen beschrieben wird, das es z.B. einiger Registry-Key-Einträgen oder -Änderungen bedarf, um diese Hotfixes zu aktivieren und von Ihnen zu profitieren.
Ebenfalls leicht im Text zu überlesen: Nachdem Sie Update 959209 installieren, können Sie XAML-Workflow nicht veröffentlichen. Aktualisieren Sie 959209 Weitere Informationen, erhalten Sie Weitere Informationen, indem auf die folgende Artikelanzahl klickt um den Artikel der Microsoft Knowledge Base zu lesen: 959209 (http://support.microsoft.com/kb/959209/ ) Ein Update für das Service Pack 1 .NET-Framework 3.5 ist verfügbar
Diese Updates eingespielt, beheben jedoch nicht zwingend die Probleme mit der Veröffentlichung von Workflows, wie wir erfahren durften. Mittlerweile findet sich auf dem Microsoft Dynamics CRM Team Blog auch hierzu ein Artikel. Besonders interessant dabei der Kommentar von Corey. Hier heißt es: Sofern die web.config Datei vorab der Einspielung des Update Rollups verändert wurde, so kann es bei der Veröffentlichung von Workflows zu Problemen kommen. Und in der Tat erhielt ich nur eine Fehlermeldung, dass der Workflow angeblich nicht korrekt gespeichert werden konnte und ich "mein Glück" später noch einmal versuchen sollte. Es ließen sich jedoch auch alte Workflows nicht veröffentlichen. Ursache: Die web.config Datei gilt bereits als angepasst, sofern man zuvor einmal die DevErrors eingeschaltet hatte. Behebung: Öffnet die web.config-Datei mit einem Editor, sucht den Abschnitt <authorizedTypes> Es folgen dann mehrfache Typbeschreibungen. Ergänzen müsst Ihr folgenden Eintrag: <authorizedType Assembly="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Namespace="System.Globalization" TypeName="CultureInfo" Authorized="True"/>
Danach die Internetinformationsdienste mit einem "iisreset" neu starten und die Workflows lassen sich auch wieder ordnungsgemäß veröffentlichen.
Ein weiteres bislang noch ungelöstes Problem ist die falsche Anzeige des Dialogs beim Exportieren von Anpassungen. Der Dialogtext wird zumindest, was das deutsche Update Rollup 2 anbelangt falsch angezeigt. Scheinbar waren die Übersetzer hier nicht ganz korrekt am Werk.
Und weiterhin ist mir aufgefallen, dass bei Benutzerdefinierten Entitäten im Nachgang die Änderung eines Label-Textes nicht korrekt abgespeichert wird. Sobald man die Änderungen speichert, wird der original-Bezeichner aus dem Attribut wieder hergestellt.
UPDATE: Mit der Version 2 (v2) des Update Rollup2 ist der Dialogtext beim Export von Anpassungen wieder korrekt und nicht mehr verschlüsselt. Des Weiteren wurde der web.config-Bug behoben.
Microsoft Dynamics CRM 4.0 | Installation auf mehreren Servern (Zusatztipp)
In dem aktuellen Implementation Guide wird unter anderem auch beschrieben, wie eine Installation mehrerer Server unter Nutzung eines NLB (Network Load Balancers) erfolgen kann. Dabei heißt es in dem Abschnitt "Install Microsoft Dynamics CRM 4.0 Server on Multiple Computers - Step 4: Update the configuration database to address the NLB cluster": Run the following update statement against the configuration (MSCRM_CONFIG) database. · Update DeploymentProperties set NVarCharColumn = 'crmcluster.contoso.com' where ColumnName = 'ADsdkRootDomain' · Update DeploymentProperties set NVarCharColumn = 'crmcluster.contoso.com' where ColumnName 'ADWebApplicationRootDomain' Damit jedoch nicht genug. Denn wer diese beiden Updates durchführen wird, der wird zwar seine Microsoft Dynamics CRM 4.0 Homepage über die Cluster-Adresse aufrufen können, jedoch bedarf es noch weiterer Anpassungen am System. So habe ich festgestellt, dass ebenfalls · Update DeploymentProperties set NVarCharColumn = 'crmcluster.contoso.com' where ColumnName '<AsyncSdkRootDomain>' durchgeführt werden sollte, damit auch wieder der Aufruf von http://<server-url>:<Port>/sdk/list.aspx möglich wird. Sofern man nämlich das letzte Update in der MSCRM_Config-Datenbank vergisst, bekommt man eine Zugriffsverletzung beim Aufruf der Details zu einzelnen Entitäten. Selbstverständlich empfehle ich vor derartigen Updates an der Konfigurationsdatenbank eine Sicherung der Datenbank vorzunehmen.
Weitere Anpassungen müssen dann jedoch noch über das FrontEnd erfolgen. Wer in der Sitemap bislang mit seiner ursprünglichen Server-URL gearbeitet hat und jetzt auf eine Cluster-URL umgestiegen ist, der muss natürlich auch in der Sitemap seine Server-URL entsprechend anpassen. Doch damit nicht genug. Gern wird eine Entität bei der Anpassung übersehen: Die Entität Vorlagen ! Auch hier sind Server-URLs angegeben, die entsprechend angepasst werden müssen. Andernfalls erhält beispielsweise jemand bei der Durchführung einer Dublettenprüfung mit anschließender E-Mail-Benachrichtigung eine E-Mail, in der eine Server-URL angegeben ist, die unter Umständen nicht mehr aufgelöst werden kann. Also: Auch diese Entität exportieren und mit einem Editor seiner Wahl entsprechend in den URLs anpassen. Anschließend wieder importieren und natürlich die Veröffentlichung nicht vergessen.
|
|
|