Doc Lib をターゲットにし、ドキュメントの「名前」を使用するルックアップ列を作成するにはどうすればよいですか?
-
20-08-2019 - |
質問
ドキュメントの「名前」を参照値として使用するドキュメント ライブラリへの参照列を作成するにはどうすればよいですか?
「FileName」のような別のカスタム フィールドを追加し、アイテム レシーバーを使用してカスタム フィールドに [名前] フィールドの値を入力することを推奨するブログ投稿を見つけましたが、それは安っぽいようです。興味がある人のためにブログへのリンクを貼っておきます。http://blogs.msdn.com/pranab/archive/2008/01/08/sharepoint-2007-moss-wss-issue-with-lookup-column-to-doc-lib-name-field.aspx
カスタム ドキュメント コンテンツ タイプが多数ありますが、とにかく実際に機能するはずの回避策で乱雑にしたくありません。
解決
これを行う方法の 1 つは (最も簡単な方法ではありませんが)、SPFieldLookup クラスを拡張するカスタム フィールド タイプを作成することです。SharePoint のルックアップ フィールド用のフィールド エディターは、ルックアップ フィールドでサポートされていない列の種類を意図的に非表示にしますが、それらを表示するカスタム フィールドの種類用のフィールド エディターを作成できます。
ただし、以前にドキュメント ライブラリの名前列を指すルックアップ列を作成したことがありますが、おそらく期待どおりに機能しません。ルックアップ列に保存されている値は有効ですが、リスト ビューや [プロパティの表示] フォームには表示されません。
あなたが投稿した解決策は、実際にはこれに対処する最良の方法である可能性があります。より複雑なシナリオを処理したい場合、ルックアップ フィールドには多少の工夫が必要ですが、それは、ルックアップ フィールドがデータベース内の外部キー リレーションシップと同じ機能を提供することを目的としていないためです。
他のヒント
名前からタイトルを設定し、変更時に起動して作成するワンステップのワークフローを作成しました。動作しているようで、作成には数秒かかりました。
どのような形式であっても、コーディングは常に私を怖がらせます。そこで私がやったことは次のとおりです。このフィールドでは何もできないため、Stupid "Title" フィールドの名前を別の名前、たとえば "Keywords" に変更しました。義務化すらできない。次に、「タイトル」という名前の別の単一行フィールドを作成し、このフィールドをルックアップに使用しました。
まあ、それに対する簡単な解決策があり、場合によってはうまくいくかもしれません。簡単に言うと、[タイトル] フィールドを必須にすると、ユーザーはタイトルの入力を強制されます。このようにして、タイトル フィールドをルックアップ フィールドとして使用できます。
さて、それをどうやって行うか?ドキュメント ライブラリの作成が完了したら、ライブラリ設定に移動します。[詳細設定] を選択し、[コンテンツ タイプの管理を許可しますか?] オプションで [はい] を選択します。次に、ライブラリ設定に戻り、コンテンツ タイプで「ドキュメント」コンテンツ タイプを選択します。次に、タイトル列を選択し、「必須(情報が含まれている必要があります)」を選択して「OK」と言います。
次に、このドキュメント ライブラリにドキュメントをアップロードしてみます。フォームに「タイトル」フィールドが表示されます。
これがVaqarを応援するのに役立つことを願っています
ShowField を「FileLeafRef」として XML としてフィールドを追加する必要があります。
var XmlFieldDefinition = "<Field DisplayName='myLookupColumn' Type='LookupMulti' StaticName='myLookupColumn' Name='myLookupColumn' Required='FALSE' List='THE LOOKUP ID HERE' WebId='THE WEB ID HERE' UnlimitedLengthInDocumentLibrary='TRUE' Mult='TRUE' Sortable='FALSE' ShowField='FileLeafRef' />"
Field fld = fieldCollection.AddFieldAsXml(XmlFieldDefinition, true, AddFieldOptions.DefaultValue);
ClientContext.Load(fld);
ClientContext.ExecuteQuery();