Sharepoint condicional campos em Edit.aspx
-
21-08-2019 - |
Pergunta
Eu gostaria de exibir determinados campos de dados meta no formulário de edição com base no valor de um campo.
Exemplo: Os usuários fazer upload de um documento para a DocLib a ser aprovado pelo há gerente. Eles são autorizados a alterar os dados meta name, caso não, Local até que o item seja aprovada pelo gerente. Uma vez que o item é aprovado gostaria de definir Nome e Número do processo para somente leitura.
O que é a melhor maneira de atender a esse requisito?
Se aprovado = yes definir o nome e processo n = Somente leitura Outro não fazer nada.
Eu tentei este método para cerca de 5 horas. Eu acreditava que isso pode ser diferente para ModerationStatus. Pode exigir algo especial
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>
");
Eu posso fazê-lo funcionar com os outros campos, mas não ModerationStatus. Eu também tentei mudar para = '0' e = 'Aprovado' e! '0; #Approved'. Existe algo que eu estou fazendo errado?
Parece que a sua preso em 0; #Approved
Solução
Isto pode ser facilmente resolvido com o SharePoint Designer.
- Você precisará modificar EditForm.aspx para a sua lista ??li>
- Esconder o padrão ListFormWebPart (não excluí-lo!)
- Inserir formulário de item de edição personalizado ( mais detalhes ... )
forma personalizada será exatamente o mesmo que o padrão, mas você será capaz de personalizá-lo com o SharePoint Designer. O código a seguir pode ser usado para padrão lista de problemas WSS. Ela vai mostrar título Issue como somente leitura quando Problema Status = Fechado .
<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>
Você pode aplicar a mesma lógica para as suas listas ou / e requisitos personalizados.
Como de costume, você pode executar a alguns problemas adicionais. Eu não era capaz de obter o valor de @_ModerationStatus em Data View Web Part. Eu não sei a razão exata ...
Aqui está uma solução simples:
- Criar uma coluna na sua biblioteca de documentos
- Crie um novo fluxo de trabalho no SharePoint Designer.
Deve disparar quando o item é alterado e copiar o valor do status de aprovação para a coluna recém-criado.
Você pode usar a coluna personalizada para formatação condicional.
Outras dicas
Os comentários de Acompanhamento Toni, mas para o seu _ModerationStatus uso em campo seguinte função XSLT:
<xsl:when test="not(starts-with(@_ModerationStatus,'0'))">