フォームライブラリではなく、新しく宣伝されたインフォパスフィールド?
-
28-10-2019 - |
質問
私は、正常に動作しているフォームライブラリのプライマリコンテンツタイプとして設定されたInfoPathフォームを持っています。フォームは、中央管理者を介してアップロード/アクティブ化された管理されたテンプレートであり、多くのプロモートフィールドが含まれています。
今、私はInfopathのフォームに別のフィールドを追加しました(そして、そのためのフォームのコントロールを可視性のために追加しました)、そのフィールドをライブラリに促進するように設定しました(両方を通して確認されました Tools -> Form Options -> Property Promotion
, 、および公開時のリスト)およびフォームを公開およびアップロードしました(中央管理者を使用)。
SharePointでフォームを開くと(フォームライブラリに新しいアイテムを作成するか、そのライブラリに既存のアイテムを開くことで)新しいフィールドのコントロールが表示され、フィールドにデータを保存できます。ただし、フィールドは宣伝されていません。そのため、以下のいずれにも表示されないという点では、フィールドは宣伝されていません。
- アイテムプロパティページ(表示/編集)
- ビュー]ページの作成/変更
- フォームライブラリの設定ページの列リスト
- フォームライブラリの設定ページのフォームのコンテンツタイプの列リスト
私は、このフィールドをライブラリ全体を削除して最初からやり直すことを宣伝するために、私が考えることができるすべてを試しました。他の誰かがこの問題に遭遇しましたか?既存のライブラリに新しいフィールドを宣伝するにはどうすればよいですか?
解決
さて、私は自分の質問に答えました...
私がやったことは最終的に:
- フォームライブラリ全体を削除しました
- フォームライブラリの新しいコピー/バージョンを作成し、サイトのコンテンツタイプギャラリーからフォームのコンテンツタイプを追加しました
これは何も修正しませんでした。それをしないでください。
私の次のステップはおそらく過剰でしたが、私:
- フォームライブラリ全体を削除しました
- サイトのコンテンツタイプギャラリーからフォームのコンテンツタイプを削除しました
- Infopathフォームから完全にフィールドを削除しました
- フォーム(マイナスフィールド)を公開し、中央管理者にアップロードしました
- Infopathのフィールドを再び採用して公開し、以前と同じようにフィールドを再び宣伝し、Central Adminを通じてアップロードしました
- フォームのコンテンツタイプをフォームライブラリの新しいコピー/バージョンに追加しようとしました(コンテンツタイプは利用できませんでした)
- サイト収集設定のフォームの機能を無効にして再アクティブ化しました
- フォームのコンテンツタイプを新しいフォームライブラリに追加しました
そして、それはうまくいきました!
私の理論では、InfoPathフォームの機能を非アクティブ化して再活性化することで、昇進したフィールドを更新するようになり、コンテンツタイプが古いフィールドを使用するまで(あなたがしていることは何もしないようにする」フォームライブラリレベルは意味を意味します)。しかし、生産データに取り組んでいる場合、それはまだ非常に破壊的な操作であり、SharePointに公開されたInfopathフォームのプロモートプロパティ/フィールド/列を更新するより簡単で「より安全な」方法がまだあることを望んでいます。
しかし、おそらくそうではありません。
他のヒント
単に無効にしてから、機能を再活性化するだけで十分でした。また、破壊的ではないようです。それはおそらくあなたの機能に何があるか、私の場合はインフォパスの形で、他に何も依存するでしょう。
PowerShellによってこの問題を解決しました(使用済み)。
あなたは知る必要があります:
1)コンテンツタイプのフィールドID
2)XpathからInfopath形式のフィールドへ
次に、このPowerShellスクリプトを使用する必要があります。
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
$web = Get-SPWeb "https://intranet.company.com"
$contentTypeName = "Content Type Name"
$ct = $web.ContentTypes[$contentTypeName]
# Content Type Fields
# Field
$fieldId = "1209bb86-645b-4e56-aea2-265a325a98af"
$fieldLinks = $ct.FieldLinks | Where-Object {$_.Id -eq $fieldId}
$fieldLinks.ReadOnly = $true
$fieldLinks.XPath = "/my:Fields/my:FieldGroup/my:Field"
$ct.Update($true)