Konkreter Anwendungsfall fĂĽr Webservice

Bild Microsoft Dynamics CRM 4.xx

Konkreter Anwendungsfall fĂĽr Webservice

Beitragvon frankyue » 16. August 2011 12:48

Hallo zusammen,

in der Entität der Verkaufschance kann per Lookup-Attribut eine Firma ausgewählt werden. Dieser zuvor erfassten Firma sind weitere Informationen hinterlegt (u.a. deren Anschrift inkl. Postleitzahl). Abhängig von dieser PLZ der ausgewählten Firma, möchte ich nun ein weiteres Attribut der Verkaufschance befüllen. Wenn ich nicht irre, benötige ich bei Dynamics CRM 4.0 dazu einen Webservice.

In Michaels Blog gibt es dazu eine erste Beschreibung (vgl. Link).
Allerdings benötige ich dazu weitere Hilfe.

Zurzeit plane ich im OnChange()-Ereignis des Feldes Firma in der Entität Verkaufschance die PLZ der Firma auszulesen. Anschließend soll die PLZ auf die erste Stelle gekürzt werden. Danach erfolgt eine switch/case-Anweisung, welche abhängig von der Ziffer einem Attribut einen konkreten Wert zuordnet.

Doch ist mir immer noch unklar:
- Wo fĂĽge ich den Webservice am besten ein? Auch im OnChange()-Ereignis? Wenn ja, leidet darunter die Performance nicht zu sehr?
- Welche Begriffe muss ich in dem Code ändern, damit ich das Attribut "address1_postalcode" auslesen kann?
- Wie kann ich das ausgelesene Attribut weiterverwenden?

Vielleicht kann mir jemand von Euch das Vorgehen (inkl. konkreten Beispielen) einmal genau auffĂĽhren?

GruĂź & Dank
Frank
frankyue
 
Beiträge: 108
Registriert: 15. November 2010 11:45
Bezug zu Microsoft Dynamics: SchĂĽler / Student
Microsoft Dynamics Produkt: Microsoft Dynamics CRM
Microsoft Dynamics Version: 4.0

Re: Konkreter Anwendungsfall fĂĽr Webservice

Beitragvon Michael Sulz » 19. August 2011 15:01

Hallo Frank,

du musst das Attribut "q1:new_number" austauschen.
Den Webservice benötigst du im OnLoad des Formulares, da sich ja die Daten der Firma geändert haben können.
GruĂź, Michael Sulz
Mein Blog
Xing LinkedIn Facebook Twitter

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.

Wie man Fragen richtig stellt
Benutzeravatar
Michael Sulz
Microsoft Partner
Microsoft Partner
 
Beiträge: 4939
Registriert: 9. September 2009 17:41
Wohnort: MĂĽnster
Realer Name: Michael Sulz
Arbeitsort: MĂĽnster
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics CRM

Re: Konkreter Anwendungsfall fĂĽr Webservice

Beitragvon frankyue » 24. August 2011 10:37

Hallo Michael,

leider funktioniert mein Anwendungsfall für einen Webservice immer noch nicht. Dieser soll folgenden Sachverhalt lösen:

Als Endanwender öffne ich ein neues Formular für eine Verkaufschance. Hier kann ich in dem Lookup-Feld "customerid" eine Firma auswählen. Diese Firma ist eine Instanz der Entität "account". Sobald ich eine Firma ausgewählt habe, soll ein Feld des verlinkten Lookup's ausgelesen werden. Dabei handelt es sich um das Standard-Feld "address1_postalcode". Dieser Wert soll dann in einem Feld des Verkaufschancen-Formulars angezeigt werden. Dieses Feld heißt "TEST-SE".

Folgenden Code habe ich sowohl in das OnLoad()-Ereignis des Formulars als auch in das OnChange()-Ereignis des Feldes "customerid" eingefĂĽgt:

Code: Alles auswählen
// Prüfen, ob das LookUp Feld überhaupt Daten enthält
if (crmForm.all.customerid.DataValue != null)
{
   // Die ID des Datensatzes zuweisen
   var myId = crmForm.all.customerid.DataValue[0].id;
   
   // Definieren der SOAP XML Message fĂĽr den Zugriff auf den CRM Webservice
   // Hier wird auch die Funktion GenerateAuthenticationHeader verwendet, die automatisch die korrekte Anmeldung ermittelt
   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_number</q1:Attribute>" +
   "          </q1:Attributes>" +
   "        </q1:ColumnSet>" +
   "        <q1:Distinct>false</q1:Distinct>" +
   "        <q1:PageInfo>" +
   "          <q1:PageNumber>1</q1:PageNumber>" +
   "          <q1:Count>50</q1:Count>" +
   "        </q1:PageInfo>" +
   "        <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 xmlns:q2=\"http://microsoft.com/wsdl/types/\" xsi:type=\"q2:guid\">" + myId + "</q1:Value>" +
   "              </q1:Values>" +
   "            </q1:Condition>" +
   "          </q1:Conditions>" +
   "        </q1:Criteria>" +
   "      </query>" +
   "    </RetrieveMultiple>" +
   "  </soap:Body>" +
   "</soap:Envelope>" +
   "";
   
   // Eine Instance des XMLHTTP Objektes erzeugen
    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);
   if(xmlHttpRequest.status == 200)
    {
      var resultXml = xmlHttpRequest.responseXML;
      var entityNodes = resultXml.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
      for (var i = 0; i < entityNodes.length; i++)
      {
         var entityNode = entityNodes[i];

         var new_numberNode = entityNode.selectSingleNode("address1_postalcode");
         var new_number = (new_numberNode == null) ? null : new_numberNode.text;
     
         crmForm.all.TEST-SE.DataValue = new_number;
      }
    }
}

Ohne eine Fehlermeldung o.ä. wird mir die gewünschte PLZ leider nicht angezeigt.

Wie sieht der Quellcode korrekt aus?

GruĂź
Frank
frankyue
 
Beiträge: 108
Registriert: 15. November 2010 11:45
Bezug zu Microsoft Dynamics: SchĂĽler / Student
Microsoft Dynamics Produkt: Microsoft Dynamics CRM
Microsoft Dynamics Version: 4.0

Re: Konkreter Anwendungsfall fĂĽr Webservice

Beitragvon Michael Sulz » 28. August 2011 10:41

Hallo Frank,

wenn ich das richtig sehe, holst du dir mit dieser Zeile

Code: Alles auswählen
<q1:Attribute>new_number</q1:Attribute>" +


nur das Feld new_number. Du musst dir aber das Feld address1_postalcode holen. Versuch es einmal mit folgender Zeile

Code: Alles auswählen
<q1:Attribute>address1_postalcode</q1:Attribute>" +


dann sollte es funktionieren.
GruĂź, Michael Sulz
Mein Blog
Xing LinkedIn Facebook Twitter

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.

Wie man Fragen richtig stellt
Benutzeravatar
Michael Sulz
Microsoft Partner
Microsoft Partner
 
Beiträge: 4939
Registriert: 9. September 2009 17:41
Wohnort: MĂĽnster
Realer Name: Michael Sulz
Arbeitsort: MĂĽnster
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics CRM


ZurĂĽck zu CRM 4.xx

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast