Wie einfach klingt eigentlich die folgende Aufgabe?
Erstelle einen Button auf dem Opportunity Objekt. Der Button muss den Record Type der offenen Opportunity ändern.
Nach einer kurzen Überlegungspause musste ich zugeben, dass die Aufgabe alles Andere als trivial ist.
Dafür muss eine neue VisualForce Seite entwickelt werden, eine neue Apex Klasse. Nicht zu vergessen ist die Testabdeckung.
Ziemlich aufwendig...
Aber nicht mit JavaScript!
Mit dem angehängten Code lässt sich der Aufwand deutlich reduzieren.
Code kopieren, den Record Type Namen anpassen, Button einbinden - 10 Minuten Aufwand.
{!REQUIRESCRIPT("/soap/ajax/24.0/connection.js")}
var query = "select name, id from recordtype where name='Neue Opportunity'";
var recordtype_NewOpp = sforce.connection.query(query);
var records = recordtype_NewOpp.getArray("records");
try{
sforce.connection.sessionid = '{!GETSESSIONID()}';
var opp = new sforce.SObject("Opportunity");
opp.id='{!Opportunity.Id}';
opp.RecordTypeId =records[0].Id;
var result = sforce.connection.update([opp]);
}catch (ex){
alert(ex);
}
if(result[0].success=='false'){
alert(result[0].errors.message);
}else{
location.reload(true);
}
Erstelle einen Button auf dem Opportunity Objekt. Der Button muss den Record Type der offenen Opportunity ändern.
Nach einer kurzen Überlegungspause musste ich zugeben, dass die Aufgabe alles Andere als trivial ist.
Dafür muss eine neue VisualForce Seite entwickelt werden, eine neue Apex Klasse. Nicht zu vergessen ist die Testabdeckung.
Ziemlich aufwendig...
Aber nicht mit JavaScript!
Mit dem angehängten Code lässt sich der Aufwand deutlich reduzieren.
Code kopieren, den Record Type Namen anpassen, Button einbinden - 10 Minuten Aufwand.
{!REQUIRESCRIPT("/soap/ajax/24.0/connection.js")}
var query = "select name, id from recordtype where name='Neue Opportunity'";
var recordtype_NewOpp = sforce.connection.query(query);
var records = recordtype_NewOpp.getArray("records");
try{
sforce.connection.sessionid = '{!GETSESSIONID()}';
var opp = new sforce.SObject("Opportunity");
opp.id='{!Opportunity.Id}';
opp.RecordTypeId =records[0].Id;
var result = sforce.connection.update([opp]);
}catch (ex){
alert(ex);
}
if(result[0].success=='false'){
alert(result[0].errors.message);
}else{
location.reload(true);
}
Ich gehe dabei gerne einen zweistufigen Weg:
AntwortenLöschenein Custom Button mit Javascript Remoting wie oben, allerdings verkürzt um nur eine Checkbox zu setzen.
Dazu ein Workflow, der abhängig von der Checkbox den RecordType setzt.
Etwas mehr Aufwand, etwas leichteres Handling,
Hier mein Button Code:
// custom button to set a field!
{!REQUIRESCRIPT("/soap/ajax/24.0/connection.js")}
var myOpportunity = new sforce.SObject("Opportunity");
myOpportunity.id = "{!myOpportunity.Id}";
//alert(myOpportunity.id);
myOpportunity.myflag__c = "true";
var result = sforce.connection.update([myOpportunity]);
if (result[0].getBoolean("success"))
{
// Refresh window
window.location.reload();
}
else
{
alert("Error saving Trial");
}