none
Colonnes Personnalisables et Approbation par WorkFlow RRS feed

  • Question

  • Bonjour,

    Nous essayons depuis quelques jours de mettre en place une gestion des notes de frais sous forme d'une Liste personnalisée.

    A présent nous bloquons sur le systéme de validation par le WorkFlow d'approbation ou la personne chargé de controler devra approuver chaque note de frais.

     

    Nous avons vu le WorkFlow "Approbation" qui est fourni avec Moss, c'est exactement ce qu'il nous faut mais le probléme est dans la procédure de validation.
    Pour Approuver ou Refuser, il faut passer par 3 liens pour chaque ligne. Dommage ...


    J'avais pensé alors à la solution de créer deux nouvelles colonnes dans la liste, et d'y incorporer un bouton/image "Accepter" et un bouton/image "Refuser".
    Ces boutons seraient générer par un second Workflow qui créerait automatiquement les 2boutons avec l'URL et le bon ID.

     

     

    Voir la liste en image (retouché avec photoshop)

     

     

     

     

     

    1. Premier probléme :

    Les colonnes interessantes sont soit "Image" ou soit "URL", mais il n'est pas possible d'avoir les 2 en mêmes temps.
    Quand à la colonne "Une seule ligne de Texte", le chevron HTML s'annule ce qui fait que le HTML ne passe pas.

    Comment résoudre mon probléme, est il possible de créer des colonnes personnalisables ? comment faut il faire ?


    Cordialement,
     

    lundi 4 février 2008 21:24

Réponses

