2009-07-07 19 views
3

J'ai une liste personnalisée dans SharePoint (en particulier, MOSS 2007.) Un champ est une case à cocher oui/non intitulée "Des défauts?" Un autre champ est "Fermé par" et nomme la personne qui a fermé le ticket.Comment puis-je définir la valeur par défaut dans un champ de liste SharePoint, en fonction de la valeur dans un autre champ?

S'il n'y a pas de défauts, je veux que le ticket soit automatiquement fermé. S'il y en a, le champ "Fermé par" doit être rempli plus tard.

Je pensais que je pourrais définir une valeur par défaut calculée pour « Fermé par » comme ceci:

=IF([Any defects?],"",[Me]) 

mais SharePoint se plaint que j'ai référencé un champ. Je suppose que cela a du sens. les valeurs par défaut sont activées lorsque le nouvel élément de liste est ouvert pour la première fois et aucune valeur n'est encore définie dans les champs.

Je comprends qu'il est possible de créer un champ calculé en fonction d'une valeur de colonne, mais dans ce cas, le champ ne peut plus être modifié ultérieurement.

Quelqu'un a-t-il des conseils pour réaliser ce que j'essaie de faire?

Est-il possible d'avoir un événement de type "OnSubmit" qui me permet d'exécuter du code au moment où l'élément de la liste est sauvegardé?

Merci.

Répondre

7

Incluez un composant WebPart éditeur de contenu dans la page (newform.aspx/editform.aspx) et utilisez jQuery (ou tout simplement javascript) pour gérer le paramétrage des valeurs par défaut.

Edit: quelques exemples de code:

Dans les listes NewForm.aspx, inclure une référence à jquery. Si vous regardez le code html, vous pouvez voir que chaque balise d'entrée obtient un identifiant basé sur le GUID du champ, et un titre qui est défini sur le nom d'affichage des champs.

maintenant, en utilisant jquery nous pouvons obtenir ces champs à l'aide du sélecteur jQuery comme ceci:

Par titre:

$("input[title='DISPLAYNAMEOFFIELD']"); 

par id (si vous connaissez guid interne, les traits du champ seront ahve à remplacer par des underscores:

// example field id, notice the guid and the underscores in the guid ctl00_m_g_054db6a0_0028_412d_bdc1_f2522ac3922e_ctl00_ctl04_ctl15_ctl00_ctl00_ctl04_ctl00_ctl00_TextField 

$("input[id*='GUID']"); //this will get all input elements of which the id contains the specified GUID, i.e. 1 element 

Nous wrap cela dans la fonction ready() de jQuery, de sorte que tous les appels ne seront effectués que lorsque le document a pleinement chargé:

$(document).ready(function(){ 
// enter code here, will be executed immediately after page has been loaded 
}); 

En combinant ces 2 nous pourrions maintenant mettre au

$(document).ready(function(){ 
$("input[title='DISPLAYNAMEOFFIELD']").change(function() 
{ 
     //do something to other field here 
}); 
}); 
+0

Merci, j'apprécie les conseils pour utiliser JavaScript et sa méthode d'intégration. Serait-il possible de vous déranger un peu plus pour un exemple de code? Puis-je faire référence aux champs de la liste en tant que variables JavaScript? Merci! – DavidMWilliams

+0

Voir edit, fourni un peu de code – Colin

+0

Très apprécié! Je serai sûr de revenir et voter votre réponse quand j'ai 15 points de réputation! – DavidMWilliams

1

suite de l'article Use jQuery to Set A Text Field’s Value on a SharePoint Form sur EndUserSharePoint.com vous montre événement onchange de votre menu déroulant comment définir une valeur par défaut pour un champ à l'aide JavaScript/jQuery.

Ils ont également toute une série d'articles sur 'taming calculated columns' qui vous montrera beaucoup plus d'options puissantes que vous avez pour les champs calculés avec l'utilisation de jQuery.

Une chose à prendre en compte lors de l'insertion de JavaScript dans une page SharePoint et de la modification du DOM est le support. Il y a une petite chance qu'un futur service pack viendra casser la fonctionnalité que vous ajoutez, et il est fort probable que la prochaine version de SharePoint la cassera. Gardant cet esprit cependant, je crois que c'est une bonne solution en ce moment.

+0

Merci beaucoup, j'apprécie l'aide. Maintenant, je peux revenir dans le code, je me sens beaucoup plus positif sur la flexion de SharePoint à ma volonté !! Je reviendrai et vous reverrai quand j'ai 15 points de réputation. – DavidMWilliams

+0

Woohoo, j'ai maintenant> 15 rep +1 donc pour vous :) – DavidMWilliams

0

J'ai une promenade à travers des exemples de code qui peut aider

Il définit les champs Heure de fin/Date à l'heure de début + 1,5 heures lorsque vous créez un nouvel événement .

Son compliqué un peu par les étapes doivent faire l'heure/date de travail, mais vous verrez des exemples de la façon de trouver les éléments sur le formulaire et aussi un moyen d'obtenir votre script sur le newform.aspx sans utiliser SPD.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"> 
</script> 
<script type="text/javascript"> 

    // Set the hours to add - can be over 24 
    var hoursToAdd = 1; 
    // Mins must be 0 or div by 5, e.g. 0, 5, 10, 15 ... 
    var minutesToAdd = 30; 

    // JavaScript assumes dates in US format (MM/DD/YYYY) 
    // Set to true to use dates in format DD/MM/YYYY 
    var bUseDDMMYYYYformat = false; 

    $(function() { 

    // Find the start and end time/minutes dropdowns by first finding the 
    // labels then using the for attribute to find the id's 
    // NOTE - You will have to change this if your form uses non-standard 
    // labels and/or non-english language packs 
    var cboStartHours = $("#" + $("label:contains('Start Time Hours')").attr("for")); 
    var cboEndHours = $("#" + $("label:contains('End Time Hours')").attr("for")); 
    var cboEndMinutes = $("#" + $("label:contains('End Time Minutes')").attr("for")); 

    // Set Hour 
    var endHour = cboStartHours.attr("selectedIndex") + hoursToAdd; 
    cboEndHours.attr("selectedIndex",endHour % 24); 

    // If we have gone over the end of a day then change date 
    if ((endHour/24)>=1) 
    { 
     var txtEndDate = $("input[title='End Time']"); 
     var dtEndDate = dtParseDate(txtEndDate.val()); 
     if (!isNaN(dtEndDate)) 
     { 
      dtEndDate.setDate(dtEndDate.getDate() + (endHour/24)); 
      txtEndDate.val(formatDate(dtEndDate)); 
     } 
    } 

    // Setting minutes is easy! 
    cboEndMinutes.val(minutesToAdd);  

}); 

// Some utility functions for parsing and formatting - could use a library 
// such as www.datejs.com instead of this 
function dtParseDate(sDate) 
{ 
    if (bUseDDMMYYYYformat) 
    { 
     var A = sDate.split(/[\\\/]/); 
     A = [A[1],A[0],A[2]]; 
     return new Date(A.join('/')); 
    } 
    else 
     return new Date(sDate); 
} 

function formatDate(dtDate) 
{ 
    if (bUseDDMMYYYYformat) 
     return dtDate.getDate() + "/" + dtDate.getMonth()+1 + "/" + dtDate.getFullYear(); 
    else 
     return dtDate.getMonth()+1 + "/" + dtDate.getDate() + "/" + dtDate.getFullYear(); 
} 

</script> 
Questions connexes