Skip to content

Tag: Solution

“Get attribute by attribute ID” bookmarklet

Posted in Dynamics 365

Background information

Currently, I have a problem while applying a solution upgrade for our managed solution. The message in the solution history gives me the name of the attribute that blocks the uninstallation and its ID, but it did not tell me to which entity the attribute belongs.

Get attribute by attribute ID

To identify the right entity for the attribute professionally and not by trail and error, I looked into the “Query table definitions using the Web API” article on Microsoft Docs and build a browser bookmarklet for an easier use.

The “Get attribute by attribute ID” bookmarket

Copy and paste the following code as URL of a bookmark in your browser and execute it on any D365 page.

javascript:function getDet(){var r=JSON.parse(this.responseText);console.info("MetaData for Entity: " + r.LogicalName);console.dir(r);console.info("MetaData for Attribute: " + r.Attributes[0].LogicalName);console.dir(r.Attributes[0])};function getAtt(){var r=JSON.parse(this.responseText).value,etn,atn;for (let i=0; i < r.length; i++) {if (r[i].Attributes.length > 0) {Xrm.Navigation.openAlertDialog({confirmButtonLabel:"Close",text:"Entity: "+r[i].LogicalName+"\nAttribute: "+r[i].Attributes[0].LogicalName+"\n-\nOpen Browser Console for more MetaData Details (F12)",title:"Found Attribute"},{height:250,width:350});var oReq=new XMLHttpRequest();oReq.addEventListener("load", getDet);oReq.open("GET","/api/data/v9.0/EntityDefinitions(LogicalName='"+r[i].LogicalName+"')?$expand=Attributes($filter=MetadataId%20eq%20"+id+")");oReq.send();break;}}}id=prompt("Enter Attribute ID", "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");var oReq=new XMLHttpRequest();oReq.addEventListener("load", getAtt);oReq.open("GET","api/data/v9.0/EntityDefinitions()?$select=LogicalName&$expand=Attributes($select=LogicalName;$filter=MetadataId%20eq%20"+id+")");oReq.send();

You can paste the attribute ID and receive the logical name of the attribute and of its entity. On top, you can open the browser console to inspect the full output of the WebApi for the attribute.

Entfernen von E-Mail Anlagen aus Dynamics CRM

Posted in Dynamics 365, and Power Platform

Neulich kam von einem Kunden die Anforderung Speicherplatz in Dynamics CRM Online wieder freizugeben da die 5 Gigabyte beinahe erschöpft waren. Ich empfahl dem Kunden den Artikel “10 Methoden zum Freigeben von Speicherplatz in Microsoft Dynamics CRM Online” aus dem Microsoft Dynamics CRM Online-Resourcencenter.
Bei Methode 3 – “Entfernen von E-Mail Anlagen aus Dynamics CRM Online mithilfe der erweiterten Suche” kommt man nach dieser Anleitung jedoch nicht weiter und deshalb widme ich mir dieser Problematik an und stelle eine bessere Lösung vor.

Lösungsversuch nach Anleitung

  1. Klicken Sie auf Erweiterte Suche.
  2. Wählen Sie in der Liste Suchen nach die Option E-Mail-Nachrichten aus.
  3. Fügen Sie im Suchkriterien-Bereich Kriterien hinzu, die mit den folgenden vergleichbar sind:
    E-Mail-Anlagen (Element)
    Dateigröße (Bytes) – Ist größer als – Geben Sie im Textfeld einen Byte-Wert ein, beispielsweise “25000”.
  4. Klicken Sie auf Suchen.
  5. Sie verfügen jetzt über eine Liste von E-Mails mit Anlagen, die größer als “X” Bytes sind.
  6. Sie können jede E-Mail öffnen, auf die Registerkarte Anlagen klicken und jede gewünschte Anlage löschen.


Schritte 1 – 5 erledigt sieht so aus.

Öffnet man eine E-Mail aus der Suchergebnissen und wechselt in die “E-Mail Anlagen” Registerkarte stellt man fest dass man keine Option zum löschen der Anlage vorfindet. Das liegt daran dass die E-Mail bereits abgeschlossen ist, also gesendet oder empfangen ist.

Über einen Workflow könnte man den Status der gefundenen E-Mail Nachrichten ändern, dann einzeln pro E-Mail die Anlagen löschen und mit einem weiteren Workflow die E-Mails wieder als gesendet oder empfangen schließen. Mit dieser Methode könntet ihr einige Stunden nur für das Entfernen von E-Mail Anlagen aus Dynamics CRM verbringen.

Bessere Lösung zum entfernen von E-Mail Anlagen aus Dynamics CRM

Jason Lattimer hat dieses Problem erkannt und eine Option zum Löschen von E-Mail Anlagen in seine “Internal Email Helpers” Solution integriert. Diese steht kostenlos auf CodePlex zur Verfügung und einfach in Dynamics CRM Online importiert werden.

Nach der Import der Lösung erstellt man einen Workflow für die Entität “E-Mail”. Setzt die Ausführung auf “bedarfsabhängig” und entfernt das Häkchen für “Starten bei: Datensatz wird erstellt”, es sei denn ihr möchtet grundsätzlich für alle neuen E-Mails die Anlagen entfernen. Dazu würde ich aber die Systemeinstellungen empfehlen da so die Anwender direkt eine Information von Outlook bekommen dass Ihre Anlagen nicht mit der E-Mail zu CRM hochgeladen wurden.

Fügt dem Workflow folgenden Schritt hinzu:

Legt die Eigenschaften so fest und aktiviert anschließend den Workflow.

Mit diesem Workflow kann man massenhaft Anlagen löschen ohne vorher eine erweiterte Suche erstellen zu müssen, den Status der gefundenen E-Mails mehrfach ändern zu müssen und ohne jede E-Mail einzeln anfassen zu müssen. Zusätzlich wird in den Notizen der E-Mail ein Hinweis mit Namen der gelöschten Datei hinterlassen.
In der Praxis könntet ihr beispielsweise für die Anwender eine Ansicht mit Ihren E-Mails mit Anlagen über 2,5 MB erstellen, so dass jeder seine Anlagen checken kann bevor ihr mit Workflow die Anlagen entfernt.