Вопрос

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

Пример:Пользователи загружают документ в 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' и !='Approved' и '0;#Approved'.Есть ли что-то, что я делаю неправильно?

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

Это было полезно?

Решение

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

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

Пользовательская форма будет выглядеть точно так же, как форма по умолчанию, но вы сможете настроить ее с помощью 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.

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

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

Другие советы

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

<xsl:when test="not(starts-with(@_ModerationStatus,'0'))">
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top