sabato 12 luglio 2008

Sharepoint 2007 creare un workflow con .Net 3.0 (VB.Net e C#) utilizzando una pagina asp.net e Infopath 2007

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.


Di seguito si riporta il file Feature.xml, completato in ogni sua parte.



<?xml version="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>


<ElementManifest Location="workflow.xml" />


</ElementManifests>


<Properties>


<Property Key="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 -->


<Property Key="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


<?xml version="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 -->



<Elements xmlns="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 23).



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 24



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




Figura 25



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 26.



Figura 26


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




Figura 27



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



Figura 28.



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 29, riportando i dati della sola casella di testo della nostra pagina aspx nella cronologia del flusso.



Figura 29



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 30.



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.


d





2 commenti:

firma digitale ha detto...

Voglio solo ringraziarvi per il lavoro che svolgono e la loro volontà di condividere. Ha creato materiali eccezionali e tutti noi beneficiare della vostra generosità.

Emanuele ha detto...

Grazie.
Continua a seguirmi.
Ciao Emanuele