[gelöst] Neue Aktivität

22. März 2010 09:14

Hallo,

ich will aus unserem ERP direkt eine neue Aktivität im CRM öffen.
So dass automatisch die URL z.B. http://localhost:5555/tw-elektric/activ ... .aspx?pId={CD1710F1-6798-DE11-A895-00237D2ECAB3}&pType=1&pName=Areg%20GmbH%20&partyid={CD1710F1-6798-DE11-A895-00237D2ECAB3}&partytype=1&partyname=Areg%20GmbH%20&partyaddressused=&contactInfo=

geöffnet wird.

Kann mir jmd die URL erklären. Wie baut diese sich zusammen?

Wie setze ich das am Besten um?

Ich hätte jetzte evtl. eine VB.NET Consolenprogramm gemacht, wo ich z.B. consolProgram.exe KUNDENNUMMER mache und als Rückgabewert bekomme ich dan die ID oder so...
Oder würdet ihr das über eine eigene ASP Seite machen etc.?

Natürlich sollen bei Bezug das ANGEBOT oder der AUFTRAG gleich ausgewählt sein.

Danke
Zuletzt geändert von tw-elektric am 23. März 2010 14:10, insgesamt 1-mal geändert.

Re: Neue Aktivität

22. März 2010 12:39

Hallo,

die Url besteht aus folgenden Teilen:
pId = Guid das Bezugsobjekts (1 = Account, 2 = Contact)
pType = Code für Entität des Bezugsobjekts
pName = Name des Bezugsobjekts

party... = Gleiche Attribute nur nicht für das Bezugsobjekt sondern für den Empfänger. Die letzten Beiden Attribute kannst du weglassen, sie werden nicht benötigt.

Jetzt stellt sich nur noch die Frage was genau du aus dem ERP machen willst, bzw. welches ERP das ist und was du daraus aufrufen kannst.
Unter http://ts2community.com/blogs/larrylentz/archive/2009/08.aspx findest du Informationen wie man die URL aus dem CRM heraus per JS zusammenbaut. Allerdings ist es eben aus dem CRM und die Daten der Entität (Account/Contact/etc.) stehen direkt zur Verfügung und können verwendet werden (GUID/Type/Name).

Von extern wird das evtl. etwas schwieriger:
Wie du an den Type kommst erfährst du unter http://www.msdynamics.de/viewtopic.php?f=56&t=9223, kannst dir ja die Ergebnisse ggf. auch speichern dann brauchst du nicht den WebsService dauernd anfragen.
Den Namen solltest du schon haben (das ist der dann im entsprechenden Bezugsfeld angezeigt wird, wenn er nicht mit dem im CRM übereinstimmt, steht da ein falscher Name, der Bezug funktioniert trotzdem, da die GUID ja eindeutig ist und die Verknüpfung herstellt), die Guid musst du dir ggf. per Webservice besorgen.

Was ich allerdings nicht weiß, woher du aus der Kundennummer das Angebot oder den Auftrag gewinnen willst... Außer du hast nur ein aktives Angebot/einen aktiven Auftrag pro Kunde dann könntest darüber filtern.

Ich hoffe ich konnte dir ein kleinwenig weiterhelfen...

Viele Grüße,
Florian

Re: Neue Aktivität

22. März 2010 12:56

Das ERP ist eine kleines unbekanntes für die Leiterplattenbranche.
Ich möchte einen Button einbauen, in dem Angebot/Auftrag Fensters unseres ERP, => "CRM"

Sobald darauch geklickt wird, muss sich das IE Fenster mit dem CRM öffnen => Neue Aktivität (Telefongespräch) und eben als Bezug das Angebot/Auftrag und als Abesender/Empfänger die Firma.

Somit habe ich aus dem ERP die Kundenummer und die Angebot/Aufragnummer. Beide Daten sind auch im CRM hinterlegt.

Nun meine beiden Ansätze:
1.) Ich rufe eine eigene ASP Seite auf z.B. http://localhost:5555/check.asp?kdnr=12 ... gnr=654321
Auf dieser Seite frage ich nun alle relevanten CRM Daten ab über den WebService und greiire die CRM URL so wie ich sie benötige.

2.) VB.Net Tool, welches mir die Daten abfrägt und die URL erzeugt und öffnet z.B. vbtool.exe -k 123456 -ang 654321

