none
Dynamics CRM 2011 Felder miteinander multiplizieren

    Frage

  • Hallo zusammen.

    Möchte gerne in der Entität Rechnung, Felder multiplizieren.
    Beispiel: Gesamtsumme - erste Abschlagszahlung (50% der Gesamtsumme)= verbleibender Betrag

    Gesamtsumme - ersten AZ (50%)- zweite AZ (25%) - dritte AZ (25%) = verbleibender Betrag

    Schön wäre es, wenn man die Möglichkeit hätte Prozente auszuwählen oder die Beträge manuell einträgt. Wahrscheinlich müssen hier zusätzliche Felder gemacht werden. Also einmal für Prozentangaben oder manuelle Beträge.

    Kann mir da einer weitehelfen? Gibt es da JavaScript Beispiele oder gar fertig PlugIns?
    Die Felder sollte bei Eingabe gleich aktualisiert werden! Wenn das überhaupt möglich ist.

    Vielen Dank an Allle

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 09:08

Antworten

  • Hallo,

    der Code zum schreiben des Feldes muss bei dir so aussehen:

    Xrm.Page.getAttribute("new_anzahlung").setValue(new_anzahlungen);
    Andreas hat das "en" am Ende der Variable übersehen.

    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter

    Donnerstag, 2. Mai 2013 13:20
    Moderator
  • Den Wert den Du dort einträgst, entspricht nicht dem nummerischen Wert deiner Dropdown-Auswahl. Es ist vielmehr eine Art Klassifizierung deines Auswahleintrages, d.h. :

    In deiner Dropdown-Auswahl könnte auch einfacher Text stehen, z.B. "aussichtsreich" oder "nicht aussichtsreich". Diese Auswahlmöglichkeiten besitzen natürlich keine nummerische Bedeutung, damit man diese aber einfach auswerten kann, bekommen Sie einen nummerischen Wert zugewiesen. Auf diese Weise musst Du deine Auswertungs-Logik nicht ändern, wenn Du später evtl. die Auswahlbezeichnung von "aussichtsreich" auf "zuversichtlich" (oder was auch immer) änderst.

    // (Wert 50)
    if (Xrm.Page.getAttribute("dropdownfeld").getValue() == 100000000)
    {
       // Do Something
    
    // Wert 30
    } else if (Xrm.Page.getAttribute("dropdownfeld").getValue() == 100000001) {
       // Do Something
    }

    (Ich kenne natürlich deinen Wert für 30 nicht, aber normalerweise inkrementiert er den Wert einfach nur um 1.

    • Als Antwort markiert Wolle39 Dienstag, 14. Mai 2013 12:51
    Samstag, 4. Mai 2013 08:07
  • Hallo Wolfi,

    diese Meldung ist nur eine Warnung. Wenn du diese mit OK übernimmst, wird der gewünschte Wert 75 gespeichert.

    Ich an deiner Stelle würde die 75 übernehmen, um meine Berechnung möglichst einfach zu halten.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter

    Sonntag, 5. Mai 2013 06:21
    Moderator

Alle Antworten

  • Hallo Wolfi,

    Wenn die Felder sofort bei Eingabe aktualisiert werden sollen, dass musst du Javascript verwenden - alles andere verändert die Werte erst nach einem Window-Refresh.

    Wenn ich die Anforderung richtig verstanden habe wirst du 3 neue Felder anlegen müssen, in denen du die Prozent auswählst. Danach musst du OnChange-Events bei diesen Feldern hinterlegen, die die Berechnung des verbleibenden Betrags anstoßen.

    Beispiele zu Javascript-Berechnungen findest du hier: http://www.html-seminar.de/javascript-rechnen.htm

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 09:14
  • Hallo Andreas,

    vielen Dank für deine schnelle Antwort. Die Felder muss ich anlegen - klar.

    Ich weiss wie die Felder anschließend heißen. Aber wie würde das in einem JavaScript ausschauen?

    Ist mein erstes mal, also entschuldige meine blöden Fragen.

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 10:34
  • Hallo Wolfi,

    Das Script könnte ungefähr so aussehen:

    var anzahlungen = Xrm.Page.getAttribute("anzahlungProzent1").getValue() + Xrm.Page.getAttribute("anzahlungProzent2").getValue() + Xrm.Page.getAttribute("anzahlungProzent3").getValue();
    //Ergebnis z.B.: 75
    
    var anzahlungenProzent = anzahlungen / 100;
    //Ergebnis z.B.: 0,75
    
    var restBetragProzent = 1 - anzahlungProzent;
    //Ergebnis z.B.: 0,25
    
    Xrm.Page.getAttribute("restzahlung").setValue(Xrm.Page.getAttrbute("gesamtbetrag").getValue() * restBetragProzent);
    //Ergebnis z.B.: 250 bei einem Gesamtbetrag von 1.000

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 11:04
  • Ich halte es jetzt mal ganz einfach.

    Hab ein Feld angelegt mit Anzeigename: anzahlung_1 (Name: new_anzahlung_1)

    Hab ein Feld angelegt mit Anzeigename: anzahlung_2 (Name: new_anzahlung_2)

    Hab ein Feld angelegt mit Anzeigename: anzahlungen (Name: new_anzahlungen)

    Das müßte jetzt soweit passen!?
    Folgendes Skript ist hinterlegt mit Name new_Rechn_AZ_Berechnung:

    var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
    //Ergebnis

    In den Feldern anzahlung1 + anzahlung2 OnChange

    Was muss ich jetzt noch alles machen? Was muss ich im Feld anzahlungen unternehmen. Gibt es irgendwelche Abhängigkeiten?

    Danke Dir.

    Wie gesagt, ist mein erstes mal.

    Lg Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 11:47
  • Hi,

    Soweit so gut :-)...

    Nun musst du die berechnete Variable in das Feld schreiben:

    Xrm.Page.getAttribute("new_anzahlung").setValue(new_anzahlung);

    Den restlichen, offenen Betrag kannst du dir dann so ausrechnen:

    var restbetrag = Xrm.Page.getAttribute("gesamtbetrag").getValue() - Xrm.Page.getAttribute("new_anzahlungen").getValue();

    Wenn du dann dafür noch ein Feld hast, dann geht's so weiter:

    Xrm.Page.getAttribute("new_restbetrag").setValue(restbetrag);

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 12:03
  • Nun musst du die berechnete Variable in das Feld schreiben:

    Wo reinschreiben?

    Xrm.Page.getAttribute("new_anzahlung").setValue(new_anzahlung);

    Wolle39

    Donnerstag, 2. Mai 2013 12:20
  • Hallo,

    Das ist die Zeile zum beschreiben des Feldes - "new_anzahlung" ist der Feldname und mittels der Funktion .setValue(...) wird das Feld auf dem Formular beschrieben und das Ergebnis sofort sichtbar.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 12:24
  • Leider funktioniert es nicht.
    Das sind meine momentanen Felder


    Wolle39

    Donnerstag, 2. Mai 2013 12:36

  • Wolle39

    Donnerstag, 2. Mai 2013 12:37

  • Wolle39

    Donnerstag, 2. Mai 2013 12:37
  • Hallo,

    der Code zum schreiben des Feldes muss bei dir so aussehen:

    Xrm.Page.getAttribute("new_anzahlung").setValue(new_anzahlungen);
    Andreas hat das "en" am Ende der Variable übersehen.

    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter

    Donnerstag, 2. Mai 2013 13:20
    Moderator
  • Ich kapiers nicht. Mein Script schaut so aus.

    var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
    //Ergebnis

    Hab keine Ahnung, wo ich Xrm.Page.getAttribute("new_anzahlungen").setValue(new_anzahlungen); hinterlegen sollte!

    1. Skcipt ist hinterlegt

    2. Die Felder sind auch hinterlegt als Typ Währung

    3. Was muss ich jetzt genau noch alles machen?

    Danke an Euch alle.

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 13:34
  • Hallo,

    Dein Script muss dann insgesamt wie folgt aussehen:

    function Berechnung_AZ_1()
    {
       var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
       Xrm.Page.getAttribute("new_anzahlung").setValue(new_anzahlungen);
    }

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 13:38
  • Schaut schon besser aus :-) bzw. kommt keine Fehler mehr.

    Allerdings bekomme ich kein Ergebnis bei Anzahlungen.

    Zum Verständinis für mich:

    function Berechnung_AZ_1() -> Berechnung_AZ_1 kann das ein beliebiger Name sein oder geht es da um den Namen des Scripts
    {
      
    var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
      
    Xrm.Page.getAttribute("new_anzahlung"  ->  new_anzahlung ist doch falsch sollte da nicht new_anzahlungen stehen?).setValue(new_anzahlungen);
    }


    Wolle39

    Donnerstag, 2. Mai 2013 14:01
  • Hallo,

    Der Name spielt keine Rolle, solange du den Namen in der Event-Definition des Feldes (s. dein Bild weiter oben) auch anpasst.

    Das Script ist jetzt auf OnChange registriert, d.h. die Funktion läuft nur, wenn sich eines der beiden Felder ändert... - hast du das so getestet?

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 14:04
  • Jetzt klappts :-)

    Vielen Dank.

    Eine Frage noch. Muss ich bei Ereignishandler  - Hinzufügen - immer die Funktion "Berechnung_AZ_1" setzen oder reicht es bei der Gesamtsumme Anzahlungen?

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 14:18
  • Du musst den Ereignishandler bei jedem Feld hinterlegen, dass aufgrund von Änderungen die Gesamtsumme Anzahlungen neu berechnen soll!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 14:20
  • function Rechnungen_AZ_Berechnung()
    {
       var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
       Xrm.Page.getAttribute("new_anzahlungen").setValue(new_anzahlungen);

       var new_restbetrag = Xrm.Page.getAttribute("totalamount").getValue() - Xrm.Page.getAttribute("new_anzahlungen").getValue();
       Xrm.Page.getAttribute("new_restbetrag").setValue(new_restbetrag);
    }

    Klappt einwandfrei.

    Wie ist das eigentlich, wenn ich einen Wert hinterlegen will. Z.B. Feldname Prozent = 50 (wird reingeschrieben) und das Script soll sich die Zahl 50 holen. In meinem Fall denke ich da an Prozent angaben.

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 14:33
  • Xrm.Page.getAttribute("new_prozent").getValue();

    würde dann in deinem Fall die Zahl 50 liefern - mit dieser kannst du dann wieder weiterrechnen!

    .getValue() lädt den Wert aus dem Feld und .setValue() schreibt einen Wert in das Feld!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 14:36
  • OK.

    function Rechnungen_AZ_Berechnung()
    {
       var new_anzahlungen = Xrm.Page.getAttribute("new_anzahlung_1").getValue() + Xrm.Page.getAttribute("new_anzahlung_2").getValue();
       Xrm.Page.getAttribute("new_anzahlungen").setValue(new_anzahlungen);

       var new_restbetrag = Xrm.Page.getAttribute("totalamount").getValue() - Xrm.Page.getAttribute("new_anzahlungen").getValue();
       Xrm.Page.getAttribute("new_restbetrag").setValue(new_restbetrag);

       var new_restbetrag = 100 / Xrm.Page.getAttribute("totalamount").getValue() * Xrm.Page.getAttribute("new_prozente").getValue();
       Xrm.Page.getAttribute("new_restbetrag").setValue(new_restbetrag); --> er sollte natürlich erst Xrm.Page.getAttribute("totalamount").getValue() / 100 ausrechnen und danach den Wert new_prozente auslesen und multiplizieren. Funktioniert aber nicht.
    }

    Gruß Wolfi


    Wolle39

    Donnerstag, 2. Mai 2013 15:16
  • var new_restbetrag =  (Xrm.Page.getAttribute("totalamount").getValue() / 100) * Xrm.Page.getAttribute("new_prozente").getValue();

    Klammern setzen - dann kannst du die Reihenfolge beeinflussen!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Donnerstag, 2. Mai 2013 15:32
  • Klappt einwandfrei. Vielen Dank.

    Und schon wieder eine neue Frage. Wenn ich Felder definiere also mehrere Zahlen zur Auswahl, dann hab ich im CRM einen Wert. Wie im Bild zu sehen.

    Da stimmt natürlich meine Berechnung nicht. Jetzt könnte ich das in der Berechnung natürlich noch mit berechnen lassen, ist aber alles andere als schön. Wie bekomme ich die Bezeichnung und den Wert auf "gleich".

    Später sollte das als Auswahlfeld zur verfügung stehen.

    Vielen Dank.

    Gruß Wolfi


    Wolle39

    Freitag, 3. Mai 2013 08:31
  • Ich kann der Wert schon ändern aber da kommt diese Meldung. Kann es sein, das dieser Wert (Zahl) vom System schon irgendwo verwendet wird?


    Darf ich das dann soll lassen?

    Danke Gruß Wolfi

    • Bearbeitet Wolle39 Freitag, 3. Mai 2013 09:08
    Freitag, 3. Mai 2013 09:07
  • Den Wert den Du dort einträgst, entspricht nicht dem nummerischen Wert deiner Dropdown-Auswahl. Es ist vielmehr eine Art Klassifizierung deines Auswahleintrages, d.h. :

    In deiner Dropdown-Auswahl könnte auch einfacher Text stehen, z.B. "aussichtsreich" oder "nicht aussichtsreich". Diese Auswahlmöglichkeiten besitzen natürlich keine nummerische Bedeutung, damit man diese aber einfach auswerten kann, bekommen Sie einen nummerischen Wert zugewiesen. Auf diese Weise musst Du deine Auswertungs-Logik nicht ändern, wenn Du später evtl. die Auswahlbezeichnung von "aussichtsreich" auf "zuversichtlich" (oder was auch immer) änderst.

    // (Wert 50)
    if (Xrm.Page.getAttribute("dropdownfeld").getValue() == 100000000)
    {
       // Do Something
    
    // Wert 30
    } else if (Xrm.Page.getAttribute("dropdownfeld").getValue() == 100000001) {
       // Do Something
    }

    (Ich kenne natürlich deinen Wert für 30 nicht, aber normalerweise inkrementiert er den Wert einfach nur um 1.

    • Als Antwort markiert Wolle39 Dienstag, 14. Mai 2013 12:51
    Samstag, 4. Mai 2013 08:07
  • Hallo Wolfi,

    diese Meldung ist nur eine Warnung. Wenn du diese mit OK übernimmst, wird der gewünschte Wert 75 gespeichert.

    Ich an deiner Stelle würde die 75 übernehmen, um meine Berechnung möglichst einfach zu halten.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website XING LinkedIn Facebook Twitter

    Sonntag, 5. Mai 2013 06:21
    Moderator
  • Hallo Wolfi,

    Wie Michael schon gesagt hat - die Meldung ist lediglich eine Warnung. Der Hintergrund ist, wenn mehrere Lösungen bzw. Anbieter diese Auswahlliste bearbeiten könnte es zu Überschneidungen bei den Werten kommen. Um dein Script nicht unnötig zu verkomplizieren würde ich den Wert auf den gewünschten Berechnungswert ändern...

    In der Folge liefert die Funktion ".getValue()" dann den korrekten Berechnungswert!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Sonntag, 5. Mai 2013 17:44
  • Haallo Andreas,

    klappt alles wunderbar. Ich habe ich die nächste Frage.
    Wie kann ich einen Text in ein Feld schreiben lassen.

    z.B. in eine Optionssatz sind 3 Vorlagen und je nach dem welche ausgewählt wurde, wird per Java ein Text in ein mehrzeiliges Textfeld geschrieben.
    Und wie mache ich da eine Formatierung (leer Zeile, Aufzählung usw.)?

    Danke an Euch.
    Gruß Wolfi


    Wolle39

    Dienstag, 14. Mai 2013 06:59
  • Hallo Wolfi,

    Kurze Antwort auf deine Frage: Du beschreibst Felder immer mit der .setValue()-Methode - egal welcher Typ es ist.

    Bitte schließe diesen Thread ab und öffne einen neuen mit der aktuellen Frage - andere Benutzer finden so leichter die passenden Antworten und du hast die Chance, dass mehr Benutzer den neuen Thread lesen und dir darauf antworten.

    Vielen Dank und liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Dienstag, 14. Mai 2013 07:18