With the following custim sweep action you can read all Retrieval Names of the content elemens that are attached to a FileNet object and write these names into a property of the specified class. In our case we had the ICCMail3 class and want to write the names of all attachments of a mail into a single property to be able to search for them.

Single Value property

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);
importPackage(Packages.com.filenet.api.collection);

function onPolicySweep(SweepObject, SweepPolicy, SweepItems){
}

function onSweep(sweepObject, sweepItems){

	var MAX_PROPERTY_LENGTH = 4000;

	var hcc = HandlerCallContext.getInstance();
	hcc.traceDetail("Entering ICCMailAttachmentHandler.onSweep");
	hcc.traceDetail("sweepObject = " + sweepObject.getProperties().getIdValue(PropertyNames.ID) + " sweepItems.length = " + sweepItems.length);
	hcc.traceDetail("MAX_PROPERTY_LENGTH = " + MAX_PROPERTY_LENGTH);

	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 doc = com.filenet.api.core.Document(item);

			var className = doc.getClassName();
			if(hcc) hcc.traceDetail("   Dokumentklasse: " + className);

			var attachmentNames = extractAttachmentNames(doc, hcc);

			if (attachmentNames != null && attachmentNames !== "") {
				
				var originalLength = attachmentNames.length;
				var truncatedValue = truncateToMaxLength(attachmentNames, MAX_PROPERTY_LENGTH, hcc);
				var wasTruncated = (originalLength > truncatedValue.length);

				doc.getProperties().putValue("ICCAttachmentNames", truncatedValue);
				doc.save(com.filenet.api.constants.RefreshMode.REFRESH);

				if (wasTruncated) {
					if(hcc) hcc.traceDetail("   WARNUNG: Wert wurde truncated von " + originalLength + " auf " + truncatedValue.length + " Zeichen");
					sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, 
						"Attachment-Namen gesetzt (TRUNCATED: " + originalLength + " -> " + truncatedValue.length + " chars)");
				} else {
					if(hcc) hcc.traceDetail("   ICCAttachmentNames gesetzt auf: " + truncatedValue);
					sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, 
						"Attachment-Namen gesetzt (" + truncatedValue.length + " chars)");
				}
			} else {
				if(hcc) hcc.traceDetail("   Keine ContentElements gefunden");
				sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, 
					"Keine Attachments vorhanden - Property nicht gesetzt");
			}

		}catch (ioe){
			sweepItems[ii].setOutcome(SweepItemOutcome.FAILED, 
				"ICCMailAttachmentHandler: " + ioe.rhinoException.getMessage());
			hcc.traceDetail("FAILED " + ioe.rhinoException.getMessage());
		}
	}

	hcc.traceDetail("Exiting ICCMailAttachmentHandler.onSweep");
}

function getRequiredProperties(){
	var pnames = ['Id', 'ContentElements', 'ICCAttachmentNames'];
	return pnames.toString();
}

function truncateToMaxLength(value, maxLength, hcc){
	if (value == null || value.length <= maxLength) {
		return value;
	}

	var truncateIndicator = "...";
	var effectiveMaxLength = maxLength - truncateIndicator.length;

	if (effectiveMaxLength < 0) {
		effectiveMaxLength = maxLength;
		truncateIndicator = "";
	}

	var truncated = value.substring(0, effectiveMaxLength);

	var lastComma = truncated.lastIndexOf(',');
	
	if (lastComma > 0 && lastComma > (effectiveMaxLength * 0.8)) {
		truncated = truncated.substring(0, lastComma);
		if(hcc) hcc.traceDetail("      Intelligentes Truncate am Komma bei Position: " + lastComma);
	} else {
		if(hcc) hcc.traceDetail("      Hartes Truncate bei Position: " + effectiveMaxLength);
	}

	return truncated + truncateIndicator;
}

