Sharepoint 2007: Creare un Workflow rilevando un valore da una pagina Asp.Net ed utilizzare Infopath

In questo articolo, vedremo come creare un workflow in Sharpeoint 2007 per la gestione dei dati da una pagina Asp.Net. Inoltre, vedremo come impostare alcuni valori nelle attivitàdi Sharepoint, tramite Infopath 2007. Le tecnologie usate in questo articolo, sono oltre a Sharepoint 2007, Windows Workflow Foundation, Net 3.0, Asp.Net (VB.Net e C#) e Microsoft Infopath 2007.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo verrà illustrata la procedura per la creazione di un WorkFlow, il quale intercetta e  visualizza il valore di  una casella di testo in una pagina Asp.net e la gestione delle attività tramite Infopath 2007.
Per la creazione del Worflow da utilizzare in Sharepoint, utilizzeremo  Windows Workflow Foundation, questo workflow viene avviato da una pagina aspx.
Creazione del progetto e progettazione Workflow
Da Visual Studio 2005 si crea un nuovo progetto di tipo sharepoint, selezionare il modello “Sharepoint Server Sequential Workflow Library”.
Il workflow sarà composto di alcuni  elementi  e precisamente del controllo createTask,   un controllo onTaskChanged, un controllo logToHistoryListACtivity ed un controllo completeTask  come illustrato in figura 1.

Il Workflow dovrà avere l’aspetto simile a quello della figura 1.

 

Figura 1

Per il controllo create Task, impostiamo la proprietà TaskID, con l’assegnazione di un campo (Es. Taskid), per crearlo,tramite il designer selezionare nella finestra delle proprietà  del controllo, il campo taskid, tramite il pulsantino, posto sul lato destro, nella  finestra di dialogo selezionare la linguetta “Bind to a new member”. Selezioniamo l’opzione “Create Field” e nella casella di testo digitate il seguente testo “Taskid”, chiudete la finestra confermando con il pulsante OK.

Sempre nella finestra delle proprietà del controllo CreateTask, selezionate la voce “TaskProperties”, nella parte destra, fate click sul pulsantino con i tre punti, nella finestra che viene aperta, selezionate la linguetta “Bind To a new member” e nella casella di testo impostate il valore “TaskProperties” sempre selezionando l’opzione “Create Field”.

Continuando ad impostare le varie proprietà di tale controllo, per la proprietà Correlation token, impostiamo il valore “TaskToken” e OwnerActivityName con il valore “Workflow1”.
Per l’evento MethodInvoking , impostiamo le proprietà della classe SPWorkflowTaskProperties denominata in precedenza con il valore TaskProperties per la gestione delle attività

Di seguito si riporta il codice, delle suddette operazioni.

 

VB.Net
'imposto il task
        TaskId = Guid.NewGuid()
        TaskProperties.AssignedTo = "WIN2KSP2K7\Administrator"
        TaskProperties.Description = "Mia descrizione"
        TaskProperties.Title = "Mio Titolo"
        TaskProperties.PercentComplete = 2
        TaskProperties.StartDate = DateTime.Today
        TaskProperties.DueDate = DateTime.Today.AddDays(2)
 
C#
//imposto il task
            TaskId = Guid.NewGuid();
            TaskProperties.AssignedTo = @"WIN2KSP2K7\Administrator";
            TaskProperties.Description = "Mia descrizione";
            TaskProperties.Title = "Mio Titolo";
            TaskProperties.PercentComplete = 2;
            TaskProperties.StartDate = DateTime.Today;
            TaskProperties.DueDate = DateTime.Today.AddDays(2);

 

 

Passiamo al controllo onTaskChanged, impostiamo le varie proprietà di questo elemento, nella finestra delle proprietà, nella voce “AfterProperties” , impostiamo un campo con il valore “AfterProperties”, mentre per la proprietà BeforeProperteis, impostiamo un campo con il valore “BeforeProperties” per la proprietà CorrelationToken, impostiamo il valore “TaskToken”. Infine per la proprietà TaskId, dalla finestra che viene aperta, impostiamo il valore, taskid, che compare nella paginetta “Bind to an existing member”
Per il controllo logToHistoryListACtivity, impostiamo la proprietà HistoryDescription,con  un campo denominato (dalla finestra di questa proprietà, selezionare il tab “Bind To a new member”, opzione create Field ) HistoryDescription .
Mentre per la proprietà HistoryOutCome, impostiamo il seguente valore (di tipo field) HistoryOutcome.
Infine per la proprietà Userid, impostiamo si crea un nuovo campo (dalla finestra di questa proprietà, selezionare il tab “Bind To a new member”, opzione create Field ) con il valore UserId.

 Fatto ciò aggiungiamo un metodo per l’evento MethodInvoking, in questo evento, visualizzeremo il testo che verrà riportato nel dettaglio del workflow, in particolare nella sezione “Cronologia flusso di lavoro”.

Il codice di tale operazioni è il seguente:

 VB.Net

Private Sub logAttivita_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs)
        HistoryDescription = "Valore passato: " & workflowProperties.InitiationData
        HistoryOutcome = "Workflow Terminato"
 
    End Sub
 
