Edit.aspx の Sharepoint 条件付きフィールド
-
21-08-2019 - |
質問
フィールドの値に基づいて、編集フォームに特定のメタデータ フィールドを表示したいと考えています。
例:ユーザーはドキュメントを 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;#承認済みで止まっているようです
解決
これは SharePoint Designer を使用すると簡単に解決できます。
- 変更する必要があります EditForm.aspx あなたのリストのために
- デフォルトを非表示にする リストフォームWebパーツ (削除しないでください!)
- カスタム編集項目フォームを挿入 (さらに詳しく...)
カスタム フォームは既定のフォームとまったく同じに見えますが、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>
同じロジックをカスタム リストや要件に適用できます。
いつものように、追加の問題が発生する可能性があります。データ ビュー Web パーツで @_ModerationStatus の値を取得できませんでした。正確な理由は分かりません...
簡単な回避策は次のとおりです。
- ドキュメント ライブラリに列を作成する
- ワークフロー SharePoint Designer で新規作成します。
アイテムが変更されたときに起動し、承認ステータスの値を新しく作成された列にコピーする必要があります。
カスタム列を条件付き書式設定に使用できます。
他のヒント
XSLT機能以下が、あなたのの_ModerationStatus のフィールドでの使用のためにトニのコメントに従ってください:
<xsl:when test="not(starts-with(@_ModerationStatus,'0'))">