function extractAttachmentNames(doc, hcc){
	try {
		var contentElements = doc.get_ContentElements();

		if (contentElements == null || contentElements.isEmpty()) {
			if(hcc) hcc.traceDetail("      Keine ContentElements vorhanden");
			return null;
		}

		if(hcc) hcc.traceDetail("      Anzahl ContentElements: " + contentElements.size());

		var retrievalNames = [];
		var iterator = contentElements.iterator();
		var elementIndex = 0;

		while (iterator.hasNext()) {
			var contentElement = iterator.next();
			elementIndex++;

			if(hcc) hcc.traceDetail("      Verarbeite ContentElement #" + elementIndex);

			var retrievalName = getRetrievalNameFromElement(contentElement, hcc);

			if (retrievalName != null && retrievalName !== "") {
				retrievalNames.push(retrievalName);
				if(hcc) hcc.traceDetail("        -> RetrievalName: " + retrievalName);
			} else {
				if(hcc) hcc.traceDetail("        -> Kein RetrievalName gefunden");
			}
		}

		if (retrievalNames.length > 0) {
			var result = retrievalNames.join(", ");
			if(hcc) hcc.traceDetail("      Gesamt-Result vor Truncate: " + result.length + " Zeichen, " + retrievalNames.length + " Attachments");
			return result;
		}

		return null;

	} catch (e) {
		if(hcc) hcc.traceDetail("      Fehler beim Extrahieren der Attachment-Namen: " + e.message);
		throw e;
	}
}

function getRetrievalNameFromElement(contentElement, hcc){
	try {
		if (contentElement instanceof com.filenet.api.core.ContentTransfer) {
			var contentTransfer = com.filenet.api.core.ContentTransfer(contentElement);
			var retrievalName = contentTransfer.get_RetrievalName();

			if (retrievalName != null && retrievalName !== "") {
				return retrievalName;
			}
		}
		else if (contentElement instanceof com.filenet.api.core.ContentReference) {
			var contentReference = com.filenet.api.core.ContentReference(contentElement);

			try {
				var retrievalName = contentReference.get_RetrievalName();
				if (retrievalName != null && retrievalName !== "") {
					return retrievalName;
				}
			} catch(e) {
				// RetrievalName nicht verfügbar
			}

			var contentLocation = contentReference.get_ContentLocation();
			if (contentLocation != null && contentLocation !== "") {
				var fileName = extractFileNameFromPath(contentLocation);
				if (fileName != null) {
					return fileName;
				}
			}
		}

		return null;

	} catch(e) {
		if(hcc) hcc.traceDetail("        Fehler beim Extrahieren von ContentElement: " + e.message);
		return null;
	}
}

function extractFileNameFromPath(path){
	if (path == null || path === "") {
		return null;
	}

	var lastSlash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));

	if (lastSlash >= 0 && lastSlash < path.length - 1) {
		return path.substring(lastSlash + 1);
	}

	return path;
}

Multi Value property

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);
importPackage(Packages.com.filenet.api.collection);

function onPolicySweep(SweepObject, SweepPolicy, SweepItems){
}

function onSweep(sweepObject, sweepItems){

	var hcc = HandlerCallContext.getInstance();
	hcc.traceDetail("Entering ICCMailAttachmentHandler.onSweep");
	hcc.traceDetail("sweepObject = " + sweepObject.getProperties().getIdValue(PropertyNames.ID) + " sweepItems.length = " + sweepItems.length);

	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 doc = com.filenet.api.core.Document(item);

			var className = doc.getClassName();
			if(hcc) hcc.traceDetail("   Dokumentklasse: " + className);

			var attachmentNamesArray = extractAttachmentNamesArray(doc, hcc);

			if (attachmentNamesArray != null && attachmentNamesArray.length > 0) {
				
				// Hole die Property-Definition, um die richtige Liste zu erstellen
				var props = doc.getProperties();
				
				// Erstelle eine neue Property mit dem richtigen Typ
				try {
					// Hole die existierende Liste oder erstelle eine neue
					var existingList = props.getObjectValue("ICCAttachmentNamesMulti");
					if (existingList != null) {
						existingList.clear();
					} else {
						// Erstelle neue leere Liste über die Property selbst
						existingList = new java.util.Vector();
					}
				} catch(e) {
					// Falls die Property noch nicht existiert, erstelle neue Liste
					existingList = new java.util.Vector();
				}
				
				// Füge alle Werte hinzu
				for (var i = 0; i < attachmentNamesArray.length; i++) {
					var lowercaseName = attachmentNamesArray[i].toLowerCase();
					existingList.add(lowercaseName);
					if(hcc) hcc.traceDetail("     Füge hinzu: " + lowercaseName);
				}

				// Setze die Liste
				props.putObjectValue("ICCAttachmentNamesMulti", existingList);
				doc.save(com.filenet.api.constants.RefreshMode.REFRESH);

				if(hcc) hcc.traceDetail("   ICCAttachmentNamesMulti gesetzt mit " + attachmentNamesArray.length + " Einträgen");
				sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, 
					attachmentNamesArray.length + " Attachment-Namen gesetzt (LOWERCASE)");

			} else {
				if(hcc) hcc.traceDetail("   Keine ContentElements gefunden");
				
				// Setze leere Liste
				var emptyList = new java.util.Vector();
				doc.getProperties().putObjectValue("ICCAttachmentNamesMulti", emptyList);
				doc.save(com.filenet.api.constants.RefreshMode.REFRESH);
				
				sweepItems[ii].setOutcome(SweepItemOutcome.PROCESSED, 
					"Keine Attachments vorhanden - Property auf leer gesetzt");
			}

		}catch (ioe){
			sweepItems[ii].setOutcome(SweepItemOutcome.FAILED, 
				"ICCMailAttachmentHandler: " + ioe.rhinoException.getMessage());
			hcc.traceDetail("FAILED " + ioe.rhinoException.getMessage());
		}
	}

	hcc.traceDetail("Exiting ICCMailAttachmentHandler.onSweep");
}

