[gelöst]URL-Parameter für Aktivitäten

10. Juni 2010 15:09

Hallo zusammen!

Es geht um folgendes: Man kann in CRM über eine URL die Formulare zur Erstellung eines neuen Datensatzes für eine Entität aufrufen. Diesem kann man auch gleich bestimmte Daten über die jeweiligen Attributnamen mit geben. So öffnet z.B. "http://<server>/<org>/sfa/opps/edit.aspx?estimatedclosedate=06/10/2010" einen neuen Datensatz vom Typ Verkaufschance und übergibt den 10.06.2010 als Wert in das Feld "Gesch. Abschlussdatum".
Ich habe aber gelesen (und auch ausprobiert), dass die Übergabe von Werten bei Aktivitäten so (mit dem Attributnamen) nicht funktioniert. Grundsätzlich ist die Übergabe von Daten aber auch bei Aktivitäten möglich: So scheinen pId, pName, pType z.B. den Bezug zu definieren und mit partyId, partyName, PartyType lässt sich der Kunde festlegen.
Hier jetzt endlich meine Frage: Weiß jemand, ob ich auch die anderen Felder (z.B. Betreff, An, Cc, ...) über die URL befüllen kann? Und falls ja, gibt es irgendwo eine Übersicht über die Parameter, die man da benutzen muss?
Sehr interessant für mich wäre auch, ob ich über die URL auch sagen kann, dass das E-Mail-Formular, das ich öffne, auf einer bestimmten E-Mail-Vorlage basiert. Geht sowas?

Wäre für Infos, Vorschläge, Ideen sehr dankbar.

Viele Grüße,
Daniel
Zuletzt geändert von DanP am 2. Juli 2010 10:47, insgesamt 1-mal geändert.

Re: URL-Parameter für Aktivitäten

10. Juni 2010 19:18

Hi,

hier wird dir bezüglich Parameterübergabe, etc. geholfen: http://msdn.microsoft.com/en-us/library/cc150850.aspx

Re: URL-Parameter für Aktivitäten

11. Juni 2010 08:50

Ja, das haben wir bei uns auch im Einsatz.
Bei uns wird z.B. wenn ich mich in unserem ERP in einem Angebot oder Auftrag befinde ein CRM Button eingeblendet.
Betätige ich diesen, so habe ich die typische Aktivitätenauswahl, Termin, Aufgabem, Email etc.

Wenn ich nun auf Email klicke, so öffnet sich automatisch eine Email Aktivität mit den ausgefüllten Feldern.
bild.jpg


Ich verweise über das klicken aus dem ERP auf eine HTML Seite.
z.B. http://srv04:5555/check.htm?kdnr=#KLKDNR#&angnr=#KLNR#&id=#TYP#

Diese Wertet die angegebenen Parameter aus und leitet dann auf die Aktivität vom CRM um.
Hier mal fals es interessiert noch der Inhalt der HTML Seite:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<head>
    <title>Unbenannte Seite</title>
</head>
<body>
<script type="text/javascript">

/* Client-side access to querystring name=value pairs
   Version 1.3
   28 May 2008
   
   License (Simplified BSD):
   http://adamv.com/dev/javascript/qslicense.txt
*/
function Querystring(qs) { // optionally pass a querystring to parse
   this.params = {};
   
   if (qs == null) qs = location.search.substring(1, location.search.length);
   if (qs.length == 0) return;

// Turn <plus> back to <space>
// See: http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4.1
   qs = qs.replace(/\+/g, ' ');
   var args = qs.split('&'); // parse out name/value pairs separated via &
   
// split out each name=value pair
   for (var i = 0; i < args.length; i++) {
      var pair = args[i].split('=');
      var name = decodeURIComponent(pair[0]);
      
      var value = (pair.length==2)
         ? decodeURIComponent(pair[1])
         : name;
      
      this.params[name] = value;
   }
}

Querystring.prototype.get = function(key, default_) {
   var value = this.params[key];
   return (value != null) ? value : default_;
}

Querystring.prototype.contains = function(key) {
   var value = this.params[key];
   return (value != null);
}






var qs1 = new Querystring();

var myKDNR = 0;
if (qs1.contains('kdnr'))
{
   myKDNR = qs1.get('kdnr');
}

var qs2 = new Querystring();

var myAUFNR = 0;
if (qs2.contains('aufnr'))
{
   myAUFNR = qs2.get('aufnr');
}

var qs3 = new Querystring();

var myANGNR = 0;
if (qs3.contains('angnr'))
{
   myANGNR = qs3.get('angnr');
}

var qs4 = new Querystring();

var myTYP = 0;
if (qs4.contains('id'))
{
   myTYP = qs4.get('id');
}

var myAKTIVITY = 0;
if (myTYP == 'Aufgabe')
{
myAKTIVITY = 'task'
}

