Estimated Booking Calculation (große Probleme mit Jscript)
-
2012年5月14日 上午 11:09
Hallo auch,
ich sitze seit heute morgen um 08.00 daran für das Opportunity-Formular eine onchange Kalkulation des Estimated Booking Felds zu tätigen, die sich grundlegend aus einer Addition von vier Felder ergibt "new_softwarerevenue" , "new_supportrevenue", "new_servicerevenue" und "new_3rdpartysellpricerevenue".
Soweit mein Vorgehen:
1. Ich erstelle eine neue Web Ressource mit folgendem Script: (hier bitte auf Syntaxfehler aufmerksam machen, danke! Ich bin erst seit heute morgen in die Tiefen dieser Sprache getaucht)
function calculate() { var val1 = Xrm.Page.getAttribute("new_softwarerevenue").getValue(); var val2 = Xrm.Page.getAttribute("new_supportrevenue").getValue(); var val2 = Xrm.Page.getAttribute("new_servicerevenue").getValue(); var val2 = Xrm.Page.getAttribute("new_3rdpartysellrevenue").getValue(); if(val1==null)return; if(val2==null)return; if(val3==null)return; if(val4==null)return; var result = val1 + val2 + val3 + val4; Xrm.Page.getattributes["estimatedvalue"].setValue(result); }
2. im Opportunity Form wird das zur Verfügung gestellt und die vier Felder bekommen onchange "calculate"
3. nichts funktioniert :)
Jetzt ist mir halt nicht klar woran es liegen könnte, generelle Unfähigkeit oder woran auch immer.
Ein anderer Ansatz (gemopst aus diesem Forum und runtergebrochen auf nur 2 Felder) war:
function SummeBerechnen() { var gesamt1 = 0; if (crmForm.all.new_softwarerevenue.DataValue != null) { gesamt1 = crmForm.all.new_softwarerevenue.DataValue; } var gesamt 2 = 0; if (crmForm.all.new_supportrevenue.DataValue != null) { gesamt2 = crmForm.all.new_supportrevenue.DataValue; } if (crmForm.all.new_softwarerevenue.DataValue != null && crmForm.all.new_supportrevenue.DataValue != null) { crmForm.all.estimatedvalue.DataValue = crmForm.all.new_softwarerevenue.DataValue * crmForm.all.new_supportrevenue.DataValue; } else { crmForm.all.new_result.DataValue = null; }Weiß vielleicht jemand Rat?
Grüße
Max
- 已編輯 Maximilian Förster 2012年5月14日 上午 11:12
所有回覆
-
2012年5月14日 上午 11:22版主
Hallo Max,
in der Zeile Xrm.Page.getattributes["estimatedvalue"].setValue(result); musst du auf jedem Fall die eckigen Klammern durch Runde Klammern ersetzten. Auch würde ich die doppelten Anführungszeichen durch einfache ersetzen, wobei das nicht das Problem sein wird.
Dann würde ich mir mit alert(result); einmal das Ergebnis anzeigen lassen.
Ist das Zielfeld eventuell auf dem Formular schreibgeschützt? Dann musst du folgenden Befehl in das OnLoad des Formulares aufnehmen, damit die Daten in der DB gespeichert werden:
Xrm.Page.getAttribute('estimatedvalue').setSubmitMode('always');
Dein zweites Beispiel beruht noch auf CRM 4.0, das solltest du in CRM 2011 nicht mehr verwenden, es wird in zukünftigen Versionen nicht mehr unterstützt.
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook Twitter- 已標示為解答 Maximilian Förster 2012年5月14日 下午 01:56
-
2012年5月14日 上午 11:47
Hallo Max,
die Werte von val3 und val4 werden niemals zugewiesen. Du setzt val2 einmal und überschreibst den Wert zweimal.
Ich bevorzuge es auch, bei numerischen (oder Währungsfeldern) den Fall IsNULL abzufangen und dann einen Wert Zero zu setzen. Vor allem, wenn ich mit dem Wert dann noch Berechnungen durchführel.
Wie Michael gesagt hat: Mit der alert() Funktion kannst du dir Zwischenschritte anzeigen lassen.
Herzliche Grüße / Best regards Markus Müller If this post answers your question, please click "Mark As Answer" on the post and "Mark as Helpful"
- 已標示為解答 Maximilian Förster 2012年5月14日 下午 01:56
-
2012年5月14日 上午 11:51
Hallo Max,
Die Funktion und die damit verbundene Berechnung stimmt soweit (wie Michael schon erwähnt hat, ist das untere Script für die vorige CRM 4.0-Version). Lediglich in der letzten Zeile beim zurückschreiben des Ergebnisses ist ein Fehler, das sollte so heißen:
Xrm.Page.getAttribute("estimatedvalue").setValue(result);Liebe Grüße,
Andreas
Andreas Buchinger
Microsoft Dynamics Certified Technology Specialist
MCPD: SharePoint Developer 2010- 已標示為解答 Maximilian Förster 2012年5月14日 下午 01:56
-
2012年5月14日 下午 12:07
Danke für die Antworten bis hierhin! Jegliche vor allem Schreibfehler, die sich bis jetzt eingeschlichen haben, sind soweit beseitigt und es funktioniert (gerade ein fehlendes "S" war mit der größte Übeltäter, aber ich habe es nicht mehr realisiert).
Wie fange ich von der Syntax her sauber IsNull ab und setze 0 (anbei ein spontaner Schuss ins Blaue)?
if (val1==null) { val1 = 0; wäre es an dieser Stelle vielleicht sogar dann noch sinnvoll dem leeren Feld über setValue eine 0 zu übergeben? Xrm.Page.getAttribute("new_softwarerevenue").setValue(0); }
und dann für alle Variablen einmal durch?
Ich habe jetzt eine funktioniernde Version geschrieben:
function calculatebooking() { var val1 = Xrm.Page.getAttribute("new_softwarerevenue").getValue(); var val2 = Xrm.Page.getAttribute("new_supportrevenue").getValue(); var val3 = Xrm.Page.getAttribute("new_servicesrevenue").getValue(); var val4 = Xrm.Page.getAttribute("new_3rdpartysellpricerevenue").getValue(); var result = val1+ val2 + val3 + val4; Xrm.Page.getAttribute("estimatedvalue").setValue(result); }
Eine Frage noch zum Schluss. Das "estimated booking" Feld wird jetzt wie gewünscht ausgefüllt. Setze ich "read-only" als Attribut für dieses Feld ist es beim Laden der Opportunity einen Augenblick ausgegraut und dann normal beschreibbar. Woran kann das liegen? Da eigentlich dieses Feld nicht mehr angefasst werden soll, sondern nur noch die Felder für die Rechnung durch Sales Leute ausgefüllt werden sollen. Ich versuche gerade noch zu durchblicken, warum das "read-only" aufgehoben wird.
- 已編輯 Maximilian Förster 2012年5月14日 下午 12:08
- 已編輯 Maximilian Förster 2012年5月14日 下午 12:15
- 已編輯 Maximilian Förster 2012年5月14日 下午 12:17
- 已編輯 Maximilian Förster 2012年5月14日 下午 12:18
- 已編輯 Maximilian Förster 2012年5月14日 下午 01:03
- 已編輯 Maximilian Förster 2012年5月14日 下午 01:03
- 已編輯 Maximilian Förster 2012年5月14日 下午 01:17
-
2012年5月14日 下午 01:51版主
Hallo Max,
bitte immer nur eine Frage pro Beitrag, dann wird es für alle einfacher.
Wenn deine ursprüngliche Frage richtig beantwortet ist wäre es nett, wenn du die richtigen Antworten auch als solche markieren würdest.
Viele Grüße
Michael Sulz
MVP für Microsoft Dynamics CRM
Blog
Website XING LinkedIn Facebook Twitter -
2012年5月14日 下午 01:57Beigetragen habt ihr alle drei ein wenig zu der Lösung meines Problems, also sind die Antworten jetzt auch markiert. Aber soll ich dann jetzt für meinen nächsten "Request" auch einen neuen Thread starten?
-
2012年5月15日 上午 06:46版主