function getRequiredProperties(){
	var pnames = ['Id', 'ContentElements', 'ICCAttachmentNamesMulti'];
	return pnames.toString();
}

function extractAttachmentNamesArray(doc, hcc){
	try {
		var contentElements = doc.get_ContentElements();

		if (contentElements == null || contentElements.isEmpty()) {
			if(hcc) hcc.traceDetail("      Keine ContentElements vorhanden");
			return null;
		}

		if(hcc) hcc.traceDetail("      Anzahl ContentElements: " + contentElements.size());

		var retrievalNames = [];
		var iterator = contentElements.iterator();
		var elementIndex = 0;

		while (iterator.hasNext()) {
			var contentElement = iterator.next();
			elementIndex++;

			if(hcc) hcc.traceDetail("      Verarbeite ContentElement #" + elementIndex);

			var retrievalName = getRetrievalNameFromElement(contentElement, hcc);

			if (retrievalName != null && retrievalName !== "") {
				retrievalNames.push(retrievalName);
				if(hcc) hcc.traceDetail("        -> RetrievalName: " + retrievalName);
			} else {
				if(hcc) hcc.traceDetail("        -> Kein RetrievalName gefunden");
			}
		}

		if (retrievalNames.length > 0) {
			if(hcc) hcc.traceDetail("      Gesamt: " + retrievalNames.length + " Attachments gefunden");
			return retrievalNames;
		}

		return null;

	} catch (e) {
		if(hcc) hcc.traceDetail("      Fehler beim Extrahieren der Attachment-Namen: " + e.message);
		throw e;
	}
}

function getRetrievalNameFromElement(contentElement, hcc){
	try {
		if (contentElement instanceof com.filenet.api.core.ContentTransfer) {
			var contentTransfer = com.filenet.api.core.ContentTransfer(contentElement);
			var retrievalName = contentTransfer.get_RetrievalName();

			if (retrievalName != null && retrievalName !== "") {
				return retrievalName;
			}
		}
		else if (contentElement instanceof com.filenet.api.core.ContentReference) {
			var contentReference = com.filenet.api.core.ContentReference(contentElement);

			try {
				var retrievalName = contentReference.get_RetrievalName();
				if (retrievalName != null && retrievalName !== "") {
					return retrievalName;
				}
			} catch(e) {
				// RetrievalName nicht verfügbar
			}

			var contentLocation = contentReference.get_ContentLocation();
			if (contentLocation != null && contentLocation !== "") {
				var fileName = extractFileNameFromPath(contentLocation);
				if (fileName != null) {
					return fileName;
				}
			}
		}

		return null;

	} catch(e) {
		if(hcc) hcc.traceDetail("        Fehler beim Extrahieren von ContentElement: " + e.message);
		return null;
	}
}

function extractFileNameFromPath(path){
	if (path == null || path === "") {
		return null;
	}

	var lastSlash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));

	if (lastSlash >= 0 && lastSlash < path.length - 1) {
		return path.substring(lastSlash + 1);
	}

	return path;
}