Variante 1 wäre mir lieber, aber ich habe kein Plan von ASP.

Re: Neue Aktivität

22. März 2010 15:20

Ich habe auch keine wirkliche Ahnung von aspx. Hab mal etwas nachgeschaut und du bräuchtest im Prinzip zwei Dateien (um das Code Behind Konzept umzusetzen).
check.aspx:
Code:
<%@ Page Language="C#" CodeFile="check.aspx.cs" Inherits="Website.Check" AutoEventWireup="true" %>

<!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 runat="server">
    <title>Unbenannte Seite</title>
</head>
<body onload="self.close(); window.open('<%=getURL()%>'); ">
</body>
</html>



check.aspx.cs
Code:
using System.Web.UI;

namespace Website
{
    public partial class Check : System.Web.UI.Page
    {
        protected string getURL()
        {
         string kdnr = Request.QueryString["kdnr"];
         string angnr = Request.QueryString["angnr"];
         string aufnr = Request.QueryString["aufnr"];
         string url = "http://www.google.de";
            return url;
        }
    }
}


Das sollte dir eigentlich schon ausreichen... du musst halt dann entsprechend die URL anspassen mit dem Ergebnis deines WS. Die Seite wird dann geschlossen und das neue Fenster geöffnet. Kannst es ja auch umbauen, einfach das onload JS ändern.

Viele Grüße,
Florian

Re: Neue Aktivität

22. März 2010 15:30

Okay, danke erst mal.

Und die Abfrage der Daten mache ich dann per Javascript in der check.aspx?

So wie ich dies schon bei einigen Formularen mache?

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)
      {
         var myParentAgentID = nodeNumber[0].text;
         //alert(myParentAgentID);
      }
   }



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>emailaddress1</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\">" + myParentAgentID + "</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:emailaddress1");
      if (nodeNumber.length == 1)
      {
         var myEmailaddress = nodeNumber[0].text;
         //alert(myEmailaddress);
        crmForm.all.new_vertreteremail.DataValue = myEmailaddress;
      }
   }




}

Re: Neue Aktivität

22. März 2010 16:14

Das ist die eine Alternative... dann brauchst du aber kein ASPX, sondern dann reicht dir eine schlichte einfache HTML Seite mit eingebetten JS.... ;) Dann müssest du den QueryString (also das ?kdnr=12341 ... ... ) eben per Javascript aufbereiten.

