[gelöst] Workflow Emailadresse / Lookup automatisch füllen

4. Februar 2010 10:42

Hallo,

wir haben im Firmenstamm Kunden und Vetreter. Alle Kunden haben einen übergeordneten Vetreter.
Nun haben wir eine eigene Entität "tw-Bericht". Hier trägt der Chef, wenn er unterwegs ist seine Kundengespräche eine.
Sprich Datum, Kunde, Teilnehmer, Besprechungsinhalt etc.

Nun möchte ich einen Workflow erstellen, der beim Datensatzanlegen eine Email, an den Vertreter senden. Leider komme ich nicht an den Datensatzinfo ran. Es fehlt eine Verschachtelung.
1. übergeordneter Firma des tw-Berichts
2. übergeordneter Vertreter der Firma
3. Emailadresse der Vertreter-Firma

Ich glaube, dass dies so nicht möglich ist. Falls doch bitte schreiben!

Mein zweiter Weg wäre, man wählt den Kunden aus, und darunter ist ein weiteres Lookupfeld, wo sofort der Vetreter automatisch angezeigt wird. Dann kann ich im Workflow direkt darauf zugeifen und muss nicht erst vom Kunden zum Vertreter...

Danke
Zuletzt geändert von tw-elektric am 8. Februar 2010 12:51, insgesamt 3-mal geändert.

Re: Workflow Emailadresse / Lookup automatisch füllen

4. Februar 2010 11:00

Hallo,

direkt kommst du mit einem Workflow nicht an die eMail Adresse heran, das hst du richtig erkannt.

Es verbleiben die 2 Möglichkeiten.
1. erstellen eines Workflow PlugIns, was dir die Adresse besorgt oder
2. der von dir vorgeschlagene Weg mit dem Lookup, das über ein JavaScript den Vertreter pflegt. Das hat allerdings den Nachteil, das sich dieses Feld nicht automatisch ändert, wenn dem Kunden ein neuer Vertreter zugeordnet wird.

Ich würde die Variante 1 empfehlen.

Re: Workflow Emailadresse / Lookup automatisch füllen

4. Februar 2010 11:17

Okay, Variante 1 wäre mir auch lieber, da sich der Vetreter mit Sicherheit ab und zu ändern wird.
Wie ich ein eigener Workflow erstelle und ins CRM einbinde ist mir klar. Aber ich weiß nicht genau was der Wokflow anstellen muss, bzw. wie der Code aussehen muss.

Vor allem, wie Verknüpfe ich es dann so, dass ich eine Email versenden kann.

Hast du mir evtl. einen Link zu dieser Thematik?

Und falls ich nicht zurecht komme, auch einen für die zweite Möglichkeit?

Vielen Dank

Re: Workflow Emailadresse / Lookup automatisch füllen

4. Februar 2010 16:00

Hallo,

die erste Möglichkeit bedeutet, programmierung in c# bzw. vb .net. Es ist aber eine relativ kleine und einfache Anforderung.

Über JavaScript geht das nur mit Fetch-XML, da du ja über den Webdiesnt auf die CRM-Datenbank zugreifen musst.

Re: Workflow Emailadresse / Lookup automatisch füllen

4. Februar 2010 16:40

Hallo MIchael,

mit VB.NET was zu machen, denke ich, könnte ich hinbekommen.
Mein Problem ist nur, wenn ich z.B. in meinem Code nun die Emailadresse des Vertreters rausgefunden habe, was mache ich dann damit?
Wie gebe ich die weiter bzw. wie gebe ich den Wert zurück an das CRM?

Danke

Re: Workflow Emailadresse / Lookup automatisch füllen

5. Februar 2010 10:30

Hallo Michael,

ich versuche es eben mit Fetch XML.
Leider weiß ich nicht wo ich das Script einpacken soll. Es gibt ja nur ONLOAD und ONSAVE
Aber meine Code sollte ja ausgeführt werden, wenn die Firma ausgewählt wurde.

Wie mache ich das?

EDIT:

Ich habe es jetzt mal mit ONSAVE versucht. Leider bekomme ich wenn ich speichere unten gleich die Meldung "Fehler auf der Seite". Schwierig, so herauszufinden, wo der Fehler liegt.
Ich habe deinen geposten Code mal verwendet und das Feld angepasst. Sollte doch stimmen... Aber es kommt nicht mal meine TEST-Alert.

