Tag Archives: crm2011

Dynamics CRM API: E-Mail mit attachment versenden

Eine E-Mail mit Attachment versenden. Wie geht das?
Eigentlich ist es ganz einfach. Vorausgesetzt man weiss über das Folgende Bescheid:

  • Attachments sind eine eigene Entität Namens “ActivityMimeAttachment”
  • Attachments werden den E-Mails über eine 1:n Beziehung angehängt
  • Als erstes muss das E-Mail im CRM erstellt werden
  • E-Mail erstellen != E-Mail senden

Im Post von letzter Woche habe ich gezeigt wie sich ein E-Mail von einem Template erstellen lässt. Dieser Post hier baut darauf auf und geht davon aus, dass bereits eine E-Mail im CRM existiert (E-Mail Activity wurde erstellt aber noch nicht gesendet). Nun soll dieser E-Mail Attachment angehängt werden. Schlussendlich soll die E-Mail versendet werden.

  1. Hinzufügen eines Attachments
    Der Code ist simpel und spricht für sich alleine.
private void AddAttachment(Email email, string fileName, string mimeType, byte[] content)
{
    var activityMimeAttachment = new ActivityMimeAttachment
    {
        FileName = fileName,
        Body = Convert.ToBase64String(content),
        MimeType = mimeType,
        ObjectTypeCode = email.EntityLogicalName,
        ObjectId = email.ToEntityReference()
    };

    organizationService.Create(activityMimeAttachment);
}
  1. Senden der E-Mail
private void SendEmail(Guid emailId)
{
    var reqSendEmail = new SendEmailRequest
    {
        EmailId = emailId,
        TrackingToken = string.Empty,
        IssueSend = true
    };

    organizationService.Execute(reqSendEmail);
}

Plug-In auf Close Message eines Incidents – wo ist die Incident Id?

Wird ein Plug-In auf die “Close” Message eines Incidents registriert, wird das Plug-In gefeuert, sobald der Incident geschlossen wird. Die “PrimaryEntityId” des “IPluginExecutionContext” ist jedoch leer (Guid.Empty). Wie erhalte ich die Id des Incidents? Die Id des Incidents, welches die “Close” Message ausgelöst hat erhält man wie folgt:

var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
var incidentResolutionEntity = (Entity)context.InputParameters["IncidentResolution"];
Guid incidentId = ((EntityReference)incidentResolutionEntity.Attributes["incidentid"]).Id;

Reliable Import Job für CRM mit Azure und MVC WebAPI

Beim AaaS für Dynamics CRM hat man (verständlicherweise) mit einigen Limitationen zu kämpfen. Das wird gerade bei Enterprise Szenarien schmerzlich bewusst. Wenn zum Beispiel die folgende Anforderung gegeben ist “Jede halbe Stunde soll ein SAP Import laufen. Der SAP Import liefert jeweils viele Daten und die in das CRM zu schreiben dauert min. 10 Minuten. Hier stellt es gleich an zwei Stellen an. Erstens die  infinite loop prevention (siehe Post “Dynamics CRM, Recurring Workflows und die Execution Depth”) und zweitens das Sandbox Timeout. Das Problem lässt sich also nicht oder nur umständlich mit Workflows lösen. Da kommt Azure ins Spiel.

Continue reading

CRM Online Plugin auf Azure ausführen – Part 4

Nach den Beiträgen “CRM Online Plugin auf Azure ausführen – Part 1, 2 und 3“, folgt nun der Beitrag “CRM Online Plugin auf Azure ausführen – Part 4” wo es ans eingemachte geht. Ich durfte in einem Projekt eine Workflow Activity auf Azure auslagern. Es war nicht sonderlich schwer aber trotzdem gab es das eine oder andere was ich gelernt habe. Continue reading

CRM Online Plugin auf Azure ausführen – Part 3

Im Post “CRM Online Plugin auf Azure ausführen – Part 1” und “CRM Online Plugin auf Azure ausführen – Part 2” habe ich gezeigt wie man den ExecutionContext von Plugins auf den Azure Service Bus posten und mit einer WorkerRole abarbeiten kann. Somit lässt sich ein Plugin auslagern um z.B. die Sandbox-Restriktionen zu umgehen oder rechenintensive Aufgaben zu skalieren.

In diesem Post geht es um die Kosten.
Continue reading

CRM Online Plugin auf Azure ausführen – Part 2

Im Post “CRM Online Plugin auf Azure ausführen – Part 1” habe ich gezeigt wie man den ExecutionContext von Plugins auf den Azure Service Bus posten kann.
Als Konsumenten habe ich eine lokale Konsolen-Applikation verwendet.
Nun wäre natürlich das Ziel, alles in der Cloud laufen zu lassen.
In diesem Post zeige ich, wie man eine Azure Worker Role erstellt und den Listener bzw. das Plugin dort hosten kann.
Continue reading

CRM Online Plugin auf Azure ausführen – Part 1

Die Restriktionen für Plugins und Custom Workflow-Activities auf CRM Online sind zum Teil sehr ärgerlich. Nicht zuletzt deshalb wäre es eine gute Sache, könnte man Plugins ausserhalb des CRMs laufen lassen. In diesem Blogpost zeige ich wie man das CRM dazu bringt den ExecutionContext eines Plugins auf den Azure Service Bus zu posten und wie sich diese Message mit den CRM SDK Samples konsumieren lässt.
Continue reading

Activity Feed Solution für > UR10

Auf PointPoint ist nur die Version 1.0.1 der Activity Feed Solution verfügbar.
Ist die Solution auf einem Mandanten installiert und das UR12 oder höher wird installiert sollte das Update automatisch stattfinden.
Es gibt jedoch Fälle wo die neue Version (Die alte ist nicht Crossbrowser kompatibel) von Hand deployt werden muss.

Wie komme ich an dieser Version?

Das UR12 liefert die Solution in der Version 1.0.3 mit.
1. Lade das UR12 bei MS herunter und öffne die Exe mit 7-zip.
2. Extrahiere “CRM2011-Server-KB2849744-ENU-amd64.exe” und öffne auch das mit 7-zip.
3. Extrahiere “activityfeeds.cab” und installiere “activityfeeds.cab” im CRM.