C#
private void logAttivita_MethodInvoking(object sender, EventArgs e)
        {
            HistoryDescription = "Valore Passato: " + workflowProperties.InitiationData;
            HistoryOutcome = "Workflow Terminato";
        }

Ora non ci resta completare l’ultimo elemento, il controllo complete Task, per tale controllo, impostate la proprietà CorrelationToken, con il valore “TaskToken”, mentre per la proprietà TaskId, con il valore TaskId, che abbiamo creato in precedenza.

Creazione dei file XML:-

Terminata la fase per di modellazione del nostro workflow, non ci resta che impostare i file di configurazioni, quali feature.xml e workflow.xml, creati di default nel progetto, nel momento in cui si crea un nuovo progetto di Sharepoint.
Selezionare il file Feature.xml, inseriamo il code snippet denominato Feature.xml (Snippets->SharePoint Workflow).
Di seguito si riporta il file Feature.xml, completato in ogni sua parte.

 <?xmlversion="1.0"encoding="utf-8"?>

<!-- _lcid="1033" _version="12.0.3111" _dal="1" -->
<!-- _LocalBinding -->
 
<!-- Insert Feature.xml Code Snippet here. To do this:
1) Right click on this page and select "Insert Snippet" (or press Ctrl+K, then X)
2) Select Snippets->SharePoint Workflow->Feature.xml Code -->
<Feature Id="055264CF-F7D9-457f-B250-46E70F0D965D"
          Title="WorkFlow con uso di Infopath"
          Description="Questo Worfklow utilizza Infopath"
          Version="12.0.0.0"
          Scope="Site"
          ReceiverAssembly="Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
          ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver"
          xmlns="http://schemas.microsoft.com/sharepoint/">
 <ElementManifests>
    <ElementManifestLocation="workflow.xml" />
 </ElementManifests>
 <Properties>
    <PropertyKey="GloballyAvailable"Value="true" />
 
    <!-- Value for RegisterForms key indicates the path to the forms relative to feature file location -->
    <!-- if you don't have forms, use *.xsn -->
    <PropertyKey="RegisterForms"Value="*.xsn" />
 </Properties>
</Feature>

 Terminata la fase di compilazione del file Feature.xml non ci resta che completare il file Workflow.xml.

Anche in questo caso, una volta selezionato il file Workflow.xml, inseriamo il code snippet, denominato Workflow.xml (Snippets->SharePoint Workflow).
Di seguito si riporta il file workflow.xml, completo in ogni sua parte, da ricordare che l’attributo publickeytoken si ottiene registrando la dll nella gac, la quale dll dev’essere compilata con una firma sicura.
File Workflow.xml

 <?xmlversion="1.0"encoding="utf-8" ?>

<!-- _lcid="1033" _version="12.0.3015" _dal="1"   -->
<!-- _LocalBinding   -->
 
<!-- Insert Workflow.xml Code Snippet here. To do this:
1) Right click on this page and select "Insert Snippet" (or press Ctrl+K, then X)
2) Select Snippets->SharePoint Workflow->Workflow.xml Code -->
 