Code:
// Ermittelt die Firmennummer und Telephone1 der übergeordneten Firma im Kontakt

alert("test");

if (crmForm.all.new_parentcustomerid.DataValue != null)
{
   var myAccountId = crmForm.all.new_parentcustomerid.DataValue[0].id;

   // Define the SOAP XML to access Microsoft Dynamics CRM Web service.
   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>" +
   "    <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>account</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>accountnumber</q1:Attribute>" +
   "            <q1:Attribute>telephone1</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>accountid</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">myAccountId</q1:Value>" +
   "              </q1:Values>" +
   "            </q1:Condition>" +
   "          </q1:Conditions>" +
   "        </q1:Criteria>" +
   "      </query>" +
   "    </RetrieveMultiple>" +
   "  </soap:Body>" +
   "</soap:Envelope>";
   
   // Create an instance of an XMLHTTP object.
   var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
   
   // Configure the XMLHttp object for the
   // Microsoft CRM Web services.
   xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
   xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
   xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
   xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
   
   // Send the XMLHttp request.
   xmlHttpRequest.send(xml);
   
   if(xmlHttpRequest.status == 200)
   {
      // Capture the XMLHttp response in XML format.
      var resultXml = xmlHttpRequest.responseXML;

      var nodeNumber = resultXml.selectNodes("//q1:accountnumber");
      if (nodeNumber.length == 1)
      {
         //crmForm.all.Field1.DataValue = parseFloat(nodeNumber[0].text);
alert(parseFloat(nodeNumber[0].text));
      }
     
      var nodeTelephone = resultXml.selectNodes("//q1:telephone1");
      if (nodeTelephone.length == 1)
      {
         //crmForm.all.Field2.DataValue = parseFloat(nodeTelephone[0].text);
alert(parseFloat(parseFloat(nodeTelephone[0].text));
      }
   }
}

Re: Workflow Emailadresse / Lookup automatisch füllen

5. Februar 2010 16:42

Hallo,

OnSave ist falsch, du must es in das OnChange des Lookups mit deinem Vertreter packen, da sich ja der Wert ändern soll, wenn du einen anderen Vertreter auswählst.

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 09:11

michael sulz hat geschrieben:Hallo,

OnSave ist falsch, du must es in das OnChange des Lookups mit deinem Vertreter packen, da sich ja der Wert ändern soll, wenn du einen anderen Vertreter auswählst.


Danke, ich habe es nun in das OnChange des Lookups gemacht. Leider bekomme ich beim gleichen Code, wie gepost, wieder unten in der Statusleiste "Fehler auf der Seite"
Ich verstehe nicht, warum nicht mal das Test-Alert aufpopt?

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 09:16

Leider bekomme ich beim gleichen Code, wie gepost, wieder unten in der Statusleiste "Fehler auf der Seite"
Ich verstehe nicht, warum nicht mal das Test-Alert aufpopt?

Das ist ein eindeutiges Zeichen dafür, das im JavaScript ein Syntaxfehler ist. Ich gehe dann immer so vor, das ich erst einmal alles aus dem Script entferne und dann Stück für Stück die einzelnen Teile wieder einbaue.

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 11:18

Hallo Michael,

ich habe jetzt Schritt für Schritt durch getestet.
Ab
if(xmlHttpRequest.status == 200)
{
}

wird nichts mehr ausgeführt.
Das deutet doch darauf hin, das bei dem XML request nichts zurück kommt, oder?
Aber myAccountID habe ich getestet, hier ist die ID drin.
Hier der XML Code:
Code:
if (crmForm.all.new_parentcustomerid.DataValue != null)
{
   var myAccountId = crmForm.all.new_parentcustomerid.DataValue[0].id;

   // Define the SOAP XML to access Microsoft Dynamics CRM Web service.
   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>" +
   "    <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>account</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>accountnumber</q1:Attribute>" +
   "            <q1:Attribute>telephone1</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>accountid</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">" + myAccountId + "</q1:Value>" +
   "              </q1:Values>" +
   "            </q1:Condition>" +
   "          </q1:Conditions>" +
   "        </q1:Criteria>" +
   "      </query>" +
   "    </RetrieveMultiple>" +
   "  </soap:Body>" +
   "</soap:Envelope>";
   
   // Create an instance of an XMLHTTP object.
   var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
   
   // Configure the XMLHttp object for the
   // Microsoft CRM Web services.
   xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
   xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");
   xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
   xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
   
   // Send the XMLHttp request.
   xmlHttpRequest.send(xml);


Die XML sind dann so aus:
bild1.jpg


Und der Request Status gibt statt 200, 500 aus.

Was hat dies zu bedeuten?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 11:42

Hallo,

Und der Request Status gibt statt 200, 500 aus.

500 ist ein Interner Server fehler, der darauf hindeutet, das dein XML nicht stimmt.

Code:
500 Internal Server Error Der Server kann die angeforderten Daten nicht senden, weil auf dem Server ein Fehler aufgetreten ist. Beispielsweise konnte das aufgerufene CGI-Script nicht gestartet werden.

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 11:58

Ich habe nun die Ausgabe noch einmal geändert, nun geht es. Irgendwo muss sich wohl ein Fehler eingeschlichen haben.

Vielen Dank

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 12:23

Mhhh, klappt doch noch nichts so ganz.

Also wenn ich z.B. die Telefonnummer oder Accountnummer herausfinden will (so wie im Beispiel), dann klappt es. Nun will ich aber die ID eines Lookupfelds (übergeordneter Vertreter = new_parentagentid) herausfinden, Oder irgendein anderes Feld, Address1_Line1 etc.
Nun steht in der Variable "NaN" !
Was auch immer das bedeutet.
Muss ich dies erst in ein Key umwandeln, oder wo liegt der Fehler?

Code:
if (crmForm.all.new_parentcustomerid.DataValue != null)
{
var myAccountId = crmForm.all.new_parentcustomerid.DataValue[0].id;

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>" +
   "    <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>account</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>new_parentagentid</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>accountid</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">" + myAccountId + "</q1:Value>" +
   "              </q1:Values>" +
   "            </q1:Condition>" +
   "          </q1:Conditions>" +
   "        </q1:Criteria>" +
   "      </query>" +
   "    </RetrieveMultiple>" +
   "  </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/RetrieveMultiple");
    xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlHttpRequest.setRequestHeader("Content-Length", xml.length);
    xmlHttpRequest.send(xml);

    var resultXml = xmlHttpRequest.responseXML;

if(xmlHttpRequest.status == 200)
   {
      // Capture the XMLHttp response in XML format.
      var resultXml = xmlHttpRequest.responseXML;

      var nodeNumber = resultXml.selectNodes("//q1:new_parentagentid");
      if (nodeNumber.length == 1)
      {
         alert(parseFloat(nodeNumber[0].text));
      }


   }
}
Zuletzt geändert von tw-elektric am 8. Februar 2010 12:32, insgesamt 1-mal geändert.

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 12:28

Moment, verstehe ich das Richtig:
Du bist in der Firma und hast auf der Firma ein Lookup-Feld in dem der übergeordnete Vertreter steht?

Wenn ja, kommst du an die ID des Lookups über
Code:
crmForm.all.<name des Lookupsfeldes>.DataValue[0].id;

oder verstehe ich das gerade falsch?

Re: Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 12:38

Ja, du verstehst es falsch.

Ich bin in der Entität "tw-bericht" Hier gibt es ein Lookup Feld für die übergeornete Firma.
Diese ID bekomme ich bereits raus. Nun möchte ich mit der ID des Firma, die ID des übergeordneten Vertreteres herausfinden, so dass ich wiederum mit dieser ID dann die Emailadresse des Vertretes abfragen kann.

Leider schaffe ich es nicht, die ID des übergeordnetet Vertreters anhand der ID des Firma herauszufinden. Wie bereits erwähnt kann ich wie im Beispiel die Telefonnummer oder die Account-Nummer der Firma herausfinden. Sobald ich es aber abändere in ein anderes Feld, geht es nicht mehr mit der Meldung "NaN"

Ich habe nun das "parseFloat" entfernt, und nun geht es.
Vielen Dank

Re: [gelöst] Workflow Emailadresse / Lookup automatisch füllen

8. Februar 2010 20:31

Schön das es jetzt funktioniert, manchmal sind es nur die "Kleinigkeiten".