Acciones de flujos de trabajo personalizadas en SharePoint Designer (2)

Para añadir una nueva actividad a nuestro SPD, lo primero que debemos hacer es comenzar un proyecto de Workflow,  en concreto un Workflow Activity Library (Biblioteca de actividades para el flujo de trabajo).



A partir de ese punto crearíamos nuestra actividad, para este ejemplo voy a crear una actividad que consiste en enviar un texto al visor de eventos.


   1:  public partial class LogEventViewer : Activity
   2:  {
   3:     
   4:      public static DependencyProperty TextLogProperty =
   5:          DependencyProperty.Register(“TextLog”, typeof(string), typeof(LogEventViewer));
   6:   
   7:      public LogEventViewer()
   8:      {
   9:          InitializeComponent();
  10:      }
  11:   
  12:      /// <summary>
  13:      /// Valor que figurará en el visor de eventos
  14:      /// </summary>
  15:      /// <value>Texto</value>
  16:      [Description(“Texto que saldrá en el visor de eventos”)]
  17:      [Category(“User”)]
  18:      [Browsable(true)]
  19:      [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  20:      public string TextLog
  21:      {
  22:          get { return (string) GetValue(TextLogProperty); }
  23:          set { SetValue(TextLogProperty, value); }
  24:      }
  25:   
  26:      /// <summary>
  27:      /// Ejecución de la actividad
  28:      /// </summary>
  29:      /// <param name=”provider”>Contexto de ejecución de la actividad</param>
  30:      /// <returns></returns>
  31:      protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider)
  32:      {
  33:          EventLog eventLog = new EventLog(“Workflow”);
  34:   
  35:          eventLog.Source = “SharePoint Workflow”;
  36:   
  37:          try
  38:          {
  39:              eventLog.WriteEntry(TextLog, EventLogEntryType.Information);
  40:          }
  41:          finally
  42:          {
  43:              eventLog.Dispose();
  44:          }
  45:   
  46:          return ActivityExecutionStatus.Closed;
  47:      }
  48:  }

 


Lo primero que hacemos es declarar una propiedad dependiente del flujo de trabajo llamada TextLogProperty, a través de la cual pasaremos el texto que deseamos visualizar en el visor de eventos.

La propiedad interna de la actividad será TextLog, esta propiedad interna obtiene y establece el valor desde la propiedad dependiente del flujo de trabajo.

Solo nos queda el método Execute, que será el encargado de realizar el trabajo de visualizar el mensaje en el visor de sucesos.

Una buena práctica es que las actividades incluyan un Validador, que yo he omitido en el ejemplo pero que es altamente recomendado aunque no sea obligatorio, ó si queremos usar la actividad con el diseñador de Visual Studio.
 
Una vez tenemos nuestro ensamblado, podemos probarlo primero (otra buena práctica) creando una aplicación host de workflow.

Por último tras asegurarnos que nuestra actividad funciona correctamente, debemos instalarla en el GAC en nuestro servidor de SharePoint. Y debemos editar el archivo web.config para incluir nuestro ensamblado en el apartado siguiente

 <System.Workflow.ComponentModel.WorkflowCompiler>
<authorizedTypes>
……

<authorizedType Assembly=”IdeSeg.SharePoint.Workflow.Activities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3bba710be857fdc1″
Namespace
=”IdeSeg.SharePoint.Workflow.Activities”
TypeName
=”*”
Authorized
=”True” />
</authorizedTypes>
</System.Workflow.ComponentModel.WorkflowCompiler>

Ahora hemos de modificar el archivo WSS.ACTIONS que vimos anteriormente
 <Action Name=”Log en visor de eventos”
ClassName=”IdeSeg.SharePoint.Workflow.Activities.LogEventViewer”
Assembly=”IdeSeg.SharePoint.Workflow.Activities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3bba710be857fdc1″
AppliesTo=”all”
Category=”Personalizadas”>
<RuleDesigner Sentence=”Logear el evento siguiente %1″>
<FieldBind Field=”TextLog” Text=”este mensaje” Id=”1″ DesignerType=”TextArea”/>
</RuleDesigner>
<Parameters>
<Parameter Name=”TextLog” Type=”System.String, mscorlib” Direction=”In” />
</Parameters>
</Action>

Con esto lo que hemos hecho en primer lugar es autorizar nuestro ensamblado para que forme parte del motor de flujos de trabajo de SharePoint, y en segundo lugar al añadirlo en WSS.ACTIONS le hemos indicado a SharePoint, SPD, que ahora disponemos de una nueva actividad.

Cuando usemos SPD para editar un sitio, en el momento que creamos un nuevo workflow o editamos uno existente, SPD se comunica con SharePoint y recupera el Archivo WSS.ACTIONS para a través de este configurar el asistente de flujos de trabajo. De este modo las nuevas acciones formarán parte del archivo XOML que creará SPD.

Finalmente el resultado dentro de SPD es el siguiente:



 


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *