private ConnectorOperationOptions createConnectorOperationOptions(ProvisioningContext ctx, ProvisioningOperationOptions options, OperationResult result) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, ExpressionEvaluationException { if (options == null) { return null; } String runAsAccountOid = options.getRunAsAccountOid(); if (runAsAccountOid == null) { return null; } RunAsCapabilityType capRunAs = ctx.getResourceEffectiveCapability(RunAsCapabilityType.class); if (capRunAs == null) { LOGGER.trace("Operation runAs requested, but resource does not have the capability. Ignoring runAs"); return null; } PrismObject<ShadowType> runAsShadow; try { runAsShadow = shadowManager.getRepoShadow(runAsAccountOid, result); } catch (ObjectNotFoundException e) { throw new ConfigurationException("Requested non-existing 'runAs' shadow", e); } ProvisioningContext runAsCtx = ctxFactory.create(runAsShadow, null, ctx.getTask(), result); shadowCaretaker.applyAttributesDefinition(runAsCtx, runAsShadow); ResourceObjectIdentification runAsIdentification = ResourceObjectIdentification.createFromShadow(runAsCtx.getObjectClassDefinition(), runAsShadow.asObjectable()); ConnectorOperationOptions connOptions = new ConnectorOperationOptions(); LOGGER.trace("RunAs identification: {}", runAsIdentification); connOptions.setRunAsIdentification(runAsIdentification); return connOptions; }