<Elementsxmlns="http://schemas.microsoft.com/sharepoint/">
 <Workflow
       Name="WorkflowInfopath"
       Description="Dimostrazione di utilizzo di Infopath in Workflow"
       Id="{512BC939-0684-475e-9107-8AE8996E5A0E}"
       CodeBesideClass="SPWFInfopath.Workflow1"
       CodeBesideAssembly="SPWFInfopath, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c051e283858a6d51"
       TaskListContentTypeId="0x01080100C9C9515DE4E24001905074F980F93160"
        InstantiationUrl="_layouts/PaginaValore.aspx"
       >
 
    <Categories/>
    <!-- Tags to specify InfoPath forms for the workflow; delete tags for forms that you do not have -->
    <MetaData>
      <Task0_FormURN>taskFormURN</Task0_FormURN>
      <AssociateOnActivation>false</AssociateOnActivation>
    </MetaData>
 </Workflow>
</Elements>

 Creazione della pagina Asp.Net

La creazione del nostro progetto sta giungendo alla fine, ora rimane sola la parte web, in particolare la creazione di una pagina Asp.Net, la quale conterrà una casella di testo, ed un pulsante, quest’ultimo avrà il compito di avviare il workflow.
Aggiungiamo nella soluzione, un nuovo progetto di tipo applicazione Web Asp.net.
A differenza della maggior parte dei progetti web, in questo progetto web, la pagina web, non sarà gestita con il code behind, ossia di avere due file, una con il codice ed una con la parte html della pagina, ma sarà tutto incluso in una pagina aspx.
La pagina web, farà parte di una masterpage (application.master) ed eredita dalla pagina Microsoft.SharePoint.WebControls.LayoutsPageBase , da cui derivano tutte le pagine per sharepoint 2007.
Utilizzeremo i namespace di sharepoint ossia Microsoft.SharePoint, Microsoft.SharePoint.Workflow, Microsoft.SharePoint.Utilities, Microsoft.SharePoint.WebControls
 
La pagina, avrà una tabella contenente un controllo di tipo casella di testo, un controllo pulsante ed controllo label.
Di seguito si riporta la pagina Aspx, con il relativo codice e script html

  

VB.Net

<%@ Assembly Name="Microsoft.SharePoint.ApplicationPages, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Page Language="VB"Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" MasterPageFile="~/_layouts/application.master"   EnableViewState="false" EnableViewStateMac="false"   %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.Workflow"%>
<%@ Import Namespace="Microsoft.SharePoint.Utilities"%>
<%@ Import Namespace="Microsoft.SharePoint.WebControls"%>
 
<script runat="server">
    'dichiarazioni campi
    'oggetto per la gestione del sito
    Protected List As SPList
    'oggetto elemento o riga di una lista
    Protected ListItem As SPListItem
    'classe che rappresenta l'assocazione di un workflow
    Protected WorkflowAssociation As SPWorkflowAssociation
    'oggetto che rappresenta un sito o un tipo di contenuto lista
    Protected CCType As SPContentType
   
   
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
       
        Dim paramList As String = Request.Params("List")
        Dim paramID As String = Request.Params("ID")
        List = Web.Lists(New Guid(paramList))
        ListItem = List.GetItemById(Convert.ToInt32(paramID))
        Dim WorkflowAssociationID As Guid = New Guid(Request.Params("TemplateID"))
        WorkflowAssociation = List.WorkflowAssociations(WorkflowAssociationID)
        'verifico che non sia nulla, altrimenti ritento un associazione
        If (WorkflowAssociation Is Nothing) Then
            'ottengo il riferimento al workflow
            Dim CTypeID As SPContentTypeId = CType(ListItem("ContentTypeId"), SPContentTypeId)
            CCType = List.ContentTypes(CTypeID)
            WorkflowAssociation = CCType.WorkflowAssociations(WorkflowAssociationID)
        End If
 
        If (WorkflowAssociation Is Nothing) Then Throw New SPException("Nessun Workflow trovato")
    End Sub
   
   
   
    Protected Sub BtnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs)
       
        
        Try
           
            Dim valore As String = txtNome.Text
            Web.Site.WorkflowManager.StartWorkflow(ListItem, WorkflowAssociation, valore)
        
       
  
        Catch ex As Exception
            'nel caso che è un eccezione vado alla pagina degli errori
            SPUtility.Redirect("Error.aspx", _
                                   SPRedirectFlags.RelativeToLayoutsPage, _
                                   HttpContext.Current, _
                                   "ErrorText=" + "Errore")
        End Try
        SPUtility.Redirect(List.DefaultViewUrl, _
                   SPRedirectFlags.Default, _
                   HttpContext.Current)
    End Sub
