In Workflow erstellte Email öffnen

9. Januar 2013 17:58

Hallo,

ich habe gleich mehrere Probleme bezüglich eines Geschäftsprozesses:
Über einen eigenen Button wird Javascript aufgerufen aus dem ein Workflow gestartet wird.
Dieser Workflow startet dann ein Plugin in dem eine Email mit Anhang erzeugt wird.
Diese Mail soll danach automatisch geöffnet werden.

Da der Workflow asynchron läuft, vermute ich dass dies hier nicht möglich ist.
Könnte ich mir von meinem Workflow die ID der erstellten Mail an meinen aufrufenden JS Code zurückgeben lassen und dort einfach die Mail senden?

Zu meinen offnenen Punkten
1. Ich habe mehrere Beispiele gefunden wie man sich von einem in JS aufgerufenen Workflow Werte zurückgeben lassen kann. Bei diesen ist bei mir jedoch der Rückgabewert jedoch immer null. Hat jemand einen Link/funktionierendes Beispiel?

2. Wird dann in JS auf das Beenden des WF gewartet?

LG Flg

Re: In Workflow erstellte Email öffnen

10. Januar 2013 09:14

Hallo,

und erst einmal herzlich willkommen in unserem Forum :-)

Das hast du richtig erkannt. Ein Workflow läuft immer asynchron und hat auch keine Informationen darüber, wer ihn aufgerufen hat, somit kannst du auch deinem JavaScript keine GUID der Email zurückliefern.

Mich würden deine Beispiele interessieren, wie ein asynchroner Workflow etwas an das aufrufende Script zurückliefern soll. Soweit ich das kenne, ist dies nicht möglich.

Re: In Workflow erstellte Email öffnen

10. Januar 2013 09:41

Guten Morgen und vielen Dank :)

Hier der JS-Code

Code:
function CreateEmailWithAttachment()
{
try
{
var wId = getWorkflowId("EmailAttachment");
var IdNew = Xrm.Page.data.entity.getId();
var returnValue = ExecuteWorkflow(IdNew,wId);
}
catch (ex) {}
}

function getWorkflowId(workflowName) {
    var odataSelect = Xrm.Page.context.getServerUrl() + '/XRMServices/2011/OrganizationData.svc/WorkflowSet?$select=WorkflowId&$filter=StateCode/Value eq 1 and ParentWorkflowId/Id eq null and Name eq \'' + workflowName + '\'';

    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", odataSelect, false);
    xmlHttp.send();

    if (xmlHttp.status == 200) {
        var result = xmlHttp.responseText;

        var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(result);
       
        return xmlDoc.getElementsByTagName("d:WorkflowId")[0].childNodes[0].nodeValue;
    }
}



ExecuteWorkflow = function(entityId, workflowId){    var xml = "" +     "<?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\">" +     GenerateAuthenticationHeader() +    "  <soap:Body>" +     "    <Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +     "      <Request xsi:type=\"ExecuteWorkflowRequest\">" +     "        <EntityId>" + entityId + "</EntityId>" +     "        <WorkflowId>" + workflowId + "</WorkflowId>" +     "      </Request>" +     "    </Execute>" +     "  </soap:Body>" +     "</soap:Envelope>" +     "";    var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");    xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);    xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Execute");    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);    xmlHttpRequest.send(xml);    var resultXml = xmlHttpRequest.responseXML;    return(resultXml.xml);}


Diesen/ähnlichen Code habe ich mehrmals im Internet gefunden.
Leider ist returnValue aber immer null.

EDIT: Ich erhalte doch einen Rückgabewert vom Typ ExecuteWorkflowResponse, der die ID des asynchronen WF enthält. Gibt es eine Möglichkeit mit dieser ID an die Email zu kommen?