if (myTYP == 'Fax')
{
myAKTIVITY = 'fax'
}

if (myTYP == 'Telefon')
{
myAKTIVITY = 'phone'
}

if (myTYP == 'Email')
{
myAKTIVITY = 'email'
}

if (myTYP == 'Brief')
{
myAKTIVITY = 'letter'
}

if (myTYP == 'Termin')
{
myAKTIVITY = 'appointment'
}

//KUNDEN GUID herausfinden
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\">" +
   "<soap:Header>" +
   "<CrmAuthenticationToken xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   "<AuthenticationType xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "0" +
   "</AuthenticationType>" +
   "<OrganizationName xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "tw-elektric" +
   "</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>account</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>accountid</q1:Attribute>" +
   "            <q1:Attribute>name</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>accountnumber</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">" + myKDNR + "</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", "http://srv04:5555/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)
   {
      var resultXml = xmlHttpRequest.responseXML;
      var nodeNumber = resultXml.selectNodes("//q1:accountid");
      if (nodeNumber.length == 1)
      {
         var myAccountID = nodeNumber[0].text;
         //alert(myAccountID);
      }
    
     var nodeNumber = resultXml.selectNodes("//q1:name");
      if (nodeNumber.length == 1)
      {
         var myAccountName = nodeNumber[0].text;
       myAccountName = myAccountName.replace(/\&/g,"_");
         //alert(myAccountName);
      }
   }

if (myAUFNR.length != 0)
{
//AUFTRAG GUID herausfinden
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\">" +
   "<soap:Header>" +
   "<CrmAuthenticationToken xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   "<AuthenticationType xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "0" +
   "</AuthenticationType>" +
   "<OrganizationName xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "tw-elektric" +
   "</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>new_order</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>new_orderid</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>new_auftragnummer</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">" + myAUFNR + "</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", "http://srv04:5555/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)
   {
      var resultXml = xmlHttpRequest.responseXML;
      var nodeNumber = resultXml.selectNodes("//q1:new_orderid");
      if (nodeNumber.length == 1)
      {
         var myOrderID = nodeNumber[0].text;
         //alert(myOrderID);
       var URL = "http://srv04:5555/tw-elektric/activities/" + myAKTIVITY + "/edit.aspx?partyid=" + myAccountID +
      "&partyType=1&partyName=" + myAccountName +
      "&pId=" + myOrderID + "&pType=10002&pName=" + myAUFNR;
      document.location.href = URL;
      //window.open(URL);
      }
   }
}   

if (myANGNR.length != 0)
{
//ANGEBOT GUID herausfinden
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\">" +
   "<soap:Header>" +
   "<CrmAuthenticationToken xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
   "<AuthenticationType xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "0" +
   "</AuthenticationType>" +
   "<OrganizationName xmlns=\"http://schemas.microsoft.com/crm/2007/CoreTypes\">" +
   "tw-elektric" +
   "</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>new_offer</q1:EntityName>" +
   "        <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
   "          <q1:Attributes>" +
   "            <q1:Attribute>new_offerid</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:Criteria>" +
   "          <q1:FilterOperator>And</q1:FilterOperator>" +
   "          <q1:Conditions>" +
   "            <q1:Condition>" +
   "              <q1:AttributeName>new_angebotnummer</q1:AttributeName>" +
   "              <q1:Operator>Equal</q1:Operator>" +
   "              <q1:Values>" +
   "                <q1:Value xsi:type=\"xsd:string\">" + myANGNR + "</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", "http://srv04:5555/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)
   {
      var resultXml = xmlHttpRequest.responseXML;
      var nodeNumber = resultXml.selectNodes("//q1:new_offerid");
      if (nodeNumber.length == 1)
      {
         var myOfferID = nodeNumber[0].text;
         //alert(myOfferID);
       var URL = "http://srv04:5555/tw-elektric/activities/" + myAKTIVITY + "/edit.aspx?partyid=" + myAccountID +
      "&partyType=1&partyName=" + myAccountName +
      "&pId=" + myOfferID + "&pType=10001&pName=" + myANGNR;
      document.location.href = URL;
      //window.open(URL);
      }
   }
}   

</script>
</body>
</html>
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: URL-Parameter für Aktivitäten

11. Juni 2010 13:43

Hallo zusammen!

Und erstmal danke für die Infos!

@ckeller: Den Link hatte ich auch schon gefunden. Ist auch sonst sehr nützlich, aber leider steht da unter "Passing parameters to set values to new records" das folgende: "Note This technique currently works for all entities except Activity entities." Und genau um diese Entitäten (speziell die E-Mail) geht es mir.