</script>
 
<asp:Content ID="Main" ContentPlaceHolderId="PlaceHolderMain" runat="server">
 
      <table cellspacing="0" cellpadding="0" border="0" >
       <TR>
            <td valign=top><asp:Label Text="Nome:" ID="LblNome" runat=server></asp:Label></td>
             <td> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox></td>
    </tr>
      <tr>
      <td colspan="1">
      <asp:Button ID="BtnOk" runat="server" Text="OK"     OnClick="BtnOk_Click" /></td>
    </tr>
      </TABLE>
       
     
</asp:Content>
 
C#
<%@ Assembly Name="Microsoft.SharePoint.ApplicationPages, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"%>
<%@ Page Language="C#" Inherits="Microsoft.SharePoint.WebControls.LayoutsPageBase" MasterPageFile="~/_layouts/application.master"   EnableViewState="false" EnableViewStateMac="false"   %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.Workflow"%>
<%@ Import Namespace="Microsoft.SharePoint.Utilities"%>
<%@ Import Namespace="Microsoft.SharePoint.WebControls"%>
 
<%--Codice C#--%>
<script runat="server">
    //dichiarazioni campi
    //oggetto per la gestione del sito
    protected SPList List;
    //oggetto elemento o riga di una lista
    protected SPListItem ListItem;
    //classe che rappresenta l'assocazione di un workflow
    protected SPWorkflowAssociation WorkflowAssociation;
    //oggetto che rappresenta un sito o un tipo di contenuto lista
    protected SPContentType CType;
   
    protected void Page_Load(object sender, EventArgs e)
    {
        string paramList = Request.Params["List"];
        string paramID = Request.Params["ID"];
        List = Web.Lists[new Guid(paramList)];
        ListItem = List.GetItemById(Convert.ToInt32(paramID));
        Guid WorkflowAssociationID = new Guid(Request.Params["TemplateID"]);
        WorkflowAssociation = List.WorkflowAssociations[WorkflowAssociationID];
        //verifico che non sia nulla, altrimenti ritento un associazione
        if (WorkflowAssociation == null)
        { // ottengo il riferimento al workflow
            SPContentTypeId CTypeID = (SPContentTypeId)ListItem["ContentTypeId"];
            CType = List.ContentTypes[CTypeID];
            WorkflowAssociation = CType.WorkflowAssociations[WorkflowAssociationID];
        }
 
        if (WorkflowAssociation == null)
            throw new SPException("Nessun Workflow trovato");
      
    }
 
 
 
    protected void BtnOk_Click(object sender, EventArgs e)
    {
        try
        {
            string valore = txtNome.Text;
            Web.Site.WorkflowManager.StartWorkflow(ListItem,
                                               WorkflowAssociation,
                                               valore);
        }
        catch (Exception ex)
        {
            //nel caso che è un eccezione vado alla pagina degli errori
            SPUtility.Redirect("Error.aspx",
                                   SPRedirectFlags.RelativeToLayoutsPage,
                                   HttpContext.Current,
                                   "ErrorText=" + "Errore");
        }
        SPUtility.Redirect(List.DefaultViewUrl,
                        SPRedirectFlags.Default,
                        HttpContext.Current);
       
    }
</script>
 