Wenn du die Skripte schon hast scheint das aber die einfachste Möglichkeit zu sein. Wenn nicht kannst du deine Queries eben mit .Net schreiben in der check.aspx.cs (also in diesem Fall wäre es C#, falls du VB möchtest musst eben aus der CS eine äquvalente VB-Seite bauen und entsprechend die erste Zeile der check.aspx ändern (was nicht allzu schwer sein sollte ;)).

Wie du Queries in .NET baust findest du unter http://technet.microsoft.com/en-us/library/aa685881.aspx such dir aus der Query Sektion einfach die Dinge die du brauchst. Das ist in meinen Augen deutlich einfacher als unter JS, weil du das XML eben nicht selber bauen musst.

Solltest du dich für JS entscheiden empfehle ich dir dein JS in eine eigene Datei auszulagern, dort eine Methode bauen die dir die URL baut und diese dann in das onLoad-Script des Bodys einzubauen. Du musst natürlich davor das Script in die HTML-Seite einbinden.

Worauf du noch aufpassen msust, ist dass du die richtigen Felder abfragst, da du ja nicht die GUID aus dem CRM hast, sondern nur die ID aus deinem Fremndsystem, die du ja anscheinend in einem Feld im CRM gespeichert hast.

Falls noch Fragen sind, immer gerne.

Gruß,
Florian

Re: Neue Aktivität

22. März 2010 16:39

Okay, mit Java wäre es für mich einfacher, da ich ähnlichen Code schon bei manchen OnLoad Formularen im CRM habe.

Was mir aber gerade noch so auffällt, der Code "GenerateAuthenticationHeader()" kann ich in meinem Javascript nicht verwenden. Funktioniert dies nur in der CRM Umgebung?

Vllt sollte ich dann dich auf ASPX - bin VB zurückgreifen.

Mhh, ich bin zu blöde das in VB umzuschreiben.
Ich habe es nun so, aber da erhalte ich einen Fehler:

Code:

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<script runat="server">
    Protected function getKDNR() as string
    dim kdnr as string = Requset.QueryString("kdnr")
    return kdnr
    End function 
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body onload="self.close(); window.open('<%=getKDNR()%>'); ">
</body>
</html>


arrr, zum Test habe ich es mal noch so probiert. Leider ohne Erfolg:
Code:

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<script runat="server">
   
   sub  Page_Load(byval sender as object, byval e as EventArgs ) Handles MyBase.Load
      Me.Label1.Text = Requset.QueryString("kdnr")
      Me.Label1.ForeColor = Drawing.Color.Green
    end sub
   
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Unbenannte Seite</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Italic="True" Font-Names="Arial" Width="441px" Font-Size="9pt"></asp:Label>
</form>
</body>
</html>

Re: Neue Aktivität

22. März 2010 17:37

Ja der Code funktioniert nur innerhalb der CRM-Umgebung. Allerdings kannst du dir den Header auch selbst zusammen bauen:
http://msdn.microsoft.com/en-us/library/cc150838.aspx.

Wenn du .NET verwendest musst du dir aus der WSDL eine Proxy Klasse generieren (bspw mit der wsdl.exe), diese kompilieren und referenzieren und kannst dann über diese auf die Webservices zugreifen.
Wie du da mit WebServices umgehst findest du unter: http://msdn.microsoft.com/en-us/library/bb928393.aspx.

In deiner Variante würde ich den selbstzusammengebauten Header fast bevorzugen (auch wenn dass etwas unschön ist).

Ich würde die Logik (VB) in eine eigene Datei auslagern:
Das sähe dann so aus:
check.asmx
Code:
<%@ Page Language="VB" CodeFile="check.aspx.vb" Inherits="Check" AutoEventWireup="true" %>

<!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 runat="server">
    <title>Unbenannte Seite</title>
</head>
<body onload="self.close(); window.open('<%=getURL()%>'); ">
</body>
</html>


check.asmx.vb
Code:
Imports System.Web.Services
Public Class Check
   Inherits System.Web.Services.WebService
   ' Dein Quellcode.
End Class


Grad noch gesehen, dass du nen Tippfehler bei Request hast, wenn du das s und das e tauscht müsste es doch schon gehen ;). Kann dir bei VB leider nicht helfen, komme aus der Java-Welt und somit liegt für mich C# nahe :).

Viele Grüße,
Florian

Re: Neue Aktivität

23. März 2010 09:15

Danke für deine Mühe.
Nach vielen Versuchen habe ich mich nun entschieden mit HTML und JAVASCRIPT weiterzuarbeiten.

Nun habe ich zwei Probleme.
Wie übergebe ich die Variable, bzw. wie frage ich diese in JAVASCRIPT ab. Wenn ich sie in der URL mit gebe? test.htm?kdnr=12344

Zweites Problem,
ich muss mich immer authorisieren. Jedes mal kommt das Popup um Domönenbenutzer einzugeben. Mein Domänenadmin wird nicht akzeptiert und der lokale Admin auch nicht.
Was muss ich hier angeben?

Die erste Meldung zeit mir noch den XML Code, dass passt soweit alles. Danach kommt die Authorisierung welche nicht klappt. Die zweite Meldung (status) ist dann leer.

Danke
Zuletzt geändert von tw-elektric am 23. März 2010 12:05, insgesamt 2-mal geändert.

Re: Neue Aktivität

23. März 2010 10:43

Ich habe das ganze nun mal noch in eine asp seite gepackt. hier kommt nun kein Authorisierungsfenster mehr.
Aber ich bekomme auch kein Ergbenis geliefert.

Der Status ist leer!
Wo liegt der Fehler? Ich habe bestimmt bei GenerateAuthenticationHeader einen Fehler.

Danke

Code:
<script type="text/javascript">
var myKDNR = '10007';


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\">" +
   "527E9A8C-C681-DE11-90BB-00237D2ECAB3" +
   "</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: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>";
   alert(xml);
   
   
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;
alert("status = " + resultXml);

