Referencias de atributo - Amazon Cloud Directory

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Referencias de atributo

Las facetas de Amazon Cloud Directory contienen atributos. Los atributos pueden ser una definición de atributo o una referencia de atributo. Las definiciones de atributo son atributos que declaran su nombre y tipo primitivo (string, binary, Boolean, DateTime o number). Opcionalmente, también pueden declarar el comportamiento requerido, el valor predeterminado, el indicador inmutable y reglas de atributo (por ejemplo, longitud mínima o máxima).

Las referencias de atributo son atributos que obtienen su tipo primitivo, el valor predeterminado, el indicador inmutable y las reglas de atributo de otra definición de atributo previamente existente. No tienen su propio tipo primitivo, ni valores predeterminados, ni indicador inmutable ni reglas, ya que dichas propiedades provienen de la definición de atributo de destino.

Las referencias de atributos pueden anular el comportamiento requerido de una definición de destino (más detalles acerca de esto a continuación).

Al crear una referencia de atributo, proporciona solo un nombre de atributo y la definición de atributo de destino (que incluye el nombre de la faceta y el nombre de atributo de la definición de atributo de destino). Las referencias de atributo pueden no hacer referencia a otras referencias de atributo. Además, en este momento, es posible que las referencias de atributo no se dirijan a definiciones de atributo de otro esquema.

Puede usar una referencia de atributo si desea que dos o más atributos de un objeto hagan referencia a la misma ubicación de almacenamiento. Por ejemplo, imagine un objeto que tenga aplicadas una faceta User y otra EnterpriseUser. La faceta User tiene una definición de atributo FirstName, mientras que EnterpriseUser tiene una referencia de atributo que apunta a User.FirstName. Como ambos atributos FirstName hacen referencia a la misma ubicación de almacenamiento del objeto, cualquier cambio que se produzca en User.FirstName o en EnterpriseUser.FirstName tendrá el mismo efecto.

Ejemplo de API

En el ejemplo siguiente se muestra el uso de las referencias de atributo mediante la API de Cloud Directory. En este ejemplo, una faceta base contiene una definición de atributo y otra faceta contiene un atributo que hace referencia a un atributo de la faceta base. Tenga en cuenta que el atributo de referencia puede marcarse como Required (obligatorio), aunque la faceta base lo esté como Not Required (no obligatoria).

// create base facet CreateFacetRequest req1 = new CreateFacetRequest() .withSchemaArn(devSchemaArn) .withName("baseFacet") .withAttributes(List( new FacetAttribute() .withName("baseAttr") .withRequiredBehavior(RequiredAttributeBehavior.NOT_REQUIRED) .withAttributeDefinition(new FacetAttributeDefinition().withType(FacetAttributeType.STRING)))) .withObjectType(ObjectType.DIRECTORY) cloudDirectoryClient.createFacet(req1) // create another facet that refers to the base facet CreateFacetRequest req2 = new CreateFacetRequest() .withSchemaArn(devSchemaArn) .withName("facetA") .withAttributes(List( new FacetAttribute() .withName("ref") .withRequiredBehavior(RequiredAttributeBehavior.REQUIRED_ALWAYS) .withAttributeReference(new FacetAttributeReference() .withTargetFacetName("baseFacet") .withTargetAttributeName("baseAttr")))) .withObjectType(ObjectType.DIRECTORY) cloudDirectoryClient.createFacet(req2)

Ejemplo de JSON:

En el ejemplo siguiente se muestra el uso de referencias de atributo en un modelo JSON. El esquema representado por este modelo es idéntico al modelo anterior.

