Wenn Sie auf callbacks in Teamsware Aktionen oder andere Ausdruckskonfigurationen warten müssen, bevor Sie weiterverarbeiten, empfiehlt sich die Verwendung des jQuery.Deferred()-Objekts.
Der folgende Codeschnipsel zeigt, wie dies erreicht werden kann:
var deferrer = jQuery.Deferred(); //new deferred object is created.
window.setTimeout(function () {
deferrer.resolve(); //Resolve the deferred. Then e.g. next predefined Rich Form's actions will start to execute.
}, 10000);
return deferrer.promise(); //returns promise object
Nachdem ein neues Element hinzugefügt wurde, möchten Sie dessen Berechtigungen aktualisieren und nur dem Genehmigenden die Bearbeitung dieses Elements ermöglichen.
Um dies zu erreichen, öffnen Sie ein neues Formular im Solution Studio und fügen Sie eine neue Aktion Skript ausführen nach der Aktion Formular speichern für die Schaltfläche Speichern hinzu:
Javascript code für die Aktion Script ausführen (Berechtigungen aktualisieren):
var deferrer = jQuery.Deferred();
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
var list = web.get_lists().getByTitle("DemoList");
var item = list.getItemById([[ID]]);
var approver = web.ensureUser([[Approver.LoginName]]);
//Break permission inheritance and clear existing permission rules.
item.breakRoleInheritance(false,true);
var itemAssignments = item.get_roleAssignments();
//Set read-only permisisons for site default groups
var roleDefBindingsReader = SP.RoleDefinitionBindingCollection.newObject(ctx);
roleDefBindingsReader.add(web.get_roleDefinitions().getByType(SP.RoleType.reader));
itemAssignments.add(web.get_associatedVisitorGroup(), roleDefBindingsReader);
itemAssignments.add(web.get_associatedMemberGroup(), roleDefBindingsReader);
itemAssignments.add(web.get_associatedOwnerGroup(), roleDefBindingsReader);
//Allow Approver to edit the item
var roleDefBindingsApprover = SP.RoleDefinitionBindingCollection.newObject(ctx);
roleDefBindingsApprover.add(ctx.get_web().get_roleDefinitions().getByType(SP.RoleType.contributor));
itemAssignments.add(approver, roleDefBindingsApprover);
ctx.executeQueryAsync(function() {
deferrer.resolve();
}, function(sender, args){
deferrer.reject("Failed to update item permissions: " + args.get_message())
});
return deferrer.promise();