Как установить значение по умолчанию в поле списка SharePoint на основе значения в другом поле?

Asked
Viewd52485

3

У меня есть настраиваемый список в SharePoint (в частности, MOSS 2007.) Одно поле - это поле с флажком «да / нет» с заголовком «Есть дефекты? Другое поле - «Кем закрыт» - имя человека, который закрыл заявку.

Если дефектов нет, я хочу, чтобы билет закрывался автоматически. Если да, то поле «Закрыто» необходимо заполнить позже.

Я решил, что могу установить расчетное значение по умолчанию для "Закрыто" следующим образом:

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

но SharePoint жалуется, что я указал на поле. Я полагаю, это имеет смысл; значения по умолчанию срабатывают, когда новый элемент списка впервые открывается для ввода и еще нет значений ни в каких полях.

Я понимаю, что можно создать вычисляемое поле на основе значения столбца, но в этом случае поле нельзя будет редактировать позже.

Есть ли у кого-нибудь совет, как достичь того, что я пытаюсь сделать?

Возможно ли иметь событие типа «OnSubmit», которое позволяет мне выполнить некоторый код в момент сохранения элемента списка?

Спасибо.

3 ответов

7

Включите на страницу веб-часть редактора контента (newform.aspx / editform.aspx) и используйте jQuery (или просто javascript) для обработки установки значений по умолчанию.

Изменить: пример кода:

В списках newform.aspx включите ссылку на jquery. Если вы посмотрите на html-код, вы увидите, что каждый входной тег получает идентификатор на основе GUID поля и заголовок, установленный для отображаемого имени поля.

Теперь, используя jquery, мы можем получить эти поля с помощью селектора jQuery следующим образом:

По названию:

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

по идентификатору (если вы знаете внутренний идентификатор поля, дефисы будут заменены символами подчеркивания:

 // 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
 

Мы заключили это в функцию ready() jQuery, поэтому все вызовы будут выполняться только после полной загрузки документа:

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

Объединив эти 2, мы можем теперь установить событие onchange в раскрывающемся списке следующим образом

 $(document).ready(function(){
 $("input[title='DISPLAYNAMEOFFIELD']").change(function() 
 {
      //do something to other field here 
 });
}); 
 
  • @Alex; Делаем это во время босса :-P

    Colin07 июля 2009, 10:40
  • Большое спасибо! Я обязательно вернусь и проголосую за ваш ответ, когда у меня будет 15 очков репутации!

    DavidMWilliams07 июля 2009, 09:42
  • Отлично! Когда у вас будет время редактировать ответы, вы дадите кое-что хорошее.

    Alex Angas07 июля 2009, 10:31
  • Спасибо, я ценю совет по использованию JavaScript и его встраиванию.

    Можно ли побеспокоить вас еще немного примером кода? Могу ли я ссылаться на поля в списке как на переменные JavaScript?

    Спасибо!

    DavidMWilliams07 июля 2009, 07:57
  • Уууу, теперь у меня> 15 репутации, так что +1 тебе :)

    DavidMWilliams07 июля 2009, 15:21
  • Нет проблем! рад помочь

    Colin07 июля 2009, 09:44
0

Я рассмотрел пример кода, который может помочь

Он устанавливает в полях End Time / Date значение Start Time + 1,5 часа при создании нового события.

Это немного усложняется действиями, необходимыми для работы с датой и временем, но вы увидите примеры того, как найти элементы в форме, а также один способ перенести ваш скрипт в newform.aspx без использования 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>
 
1

Статья Использование jQuery для установки значения текстового поля в форме SharePoint на EndUserSharePoint .com показывает, как установить значение по умолчанию для поля с помощью JavaScript / jQuery.

У них также есть целая серия статей о «укрощении вычисляемых столбцов» , который покажет вам много более мощных опций, которые у вас есть для вычисляемых полей с использованием jQuery.

Одна вещь, о которой следует помнить при вставке JavaScript на страницу SharePoint и изменении DOM, - это поддержка. Существует небольшая вероятность того, что будущий пакет обновления нарушит функциональность, которую вы добавляете, и весьма вероятно, что следующая версия SharePoint нарушит ее. Однако, не забывая об этом, я считаю, что сейчас это хорошее решение.

  • Большое спасибо, я ценю помощь. Теперь я могу вернуться к коду, и мне гораздо больше нравится подчинять SharePoint своей воле !! Я вернусь и проголосую за вас, когда у меня будет 15 репутации.

    DavidMWilliams07 июля 2009, 09:43
  • Уууу, теперь у меня> 15 репутации, так что +1 тебе :)

    DavidMWilliams07 июля 2009, 15:22