<asp:Content ID="Main" ContentPlaceHolderId="PlaceHolderMain" runat="server">
 
      <table cellspacing="0" cellpadding="0" border="0" >
       <TR>
            <td valign=top><asp:Label Text="Nome:" ID="LblNome" runat=server></asp:Label></td>
             <td> <asp:TextBox ID="txtNome" runat="server"></asp:TextBox></td>
    </tr>
      <tr>
      <td colspan="1">
      <asp:Button ID="BtnOk" runat="server" Text="OK"     OnClick="BtnOk_Click" /></td>
    </tr>
      </TABLE>
       
     
</asp:Content>

 

 Terminata la preparazione del workflow e della pagina web, non resta che copiare i file (dll, aspx, xml) nella macchina (nel nostro caso in una virtual machine) e testare il tutto.

 Creazione del modulo Infopath.

Si crea un nuovo modulo infopath (figura 2)

 

 Figura 2.

Nel modulo inseriamo un controllo casella di testo, ed un pulsante, come mostrato in figura 3, tramite la finestra delle proprietà della casella di testo, impostiamo il nome del controllo, in particolare nella pagina “Dati”, impostiamo la casella Nome Campo: con il valore “ValoreA” In questo modo abbiamo impostato al controllo un nome.

 

Figura 3
Facciamo click sul pulsante con la scritta Regole, che si trova nelle proprietà del pulsante come mostrato in figura 4

 

Figura 4

A questo punto occorre creare un regola, per l’invio dei dati e per la chiusura del modulo, una volta  fatto click sul pulsante del modulo.

Dalla finestra regole, facciamo click sul pulsante aggiungi, e poi sul pulsante aggiungi azione, nella finestra azione (figura 5) selezionare la voce “Invia tramite una connessione dati”

Figura 5

A questo punto fate click sul pulsante aggiungi (figura 6)

Figura 6.

Selezionate l’opzione Crea nuova connessione per Invio dati, e fate click sul pulsante Avanti.

Nella finestra successiva, selezionate l’opzione “all’ambiente host, ad esempio una pagina ASP.Net o un’applicazione Host”

Figura 7

Fate click sul pulsante avanti.
Sulla finestra successiva, fate click sul pulsante fine.
Tramite il pulsante ok, confermate le scelte effettuate.

Inserite una nuova azione, selezionate l’opzione Chiudi il modulo(figura 8), in questo modo, il modulo verrà chiuso subito dopo il click del pulsante.

Figura 8

Chiudete tutte le finestre, dando conferma tramite il pulsante OK.
Il modulo, oltre ad inviare i dati nella sezione attività, dovrà anche visualizzarli, nel caso che si vuole modificare il loro valore.

Occorre creare un file xml,chiamato ItemMetaData.xml, tale file, inseriamo il seguente tag.

<z:row xmlns:z="#RowsetSchema" ows_valoreA="" />

Questo tag, permette di leggere le informazioni salvate nelle attività di sharepoint 2007, l’attributo ows_valoreA, indica il riferimento al campo valoreA, da notare che tale nome, dev’essere preceduto dal seguente Testo ows_ .

Dalla voce di menu strumenti, selezionare la voce “Connessioni Dati”, nella finestra che viene aperta fate click sul pulsante “aggiungi”, nella finestra che viene aperta (figura 9),selezionare l’opzione, crea nuova connessione per : Ricezione Dati

Figura 9

Fate click sul pulsante, nella finestra successiva, selezionate l’opzione documento xml (figura 10)

Figura 10

Fate click sul pulsante avanti.
Nella finestra successiva, selezionate il file xml (salvato nella cartella del progetto, in feature)

Come mostrato in figura 11.

Figura 11

Lasciate l’opzione di default(Figura12), ossia “includi i dati come file di risorse nel modello di modulo o nella parte modello”

Figura 12.

Fate click sul pulsante avanti, lasciando invariate le impostazioni (figura 13)

Figura 13

Fate click sul pulsante fine

A questo punto nella connessione dati, avrete due valori, Invio ed itemmetadata.

 A questo punto occorre impostare un valore predefinito per il controllo casella di testo (denominato valoreA) nella finestra delle proprietà di tale controllo, selezionare il pulsante formula (fx) (figura 14), nella finestra che viene aperta (inserisci formula) fate click sul pulsante “Inserisci campo o gruppo” (figura 14) nella finestra che viene aperta, selezionate dalla casella combinata origine dati, la voce ItemMetadata (secondaria) e selezionate la voce :owns_valoreA, come mostrato in figura 14.

 

 

