If you need to change the owner of objects in bulk you can use the following custom sweep action.
importPackage(java.lang);
importClass(java.lang.System);
importPackage(Packages.com.filenet.api.sweep);
importPackage(Packages.com.filenet.api.property);
importPackage(Packages.com.filenet.api.security);
importPackage(Packages.com.filenet.api.core);
importPackage(Packages.com.filenet.api.constants);
importPackage(Packages.com.filenet.api.engine);
function onPolicySweep(SweepObject, SweepPolicy, SweepItems){
}
function onSweep(sweepObject, sweepItems){
// Neuer Owner für alle Objekte
var newOwner = 'bjust@p8.tta';
// OPTIONAL: Nur bestimmte alte Owner ersetzen (null = alle Owner ändern)
// var oldOwnersToReplace = ['olduser1@p8.tta', 'olduser2@p8.tta'];
var oldOwnersToReplace = null; // null = ALLE Owner werden geändert
var hcc = HandlerCallContext.getInstance();
hcc.traceDetail("Entering ChangeOwnerHandler.onSweep");
hcc.traceDetail("sweepObject = " + sweepObject.getProperties().getIdValue(PropertyNames.ID) + " sweepItems.length = " + sweepItems.length);
hcc.traceDetail("Neuer Owner: " + newOwner);
ii = 0;
for (ii = 0; ii < sweepItems.length; ii++){
if (hcc != null && hcc.isShuttingDown()){
throw new EngineRuntimeException(
ExceptionCode.E_BACKGROUND_TASK_TERMINATED,
this.constructor.name + " is terminating prematurely because the server is shutting down"
);
}
var item = sweepItems[ii].getTarget();
var msg = "sweepItems[" + ii + "]= " + item.getProperties().getIdValue("ID");
hcc.traceDetail(msg);
try{
var CEObject = castToCorrectType(item, hcc);
if (CEObject == null) {
hcc.traceDetail(" WARNUNG: Unbekannter Objekttyp, wird übersprungen");
sweepItems[ii].setOutcome(SweepItemOutcome.SKIPPED, "Unbekannter Objekttyp");
continue;
}
var result = changeOwner(CEObject, newOwner, oldOwnersToReplace, hcc);
if (result.changed) {
sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED,
"Owner geändert von '" + result.oldOwner + "' zu '" + newOwner + "'");
} else {
sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, result.reason);
}
}catch (ioe){
sweepItems[ii].setOutcome(SweepItemOutcome.FAILED, "ChangeOwnerHandler: " + ioe.rhinoException.getMessage());
hcc.traceDetail("FAILED " + ioe.rhinoException.getMessage());
}
}
hcc.traceDetail("Exiting ChangeOwnerHandler.onSweep");
}
/*
* Erforderliche Properties für den Sweep
*/
function getRequiredProperties()
{
var pnames = ['Id', 'Owner'];
return pnames.toString();
}
/*
* Ändert den Owner des Objekts.
*
* @param ceObject - Das FileNet-Objekt (Document, Folder oder CustomObject)
* @param newOwner - Der neue Owner (z.B. 'admin@p8.tta')
* @param oldOwnersToReplace - Array mit alten Ownern die ersetzt werden sollen,
* oder null um ALLE Owner zu ändern
* @param hcc - HandlerCallContext für Logging
* @return Object mit {changed: boolean, oldOwner: string, reason: string}
*/
function changeOwner(ceObject, newOwner, oldOwnersToReplace, hcc) {
var result = {
changed: false,
oldOwner: null,
reason: null
};
try {
// Aktuellen Owner holen
var currentOwner = ceObject.get_Owner();
result.oldOwner = currentOwner;
if(hcc) hcc.traceDetail(" Aktueller Owner: " + currentOwner);
if(hcc) hcc.traceDetail(" Neuer Owner: " + newOwner);
// Prüfen ob Owner bereits korrekt ist
if (currentOwner != null && currentOwner.toLowerCase() === newOwner.toLowerCase()) {
if(hcc) hcc.traceDetail(" Owner ist bereits korrekt gesetzt");
result.reason = "Owner bereits korrekt: " + currentOwner;
return result;
}
// Wenn Filter gesetzt ist, prüfen ob aktueller Owner geändert werden soll
if (oldOwnersToReplace != null && oldOwnersToReplace.length > 0) {
var shouldReplace = false;
for (var i = 0; i < oldOwnersToReplace.length; i++) {
if (currentOwner != null &&
currentOwner.toLowerCase() === oldOwnersToReplace[i].toLowerCase()) {
shouldReplace = true;
break;
}
}
if (!shouldReplace) {
if(hcc) hcc.traceDetail(" Owner '" + currentOwner + "' ist nicht in der Liste zu ersetzender Owner");
result.reason = "Owner '" + currentOwner + "' nicht in Filterliste";
return result;
}
}
// Owner ändern
ceObject.set_Owner(newOwner);
ceObject.save(com.filenet.api.constants.RefreshMode.NO_REFRESH);
if(hcc) hcc.traceDetail(" Owner erfolgreich geändert von '" + currentOwner + "' zu '" + newOwner + "'");
result.changed = true;
result.reason = "Erfolgreich geändert";
return result;
} catch(e) {
if(hcc) hcc.traceDetail(" Fehler beim Ändern des Owners: " + e.message);
throw e;
}
}
/*
* Erkennt den Objekttyp anhand von instanceof und castet entsprechend.
* Unterstützt: Document, Folder, CustomObject
*/
function castToCorrectType(item, hcc) {
try {
var className = item.getClassName();
if(hcc) hcc.traceDetail(" Objektklasse: " + className);
if (item instanceof com.filenet.api.core.Document) {
if(hcc) hcc.traceDetail(" Typ erkannt: Document");
return com.filenet.api.core.Document(item);
} else if (item instanceof com.filenet.api.core.Folder) {
if(hcc) hcc.traceDetail(" Typ erkannt: Folder");
return com.filenet.api.core.Folder(item);
} else if (item instanceof com.filenet.api.core.CustomObject) {
if(hcc) hcc.traceDetail(" Typ erkannt: CustomObject");
return com.filenet.api.core.CustomObject(item);
} else {
if(hcc) hcc.traceDetail(" instanceof-Prüfung fehlgeschlagen, versuche Fallback...");
return castByClassName(item, className, hcc);
}
} catch(e) {
if(hcc) hcc.traceDetail(" Fehler beim Typ-Casting: " + e.message);
return null;
}
}
/*
* Fallback: Casting über die Klassenhierarchie (für Subklassen).
*/
function castByClassName(item, className, hcc) {
try {
var classDesc = item.get_ClassDescription();
while (classDesc != null) {
var superClassName = classDesc.get_SymbolicName();
if(hcc) hcc.traceDetail(" Prüfe Basisklasse: " + superClassName);
if (superClassName === "Document") {
if(hcc) hcc.traceDetail(" Fallback Typ erkannt: Document (Subklasse von " + className + ")");
return com.filenet.api.core.Document(item);
} else if (superClassName === "Folder") {
if(hcc) hcc.traceDetail(" Fallback Typ erkannt: Folder (Subklasse von " + className + ")");
return com.filenet.api.core.Folder(item);
} else if (superClassName === "CustomObject") {
if(hcc) hcc.traceDetail(" Fallback Typ erkannt: CustomObject (Subklasse von " + className + ")");
return com.filenet.api.core.CustomObject(item);
} else if (superClassName === "IndependentlyPersistableObject" || superClassName === "RepositoryObject") {
break;
}
classDesc = classDesc.get_SuperclassDescription();
}
} catch(e) {
if(hcc) hcc.traceDetail(" Fehler beim Fallback-Casting: " + e.message);
}
return null;
}
You need to replace the parameter „var newOwner = ‚bjust@p8.tta‘;“ with you required new user. You can also modify the owner based on the value of previous set user. Therefore change the following parameter „var oldOwnersToReplace = null; with the required user to change.