Vielen Dank an alle für eure hilfreichen Beiträge!
Ich habe das jetzt Quick'n'Dirty hingebogen. Ich habe zunächst ein Benutzerdefiniertes Feld "Wiederholen bis" (Date) definiert. Außerdem noch ein Picklist-Feld in denen man die Intervalle auswählen kann (1- wöchentlich, 2- alle zwei Wochen etc.).
Wenn man auf dem Speicherbutton klickt wird geprüft ob dieses Feld ein Wert enthält. Ist dies der Fall werden die Werte in das neu geöffnete Fenster übergeben:
//Neues Fenster öffnen ...
var oClonedActivity = window.open('/activities/serviceappointment/edit.aspx',0,'menubar=0, status=1, width=1000, height=600');
//... warten bis das Fenster vollständig geöffnet ist..
var testpage = 0;
while(testpage==0)
{
if (oClonedActivity.document.readyState == 'complete')
{
testpage=1;
}
}
//... Werte werden übernommen ...
oClonedActivity.document.crmForm.subject.DataValue = oSource.subject.DataValue;
oClonedActivity.document.crmForm.serviceid.DataValue = oSource.serviceid.DataValue;
oClonedActivity.document.crmForm.customers.DataValue = oSource.customers.DataValue;
...
Probleme ergeben sich beim Ressourcen-Feld, da die Zuordnung intern über eine eigene Tabelle erfolgt: wenn man das Lookup-Feld einfach kopiert werden die GUIDs ebenfalls kopiert - so wurde ich mit einer Fehlermeldung über die Integritätsverletztung informiert. Also einfach ein neues Lookup-Feld erzeugen:
var i = 0;
var lookupItem = oClonedActivity.document.crmForm.resources.DataValue;
var newLookup = new Array();
while (lookupItem[i] != null){
newLookup[i] = new LookupControlItem( lookupItem[i].id, lookupItem[i].type, lookupItem[i].name );
i++;
}
oClonedActivity.document.crmForm.resources.DataValue = newLookup;
Und schon kann der ganze Spaß losgehen. Die Idee mit dem eigenen Button werde ich mir mal überlegen.
Man kann die ServiceAppointments natürlich auch über den Webservice erzeugen, jedoch hatte ich damit immer SecurityExceptions und so bin ich auf die Client-Seite gewechselt ;-)
Auf wunsch kann ich auch den ganzen Code posten...
Grüße
Fabian