Figura 14
Confermate tutte le finestre con il pulsante ok.

Siamo giunti alla pubblicazione di tale modulo, prima di pubblicarlo, occorre impostare le opzioni del modulo, in particolare la protezione. Dal menu strumenti, selezionare la voce “opzioni modulo” nella finestra che viene aperta, selezionare nella parte sinistra, la voce dominio come mostrato in figura 15.

 

Figura 15
Continuando con la finestra delle opzioni modulo, selezionare la voce “Promozioni Proprietà” ed aggiungete il campo relativo alla casella di testo (Figura 16)

 

Figura 16

Sempre nella finestra opzioni modulo, selezionare la voce compatibilità, mettete una spunta, sull’opzione 

“Progetta Modello di modulo da aprire in un browser o in Infopath”

Figura 16

Confermate le opzioni, facendo click sul pulsante ok.
Dal menu File, salvate il modulo, a  questo punto, non ci resta che pubblicarlo, per utilizzarlo nel nostro portale di sharepoint 2007.

Dal menu file, selezionate l’opzione Pubblica, nella finestra che viene aperta (figura 17) selezionate l’opzione “In un percorso di rete” , a questo punto fate click sul pulsante avanti.

Figura 17

La successiva finestra (figura 18) ci indica, in quale cartella pubblicare il nome e con quale nome, potete salvare il file xsn, nella cartella in cui si trovano i file xml del nostro progetto, situata nella cartella Feature.

Figura 18

A questo punto, fate click sul pulsante avanti,  nella successiva finestra, lasciate vuoto la casella,nel momento in cui fate click sul pulsante avanti, verrà visualizzato un messaggio(figura 19), fate click sul pulsante ok, per via che non si ha un percorso alternativo al nostro modulo.

Figura 19

A questo punto fate click sul pulsante pubblica, fate click sul pulsante chiudi, da notare che l’opzione “Apri il modello di modulo dalla posizione di pubblicazione..” non deve avere il flag.

Figura 20

Ora che il nostro modulo infopath, è stato pubblicato, dovremmo rilevare il codice id, ossia il codice identificativo, questo codice va inserito nel file xml, e precisamente in Workflow. Per rilevare il codice id,  aprite il modulo pubblicato in modalità struttura (Designer) , dal menu file, selezionate la voce “Proprietà” nella finestra che viene aperta, copiate tutto il codice, che si trova nella casella ID, come mostrato in figura 21

Figura 21

Aprite il file Workflow.xml, e nel tag Task0_formUrn, copiate il codice id del modulo di infopath, come mostrato qui di seguito.

     <Task0_FormURN>urn:schemas-microsoft-com:office:infopath:Infopath:-myXSD-2008-04-02T14-18-10</Task0_FormURN>

 
Configurazione ed installazione
A questo punto non ci resta che installare e configurare il nostro progetto, copiando i vari file della macchina in questione (nel mio caso è una macchina virtuale virtual pc 2007), nella cartella FEATURES (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\) create una cartella (per esempio SPWFInfopath) in essa copiate i file xml (feature.xml e workflow.xml).
Copiante nella cartella assebly (C:\WINDOWS\assembly) la dll, in questo modo viene registrata nella GAC.
Ora non resta che copiare la nostra pagina Aspx, nella cartella delle pagine di sharepoint, e precisamente nella cartella layouts (C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS ).
A questo punto occorre eseguire dal prompt dei comandi, l’installazione del file feature,xml.
La registrazione avviene tramite il file stsadm.exe di seguito si riporta il comando da eseguire
stsadm.exe -o installfeature -filename SPWFInfopath \feature.xml -force
Riavviamo il WebServer IIS, tramite il comando IISReset.

 Attivazione del WorkFlow

Terminata la fase di registrazione del componente non ci resta che attivare il workflow, apriamo il portale di sharepoint, e selezioniamo la nostra applicazione web, dal menu azioni sito, selezionare la voce impostazioni sito, nella sezione Amministrazione raccolta siti, selezionare la voce “Caratterestiche raccolta siti” .