@tw-elektric: Vielen Dank Dein Skript. An sowas in der Art hatte ich auch gedacht. Aber leider verwendest Du auch nur die Parameter pName, pType, pId, partyName, partyType, partyId, die ich in meinem ursprünglichen Post ja schon aufgezählt hatte. Die Frage ist halt, ob es davon noch mehr gibt, mit denen man die anderen Felder der E-Mail-Aktivität befüllen kann.

Re: URL-Parameter für Aktivitäten

24. Juni 2010 16:13

Hallo zusammen!

Ich werfe das Thema nochmal neu in die Runde. Hat noch jemand eine Idee?

Viele Grüße,
Daniel

Re: URL-Parameter für Aktivitäten

30. Juni 2010 10:42

So, nun bin ich auch zu diesem Thema gestossen, da ich den Betreff der Aufgabe auch direkt mit einem Wert füllen möchte.

Ich habe es mit &subject=Testausfgabe (so heißt das feld in der db und so wird es im html als ID verwendet) versucht, es kommt kein Fehler, aber ich bekomme auch nichts angezeigt.

Re: URL-Parameter für Aktivitäten

30. Juni 2010 16:53

Hallo!

tw-elektric hat geschrieben:Ich habe es mit &subject=Testausfgabe (so heißt das feld in der db und so wird es im html als ID verwendet) versucht, es kommt kein Fehler, aber ich bekomme auch nichts angezeigt.


Genau das ist das Problem: Wie bekommt man diese blöden Daten in diese blöden Felder?!? *grummel*
Ich habe jetzt mal darüber nachgedacht, ob man irgendwie im Onload-Ereignis den Query String auslesen könnte, aber ich weiß nicht wie. Notfalls müsste man die Daten vielleicht erstmal im Klartext in eines der beiden beschreibbaren Felder schreiben (z.B. Bezug) und dann über das Onload-Ereignis da wieder auslesen, aber diese Methode fände ich (falls sie denn überhaupt funktioniert) sehr unschön. :-?
Evtl. könnte man über eine eigene html/aspx-Seite etwas bewegen, aber auch da weiß ich momentan nicht wie...

Gruß,
Daniel

Re: URL-Parameter für Aktivitäten

2. Juli 2010 10:45

Ich habs! :idea:

Das mit dem Abfragen des Querystrings im Onload funktioniert! Habe folgenden Code benutzt, um z.B. den Betreff an eine Aktivität zu übergeben:

Code:
if (crmForm.FormType == 1) {
   var strSub;

   strSub = getQueryValue('subject');

   if (strSub != null)
   {
      crmForm.all.subject.DataValue = strSub;
   }
}


function getQueryValue(strField)
{
   var strQuery = window.location.search.substring(1);
   var arrFields = strQuery.split("&");
   for (var i=0; i<arrFields.length; i++)
   {
      var arrPair = arrFields[i].split("=");
      if (arrPair[0] == strField)
      {
         return arrPair[1];
      }
   }
}


Baut man dann die URL in der Form ...edit.aspx?subject=blabla auf, steht 'blabla' auch im Formular im Betreff! :-D

Viele Grüße,
Daniel

Re: [gelöst]URL-Parameter für Aktivitäten

2. Juli 2010 11:49

okay, werde ich mal testen. Super...
Und wenn die Aktvität direkt aus dem CRM aufgerufen wird, so wird dies ignoriert?

Dann sollte dies ja mit allen Feldern nun gehen :)

Re: [gelöst]URL-Parameter für Aktivitäten

9. September 2011 15:39

Hallo,

erstmal tut es mir leid, den alten Thread hier als Leichenschänder wieder auszugraben, aber ich denke, es macht mehr Sinn, denn hier wieder rauszuholen, als einen neuen zu erstellen.

Ich hab mir den Thread angeschaut, verstehe es aber nicht so ganz, was gemacht wird. Und zwar hätte ich folgendes Problem:

Ich würde gern eine Telefonnummer über die Url dem Crm mitgeben. Der Link zum editieren wäre ja http://server/Organisationsname/activit ... /edit.aspx. Nun will ich halt dahinter die Telefonnummer dazuschreiben, damit diese im Fenster dann angezeigt wird. Allerdigs klappt das nicht (keine Fehlermeldung). Was mach ich falsch.

Re: [gelöst]URL-Parameter für Aktivitäten

14. September 2011 11:09

Siehe den Kommentar weiter oben: http://msdn.microsoft.com/en-us/library/cc150850.aspx
Note This technique currently works for all entities except Activity entities.

Re: [gelöst]URL-Parameter für Aktivitäten

14. September 2011 19:43

Es soll ja gehen, wenn man den o.g. Coder verwendet. Allerdings kommt bei uns nur eine nichtssagende Fehlermeldung (Seite konnte nicht geladen werden...Aber keine Fehlermeldung im eigentlichen Sinn). Muss man im Crm noch irgendwas aktivieren, deaktivieren, damit der Code anstandslos ausgeführt wird?