Thank you so Much.
Here the actual Rule:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Rule PUBLIC "sailpoint.dtd" "sailpoint.dtd">
<Rule created="1738918407678" id="0a01295994a81c748194df9d2dfe626a" language="beanshell" modified="1739174563682" name="Test - Estrazione Identities cessate con account profilati">
<Source>
import sailpoint.object.QueryOptions;
import sailpoint.object.Filter;
import sailpoint.object.Identity;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
import java.time.Duration;
import java.time.Instant;
System.out.println("\n========================== LISTA IDENTITA' NON ATTIVE con Account profilati - START =========================");
Instant start = Instant.now();
// Verifica se il contesto è disponibile
if (context == null) {
throw new IllegalArgumentException("Il contesto SailPoint non è disponibile.");
}
// Lista per memorizzare le identità filtrate
List<String> filtered_identities = new ArrayList();
// Creazione di un oggetto QueryOptions per impostare i filtri
QueryOptions qo = new QueryOptions();
// Aggiunge filtro per le sole Identità NON attive
qo.addFilter(Filter.eq("inactive", true)); // Recupera solo utenti attivi
// Cerca solo quelle con il name non nullo, scrupolo inutile
qo.addFilter(Filter.notnull("name"));
// Devono avere almeno un link profilato
qo.addFilter(Filter.notnull("links.application.name"));
qo.addFilter(Filter.ne("links.application.name", ""));
// Devono avere almeno un link NON disabilitato (iiqDisabled = false)
qo.addFilter(Filter.ne("links.iiqDisabled",true));
// Creazione di un lista con i soli attributi necessari
List attributes = new ArrayList();
attributes.add("name"); // row[0]
attributes.add("displayName"); // row[1]
// Esecuzione della query con il filtro di selezione 'go' e gli attributi specifici da estrarre
Iterator it = context.search(Identity.class, qo, attributes);
while (it.hasNext()) {
Object[] row = it.next();
String name = (row[0] != null) ? row[0].toString() : "Sconosciuto"; // Se il name è nullo, assegna "Sconosciuto"
String displayName = (row[1] != null) ? row[1].toString() : "Sconosciuto"; // Se il displayNAme è nullo, assegna "Sconosciuto"
String dispName = name + " (" + displayName + ")";
System.out.println("dispName : " + dispName);
filtered_identities.add(dispName);
}
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("=============================================================================================================");
System.out.println("Durata dell'elaborazione: " + duration.toMillis() + " millisecondi");
System.out.println("Numero Identita estratte: " + filtered_identities.size());
//System.out.println("filteredIdentities : " + filtered_identities);
System.out.println("========================== LISTA IDENTITA' NON ATTIVE con Account profilati - END ==========================");
</Source>
</Rule>