Figura 22

Nella pagina che viene aperta, troviamo l’elenco dei vari Workflow disponibili, tramite il pulsante attiva, del nostro Workflow rendiamo attivo il nostro Workflow, come mostrato in figura 2.
Ora che il workflow è attivo, dobbiamo aggiungerlo nella nostra raccolta ed elenchi sito, dalla pagina delle impostazioni sito, selezioniamo la voce “Raccolte ed elenchi del sito”, che si trova nella sezione “amministrazione sito”.
Selezioniamo il contenuto con la dicitura “Documenti condivisi” .

Nella pagina che viene aperta, selezioniamo la voce “Impostazioni flusso di lavoro” che si trova nella sezione “Autorizzazioni e gestione”, nella pagina che viene aperta, aggiungiamo il nostro workflow, valorizzando gli opportuni campi. Prima di procedere all’esecuzione del nostro Workflow, occorre aggiungere una colonna nella attività, nella quale verrà visualizzato il valore del campo del modulo di infopath.

Per creare una colonna, andate nella sezione attività, e fate click sul menu “impostazioni elenco” che si trova nel menu a tendina “impostazioni” in modo da andare alla pagina Personalizza attività (figura 24).

 

Figura 23
Tramite la voce “Crea Colonna” si crea una nuova colonna, nel campo Nome Colonna, inserite lo stesso nome della colonna del nostro modulo ossia “valoreA”  , lasciate i valori di default (stringa).

Sempre nella pagina personalizza Attività, selezionate nella sezione Visualizzazioni, il nome della visualizzazione predefinita, in questo modo, nella pagina che viene aperta, potete abilitare la visualizzazione della colonna appena creata.

Esecuzione del Workflow.

Ora che nel nostro progetto è stato creato il workflow, non ci resta che eseguirlo, nella cartella documenti, selezioniamo un documento e dal menu di scelta rapida, selezioniamo la voce “Flussi di lavoro”, nella pagina che viene aperta (figura 24) , facciamo click sul nostro workflow.

Figura 25

A questo punto verrà avviata la nostra pagina (figura 26), come illustrato precedentemente, il worfklow, avrà il compito di visualizzare il testo della casella, nella cronologia del flusso di lavoro .

Figura 26

 Il workflow, però non è ancora terminato, infatti occorre gestire le attività, tramite il modulo Infopath, il workflow risulterà con la dicitura “in corso” come mostrato in figura 27.

 

Figura 27

Fate click su tale voce, in modo che venga visualizzato il dettaglio del nostro workflow, fate click sul testo del titolo (figura 28), in questo modo verrà aperto il modulo infopath .

Figura 28

 Verrà aperto il modulo infopath, all’interno di sharepoint, in una pagina Aspx (WrkTaskIp) come mostrato in figura 29.

Figura 29.

Dopo aver valorizzato la casella di testo, e fatto click sul pulsante di azione(con la dicitura "Pulsante"), i dati verranno inviati e verrà aperta la finestra del dettaglio del workflow, come mostrato in figura 30, riportando i dati della sola casella di testo della nostra pagina aspx nella cronologia del flusso.

Figura 30

Mentre per visualizzare i dati del inseriti nella casella di testo del modulo infopath, occorre andare nelle attività (ritornate in documenti condivisi, e nella parte sinistra, elenci, fate click sulla voce attività ) troverete nella colonna creata in precedenza con il nome “valoreA” il testo inserito nella casella del modulo di infopath, il tutto come illustrato in figura 31

 

Figura 31
Conclusioni:
In questo articolo è stata fornita la tecnica di come eseguire un workflow da una pagina Asp.net,  utilizzare Infopath 2007, per la gestione delle attività, in particolare visualizzare il valore di una casella del modulo in una colonna delle attività.
L'articolo ha voluto fornire l'utilizzo di più software (Sharepoint 2007, Infopath 2007, Visual Studio 2005 (VB.Net – C#) Windows Workflow Foundation, XML.

Tramite la parola download è possibile scaricare il file di esempio.

Download.