Sharepoint Условные поля в Edit.aspx

Я хотел бы отобразить определенные поля метаданных в форме редактирования на основе значения полей.

Пример: пользователи загружают документ в Doclib для утверждения его менеджером. Им разрешено изменять метаданные Имя, Номер дела, Местоположение, пока элемент не будет утвержден менеджером. После того, как предмет будет одобрен, я хотел бы установить имя и номер дела только для чтения.

Каков наилучший способ удовлетворить это требование?

Если одобрено = да, задайте Имя и № дела = Только для чтения, иначе ничего не делайте.


Я пробовал этот метод около 5 часов. Я полагал, что это может отличаться для ModerationStatus. Может потребоваться что-то особенное

print("<xsl:choose>
<xsl:when test="@_ModerationStatus != '0;#approved'">               
<SharePoint:FormField runat="server" id="ff12{$Pos}" ControlMode="Edit" FieldName="Test_x0020_Session" __designer:bind="{ddwrt:DataBind('u',concat('ff12',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Test_x0020_Session')}"/>
<SharePoint:FieldDescription runat="server" id="ff12description{$Pos}" FieldName="Test_x0020_Session" ControlMode="Edit"/>                      
</xsl:when>
<xsl:otherwise>
     <xsl:value-of select="@Test_x0020_Session"></xsl:value-of>
</xsl:otherwise>

«);

Я могу заставить его работать с другими полями, но не с ModerationStatus. Я также попытался изменить его на! = '0' и! = 'Одобрено' и '0; #Approved'. Я что-то не так делаю?

Похоже, он застрял на 0; # Утверждено

11.12.2008 17:36:52
2 ОТВЕТА
РЕШЕНИЕ

Это можно легко решить с помощью SharePoint Designer.

  • Вам нужно будет изменить EditForm.aspx для вашего списка
  • Скрыть по умолчанию ListFormWebPart (не удаляйте его!)
  • Вставьте форму редактирования элемента ( подробнее ... )

Пользовательская форма будет выглядеть точно так же, как и форма по умолчанию, но вы сможете настроить ее с помощью SharePoint Designer. Приведенный ниже код можно использовать для списка проблем WSS по умолчанию. Заголовок проблемы будет отображаться как доступный только для чтения, когда статус проблемы = закрыт .

<xsl:choose>
    <xsl:when test="@Status != 'Closed'">
        <SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="Edit" FieldName="Title" __designer:bind="{ddwrt:DataBind('u',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}"/>
        <SharePoint:FieldDescription runat="server" id="ff1description{$Pos}" FieldName="Title" ControlMode="Edit"/>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="@Title"></xsl:value-of>
    </xsl:otherwise>
</xsl:choose>

Вы можете применять ту же логику для своих пользовательских списков или / и требований.

Как обычно, вы можете столкнуться с некоторыми дополнительными проблемами. Мне не удалось получить значение @_ModerationStatus в веб-части представления данных. Я не знаю точную причину ...

Вот простой обходной путь:

  1. Создайте столбец в вашей библиотеке документов
  2. Создайте новый рабочий процесс в SharePoint Designer.

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

Вы можете использовать пользовательский столбец для условного форматирования.

1
20.12.2008 14:49:49
Имейте в виду, что это будет работать только на странице, настроенной, как описано выше. Пользователи смогут редактировать эти поля с помощью других аспектов пользовательского интерфейса SharePoint, в частности редактирования таблицы (Действия> Изменить в таблице при просмотре списка), а также подключив Access 2007 к рассматриваемому списку. Разрешения могут быть установлены для элементов списка и списков, но не с разбивкой по конкретным столбцам, хотя существуют сторонние решения от таких компаний, как Bamboo Solutions, которые пытаются предоставить эту функцию.
Harv 21.09.2009 04:32:59

Следуйте комментариям Тони, но для своего поля _ModerationStatus используйте следующую функцию XSLT:

<xsl:when test="not(starts-with(@_ModerationStatus,'0'))">
0
18.12.2008 13:05:09