Toutes les réponses

  • Bonjour,

     

    il y a bien une réponse à votre problème, mais elle nécessite du développement.

     

    Vous pouvez soit vous baser une une définition de liste personnalisée, soit sur l'ajout de colonnes personnalisées ajoutée à l'aide de l'API de WSS v3.0. Certaines colonnes contiennent du contenu HTML et permettent certaines actions (comme le titre d'un élément affichant un menu contextuel). Il vous suffit donc de regarder la propriété SchemaXML d'un champ de ce type (wTitle par exemple) à l'aide d'un projet Visual Studio pour connaitre la syntaxe pour créer une telle colonne. Une fois que vous avez la syntaxe, vous pouvez l'exploiter pour créer une colonne personnalisée ou pour écrire votre définition de liste.

     

    C'est cepandant dommage dans la mesure ou vous être très proche du comportement natif de SharePoint.

     

    lundi 4 février 2008 23:54
    Modérateur
  • Bonjour,

    Voilà les pointeurs pour la creation de "Custom Field" :

    http://www.sharepointblogs.com/nicksevens/archive/2007/08/31/create-custom-field-types-for-sharepoint.aspx

    http://msdn2.microsoft.com/en-us/library/bb684919.aspx
    http://msdn2.microsoft.com/en-us/library/ms446361.aspx

    Neanmoins avant de se lancer dans ce genre de développement, avez vous pensez à la possibilité de modifier le menu contextuel lié à chaque élément de liste (celui à partir duquel vous lancez le workflow).

    En effet, il est possible de rajouté simplement des liens à ce menu via les "CustomActions". J'avais eu grosso modo la même demande chez un client et nous avions mis en place cette option.d'ajout de deux liens, "Approve" et "Reject dans le menu contextuel.

    Voir les liens suivants pour mieux comprendre de quoi je parle.

    http://sharepointnutsandbolts.blogspot.com/2007/07/using-customaction-to-modify-system.html
    http://www.helloitsliam.com/archive/2007/07/24/moss2007-%96-item-level-menus-using-%93editcontrolblock%94.aspx
    http://glorix.blogspot.com/2007/08/custom-action-locations-and-groupid.html
    http://www.johnholliday.net/archive/2007/10/28/How-to-find-ltCustomActiongt-identifiers.aspx
    http://weblogs.asp.net/jan/archive/2007/09/05/using-the-current-page-url-in-the-urlaction-of-a-sharepoint-feature.aspx

    Ce qui est très interessant est la possibilité d'avoir des liens dynamiques grâce à l'utilisation des tokens suivant :
    • ~site - Web site (SPWeb) relative link.
    • ~sitecollection - site collection (SPSite) relative link.
    • In addition, you can use the following tokens within a URL:
      • {ItemId} - Integer ID that represents the item within a list.
      • {ItemUrl} - URL of the item being acted upon. Only work for documents in libraries. [Not functional in Beta 2]
      • {ListId} - GUID that represents the list.
      • {SiteUrl} - URL of the Web site (SPWeb).
      • {RecurrenceId} - Recurrence index. This token is not supported for use in the context menus of list items.

    En espérant que cela réponde à votre question
    mardi 5 février 2008 08:35
    Modérateur
  • Bonsoir,

     

    Tout d'abord, merci d'avoir répondu aussi vite. J'ai testé les custom Action et c'est vrai que c'est super pratique.

     

    Mon probléme maintenant n'est plus la question de design ou de colonnes en HTML mais :

     

    " Qu'est ce que je vais bien pouvoir mettre comme URL pour "approuver" ou "refuser" la note de frais.

     

    J'avais pensé à contourner le probléme en mettant le lien (URL) de la tâche. (Cette URL pointait vers le Formulaire qui aurait proposé soit d'"Approuver" ou soit de "Refuser") mais là encore, il y a un nouveau probléme qui est celui de l'ID de la tâche.

     

    Effectivement, comment retrouver l'ID de la tâche correspondant à ma note de frais à approuver.

     

    J'explique, J'ai

     

    - une "liste personnalisé avec mes notes de frais" 

    (ou chaque item a l'URL :http://share2/Administratif/Lists/Tches/DispForm.aspx?ID=45 avec l'ID de la note de frais )

     

    - une liste représentant mes taches.

    (ou chaque item à l'URL http://share2/Administratif/Lists/Tches/DispForm.aspx?ID=80 avec l'ID de la tache)

     

     

    Lorsqu'une note de frais est crée, une nouvelle tâche est crée par le workflow Approbation.

     

    Mais, l'ID de cette note de frais ne correspond pas à l'ID de cette tache. Ainsi je ne peux pas créer mon editControlBlock avec l'URL : http://share2/Administratif/Lists/Tches/DispForm.aspx?ID=ID_TACHE

     

    (les token utilisés dans mon custom Action ne renvoyent pas l'ID de la tache mais l'ID de la note de frais)

     

    J'avais pensé à faire une requête SQL ... mais là je pars carrement dans le développement.

     

    Qu'en pensez vous ?

     

    Cordialement,

    mardi 5 février 2008 22:15
  • J'ai bien peur que vous n'ayez pas d'autre choix que le développement. Bien que les Custom Actions aient un certain côté dynamique comme l'a mentionné Phil, vous ne pourrez pas vous appuyer sur le modèle objet pour les personnaliser.

     

    Une remarque cependant :

     

    Lorsque vous faites du développement SharePoint, n'accédez pas directement à la base de données SQL : c'est mal !  Blague à part, faire des requêtes dans les bases de données SQL de SharePoint fait perdre tout support Microsoft.

     

    Si toutefois vous êtes prêt à faire du développement, la classe SPListItem a une propriété Tasks listant les tâches associées à l'Item. C'est dans cette collection que vous trouverez la ou les tâches créées par votre WorkFlow.

     

     

     

    mardi 5 février 2008 23:47
    Modérateur
  • Idem que Seb, d'une manière ou d'une autre vous allez partir dans le developpement à mon avis.

    le plus simple serait d'utiliser des customactions sur la liste de tache pour rajouter deux liens (approuver et rejeter) qui pointerait vers une page custom que vous auriez developpé.

    Cette page prendrait en paramètre l'id de de la liste, l'id de l'item et changerait le statut de la tache, validant ainsi le workflow.

    C'est un peu capilotracté, certes Wink

    En espérant que cela répondra à votre question.
    mardi 5 février 2008 23:59
    Modérateur
  • Merci beaucoup Phil ! J'ai crée une page ASP.NET de validation fait de toute piéce.

     

     

    Alors j'ai crée 2 Customs Actions s'appliquant au menu édition de ma liste et je l'ai appliqué à un sous site.

    - Valider

    - Rejeter

     

    Ensuite, 2 solutions :

    - Approuve : Ma page ASP.NET éxécute le code et valide l'item. (Approuvé). L'utilisateur est alors redirigé vers la liste.

    - Refuse : Ma page ASP.NET renvoit un formulaire qui demande à l'approbateur la raison de son refus. Une fois envoyer, l'item est marqué comme Rejeté et le commentaire apparait dans la liste. Puis celui est rediriger vers la liste.

     

    Pour l'instant, ma page ASP.NET ne se sert pas du tout de l'API SharePoint...

    Bon c'est assez risqué mais dans la mesure ou je fais un petit Update par ci, par là ... ca va encore.

     

     

    Exemple pour Approuver :

     

    J'ai créer le fichier le fichier feature.xml :

     

    <?xml version="1.0" encoding="utf-8" ?>
    <Feature xmlns="http://schemas.microsoft.com/sharepoint/"
       Id="EDFD660C-66BA-4c73-8928-DC84CE52D8AC"
          Title="Approuver"
          Description="Approbation Note de Frais"
          Scope="Web"
          Hidden="false"
          ImageUrl="menuprofile.gif">
     <ElementManifests>
      <ElementManifest Location="elements.xml"/>
     </ElementManifests>
    </Feature>

     

    Ensuite le elements.xml :

     

    <?xml version="1.0" encoding="utf-8" ?>
    <Elements xmlns="http://schemas.microsoft.com/sharepoint/">
     <CustomAction
      Id="C670889F-58D7-4beb-9A09-E8133E3A5917"
      RegistrationType="List"
      RegistrationId="100"
         Location="EditControlBlock"
      Sequence="2000"
      Title="Approuver"
      Rights="ManageLists"
      Description="Approbation Note de frais">
      <UrlAction Url="http://share2/approbe/Default.aspx?listid={ListId}&amp;id={ItemId}&amp;approbe=1&amp;itemUrl={ItemUrl}"/>
     </CustomAction>

    </Elements>

     

    Exemple de requête utilisé :

     

     

    Pour les fous qui veulent tapper dans la table directement :

     

    la table stockant tous les items du site est : "AllUserData"

    Sérieusement, la BDD WSS_CONTENT, c'est une usine à gaz !

     

    Cordialement,

     

     

     

     

     

     

     

     

    lundi 3 mars 2008 14:35
  • Bonjour,

     

    je me suis permis de valider les réponses aux sujets.

     

    je me permets néanmoins d'insister sur un point :

     

    Accéder directement à la base et faire des manipulation dessus n'est pas un scénario supporté par microsoft.

     

    Cordialement,

    mercredi 19 mars 2008 15:28
    Modérateur