Compartir a través de


Ámbito y visibilidad de la definición de actividad

El ámbito y visibilidad de la definición de actividad, como el ámbito y la visibilidad de un objeto, es la capacidad de otros objetos o actividades de obtener acceso a los miembros de la actividad. Las siguientes implementaciones realizan la definición de actividad:

  1. Al determinar los miembros (Argument, objetos Variable y ActivityDelegate, y actividades secundarias) una actividad se expone a sus usuarios.

  2. Implementar la lógica de ejecución de la actividad.

La implementación puede implicar a miembros que no se exponen a los usuarios de la actividad, pero se trata más bien de detalles de la implementación. Similar a la definición de tipo, el modelo de actividad permite a un autor calificar la visibilidad de un miembro de la actividad con respecto a la definición de la actividad que es definida. Esta visibilidad rige aspectos de uso de los miembros, como el ámbito de los datos.

Ámbito

Además del ámbito de datos, la visibilidad del modelo de actividad puede restringir el acceso a otros aspectos de la actividad, como validación, depuración, seguimiento o traza. Las propiedades de ejecución utilizan la visibilidad y el ámbito para restringir las características de ejecución a un ámbito determinado de la definición. Las raíces secundarias utilizan la visibilidad y el ámbito para restringir el estado capturado por CompensableActivity al ámbito de definición en la que se utilizan las actividades compensables.

Definición y uso

Un flujo de trabajo se escribe con la creación de nuevas actividades heredándolas de las clases de actividad base y utilizando las actividades de la biblioteca de actividades integrada. Para utilizar una actividad, el autor de actividad debe configurar la visibilidad de cada componente de su definición.

Miembros de actividad

El modelo de actividad define los argumentos, variables, delegados y actividades secundarias que la actividad pone a disposición de los usuarios. Cada uno de estos miembros se puede declarar como public o private. El usuario de la actividad configura los miembros públicos, mientras que los miembros private utilizan una implementación corregida por el autor de actividad. Las reglas de visibilidad del ámbito de datos son las siguientes:

  1. Los miembros públicos y los miembros públicos de actividades secundarias públicas pueden hacer referencia a las variables públicas.

  2. Los miembros privados y los miembros públicos de actividades de secundarias públicas pueden hacer referencia a argumentos y variables privadas.

Un miembro que puede ser establecido por el usuario de una actividad nunca se debería hacer privado.

Modelos de creación

Las actividades personalizadas se definen utilizando NativeActivity, Activity, CodeActivityo AsyncCodeActivity. Las actividades que derivan de estas clases pueden exponer diferentes tipos de miembro con visibilidades diferentes.

NativeActivity

Las actividades que derivan de NativeActivity tienen un comportamiento escrito en el código imperativo y se pueden definir opcionalmente utilizando las actividades existentes. Al derivar actividades desde NativeActivity, se permite acceso a todas las características expuestas por el runtime. Cualquier miembro de este tipo de actividad se puede definir utilizando visibilidad pública o privada, excepto los argumentos, que solo se pueden declarar como public.

Los miembros de clases derivados de NativeActivity se declaran al runtime utilizando el struct NativeActivityMetadata pasado al método CacheMetadata.

Actividad

Las actividades creadas utilizando Activity tienen un comportamiento que es diseñado estrictamente al componer otras actividades. La clase Activity tiene una implementación de actividad secundaria, obtenida por el runtime al usar Implementation. Una actividad que deriva de Activity puede definir los argumentos públicos, variables públicas, ActivityDelegates importados y Activities importadas.

LAs ActivityDelegates y Activities importadas se declaran como elementos secundarios públicos de la actividad, pero no pueden ser programadas directamente por la actividad. Esta información se utiliza durante la validación para evitar ejecutar las validaciones orientadas al elemento primario en las ubicaciones donde la actividad nunca se ejecutará. Además, los elementos secundarios importados, como los elementos secundarios públicos, pueden ser referenciados y programados por la implementación de la actividad. Esto significa que una actividad que importa una actividad llamada Activity1 puede contener una Sequence en su implementación que programa la Activity1.

CodeActivity/ AsyncCodeActivity

Esta clase base se utiliza para crear el comportamiento en código imperativo. Las actividades que derivan de esta clase solo tienen acceso a los argumentos que exponen. Esto significa que los únicos miembros que estas actividades pueden exponer son los argumentos públicos. Ningún otro miembro o visibilidad se aplican a estas actividades.

Resumen de visibilidades

En la siguiente tabla se resume la información anterior de esta sección.

Tipo de miembro NativeActivity Actividad CodeActivity/ AsyncCodeActivity
Argumentos Público/ privado Público no aplicable
Variables Público/ privado Público no aplicable
Actividades secundarias Público/ privado Público, uno elemento secundario privado definido en Implementación. no aplicable
ActivityDelegates Público/ privado Público no aplicable

En general, un miembro que no puede ser establecido por el usuario de una actividad no se debería hacer público.

Propiedades de ejecución

En algunos escenarios, es útil establecer el ámbito de una propiedad de ejecución determinada en los elementos secundarios públicos de una actividad. La colección ExecutionProperties proporciona esta capacidad con el método Add. Este método tiene un parámetro Boolean que indica si una propiedad determinada está en el ámbito de todos los elementos secundarios o simplemente de aquellos que son públicos. Si este parámetro está establecido en true, la propiedad solo será visible para los miembros públicos y los miembros públicos de sus elementos secundarios públicos.

Raíces secundarias

Una raíz secundaria es el mecanismo interno del runtime para administrar el estado de las actividades de compensación. Cuando CompensableActivity ha terminado de ejecutarse, no se limpia su estado inmediatamente. En su lugar, el estado es mantenido por el runtime en una raíz secundaria hasta que el episodio de compensación se haya completado. Los entornos de ubicación capturados con la raíz secundaria corresponden al ámbito de definición en la que se utiliza la actividad Compensable.