// Capture the XMLHttp response in XML format.
      var resultXml = xmlHttpRequest.responseXML;
      alert (resultXml);
      var nodeNumber = resultXml.selectNodes("//q1:accountnumber");
     alert(nodeNumber.length);
    
      if (nodeNumber.length == 1)
      {
         var myAccountID = nodeNumber[0].text;
         alert(myAccountID);
      }

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)
      {
         var myAccountID = nodeNumber[0].text;
         alert(myAccountID);
      }
   }

</script>

Re: Neue Aktivität

23. März 2010 12:16

Hi,

du hast einige Fehler und einiges unnötiges im Skript, so dass es nicht funktionieren kann, ich habe mal die unnötigen Zeilen gelöscht und Kommentare reingebaut, wo du was ändern musst bzw. wo ich was geändert habe.
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">
var myKDNR = '10007';


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\">" +
   //hier muss der Name deiner CRM Organisation stehen!
   //wenn der Name nicht stimmt funktioniert die Authentifizierung nicht richtig.
   "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: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");
//hier muss die Adresse zu deinem CRM Server stehen! also http://<server>:<port>/mscrmservices/2007/CrmService.asmx
xmlHttpRequest.Open("POST", "http://192.92.130.9: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;
//Alles was ich hier weggelöscht habe, war absolut unnötig.
if(xmlHttpRequest.status == 200)
   {
      var resultXml = xmlHttpRequest.responseXML;

     //Du willst ja hier die AccountId bekommen und nicht den ParentAccount....
      var nodeNumber = resultXml.selectNodes("//q1:accountid");
      if (nodeNumber.length == 1)
      {
         var myAccountID = nodeNumber[0].text;
         alert(myAccountID);
      }
   }

</script>
</body>
</html>


Jetzt sollte es eigentlich auch bei dir funktionieren... ich habe übrigens eine ganz normale HTML-Seite draus gemacht ;).
Wenn du noch Fragen hast, melde dich einfach.

EDIT: Das ganze funktioniert so nur für AD-Authentifizierung, wenn du IFD Authentifizierung nutzt, dann musst du einige Dinge ändern.

Viele Grüße,
Florian

Re: Neue Aktivität

23. März 2010 12:32

Vielen Dank, jetzt geht es.

Jetzt müsste ich nur noch wissen, wie ich an die Variablen ran komme, welche ich in der URL mitgebe.

z.B.
test.htm?kd=123456&ang=654321

Re: Neue Aktivität

23. März 2010 12:58

Hi,

unter http://adamv.com/dev/javascript/querystring findest du ein Script um den Querystring auszulesen (ganz oben gibt's den Download).

Verwendung wäre dann so:
Code:
var qs = new Querystring();

//var myKDNR = '10007';
var myKDNR;
if (qs.contains('kdnr'))
{
   myKDNR = qs.get('kdnr');
}


Ich hoffe das hilft :).

Viele Grüße,
Florian

Re: Neue Aktivität

23. März 2010 13:15

Ich Danke dir vielmals.
Bekomme aber leider noch die Meldung:
'Querysting' ist undefiniert!

Hier habe ich nun mal meine kompletten Code, der auch funktioniert. Bis eben auf die Querystring.

Code:
<script type="text/javascript">
var qs = new Querystring();

var myKDNR;
if (qs.contains('kdnr'))
{
   myKDNR = qs.get('kdnr');
}
//var myKDNR = '10761';
var myAUFNR = '412526';
var myANGNR = '118670';

//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://192.92.130.9: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;
         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://192.92.130.9: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://localhost:5555/tw-elektric/activities/phone/edit.aspx?partyid=" + myAccountID +
      "&partyType=1&partyName=" + myAccountName +
      "&pId=" + myOrderID + "&pType=10002&pName=" + myAUFNR;
      window.open(URL);
      }
   }
}   

if (myANGNR.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_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://192.92.130.9: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://localhost:5555/tw-elektric/activities/phone/edit.aspx?partyid=" + myAccountID +
      "&partyType=1&partyName=" + myAccountName +
      "&pId=" + myOfferID + "&pType=10001&pName=" + myANGNR;
      window.open(URL);
      }
   }
}   

</script>

Re: Neue Aktivität

23. März 2010 13:29

Hi,

du musst noch das Script aus dem oben verlinkten Artikel in dein JS kopieren... Dann sollte es klappen.

Grüße,
Florian