{ "facets" : { "baseFacet" : { "facetAttributes" : { "baseAttr" : { "attributeDefinition" : { "attributeType" : "STRING" }, "requiredBehavior" : "NOT_REQUIRED" } }, "objectType" : "DIRECTORY" }, "facetA" : { "facetAttributes" : { "ref" : { "attributeReference" : { "targetFacetName" : "baseFacet", "targetAttributeName" : "baseAttr" }, "requiredBehavior" : "REQUIRED_ALWAYS" } }, " objectType" : "DIRECTORY" } }

Cuestiones acerca de las referencias de atributo

Las referencias de atributo deben dirigirse a una definición de atributo que ya exista en el mismo esquema.

  • Las referencias de atributo pueden dirigirse a una definición de atributo que ya exista en la misma faceta o en otra distinta.

  • Las referencias de atributo pueden no dirigirse a otras referencias de atributo.

  • Las facetas que contienen definiciones de atributo que son el destino de la referencia de atributo de otra faceta no se pueden eliminar hasta que se hayan eliminado todas las referencias.

Puede usar las referencias de atributo de la misma forma en que usa las definiciones de atributo tradicionales, mediante la creación de objetos o la aplicación de facetas a objetos existentes.

nota

Puede aplicar facetas con referencias a otras facetas, pero no es necesario aplicar las facetas de destino directamente. Si no se aplica la faceta de destino, no se producirá ningún cambio en el comportamiento de la referencia de atributo (debe aplicar facetas de destino solo si desea que los demás atributos de esa faceta existan en el objeto).

Establecimiento de los valores de referencia de atributo

Puede llamar a la acción de API UpdateObjectAttributes si desea cambiar el valor de un atributo. La actualización (o eliminación) de la definición o de cualquier otra referencia a esa misma definición de ese objeto tiene el mismo efecto.

Obtención de los valores de referencia de atributo

Puede llamar a la acción de API ListObjectAttributes para recuperar alias de almacenamiento. Esta llamada devuelve una lista de tuplas. Cada una de ellas contiene una clave de atributo y un valor asociado. Las claves de atributo corresponden a la lista de alias de almacenamiento presentes en ese objeto.

nota

Es posible que se devuelva una clave de atributo para una faceta que no se ha aplicado de forma explícita a un objeto. Esto puede ocurrir cuando las referencias de atributo se dirigen a facetas que no se aplican al objeto.

Por ejemplo, imagine que tiene una faceta User y otra EnterpriseUser. El atributo EnterpriseUser.FirstName hace referencia a User.FirstName. Luego se aplican tanto la faceta User como EnterpriseUser a un objeto, se establece User.FirstName en Robert y, posteriormente, se establece EnterpriseUser.FirstName en Bob. Cuando llama a ListObjectAttributes, solo ve "User.FirstName = Bob", ya que solo hay un alias de almacenamiento para ambos atributos FirstName.

Uso de índices con las referencias de atributo

Solo puede crear índices con una definición de atributo, no con una referencia. La lista de un índice no devuelve claves de atributo para las referencias de atributo. No obstante, devuelve claves de atributo para cualquier definición de atributo a la que se dirijan las referencias que existan en el objeto indexado. En otras palabras, en la capa de índice, las referencias de atributo se tratan simplemente como el identificador alternativo de un atributo, que se resuelve como el identificador de definición de atributo correcto en el tiempo de ejecución.

Por ejemplo, imagine que tiene un índice para el atributo FirstName de la faceta User. Usted asocia un objeto teniendo aplicada únicamente la faceta EnterpriseUser. A continuación, establece el valor para el atributo EnterpriseUser.FirstName de ese objeto en Bob. Por último, llama a la acción ListIndex. Los resultados contienen únicamente "User.FirstName = Bob".

Comportamiento requerido para las referencias de atributo

Una referencia de atributo puede tener un comportamiento requerido que sea distinto de su definición de atributo de destino. Esto permite que la definición de base sea opcional, al mismo tiempo que puede requerirse una referencia a esa misma definición. Cuando un objeto tiene una definición de base y una o varias referencias a la misma definición de base, la definición de base y todas las referencias deben adherirse al comportamiento requerido en todos los atributos relacionados.

  • Al igual que con las definiciones de atributo, debe proporcionar los valores de las definiciones de atributo requeridas al crear el objeto o al añadir una faceta a un objeto existente.

  • Por comodidad, si más de un atributo de un objeto hace referencia a la misma ubicación de almacenamiento, solo debe proporcionar un valor para uno de los atributos de esa ubicación de almacenamiento.

  • De la misma forma, si proporciona varios valores para la misma ubicación de almacenamiento, estos deben ser iguales.