1

データをインポートするときのルックアップフィールドの動作について質問がありました。ルックアップフィールドが指すリストが置き換え/インポートされるときに、ルックアップフィールドがどのように動作するのだろうか。この問題を説明するために、以下に簡単な例を示します。

例として、次の2つのSharePointリストがあるとします。

Product Types
-------------
+ Type Name
+ Code Nr
+ etc


Products
--------
+ Product Name
+ Product Type (Lookup field to list "Product Types")
+ etc

私のシナリオでは、製品リストに本番Sharepointプラットフォームの本番データが含まれています。それはビジネスユーザーによるデータで満たされています。ただし、製品タイプリストにはかなり静的なデータが含まれており、開発者によって維持されます。

開発サイクルの後、開発者は新しいWebパーツと新しいデータ(製品タイプリスト)を展開したいと考えています。開発者は次の手順を実行します。

  1. 開発マシンの場合:stsadmを使用して「製品タイプ」リストをエクスポートします
  2. 実動マシンの場合:「製品タイプ」リストのすべてのアイテムを削除します
  3. 本番マシンの場合:stsadmを使用して「製品タイプ」リストをインポートします

つまり、基本的には、「製品」リストをそのままにして、本番サーバーの「製品タイプ」リストを置き換えます。

今の質問:

  • これは安全ですか?ルックアップ参照は特定の状況で壊れますか?
  • このインポート/エクスポート手順の欠点はありますか?
  • インポート中に誰かが「製品」にアクセスするとどうなりますか?(現在は無効な)参照はそれ自体のコンテンツをクリアしますか(null値になります)。
  • 「製品タイプ」リストのスキーマが変更された場合はどうなりますか(新しい列)?これでトラブルは発生しますか?

すべてのフィードバックと提案をありがとう!

更新1 インポートされた「製品タイプ」アイテムは、以前に削除されたものと同じIDを持ちます。

アップデート2 さらにフィードバック/意見を得るために報奨金を開始しました。

4

2 に答える 2

2

これまでとまったく同じシナリオがありました。アプローチ方法にもよりますが、これは少し注意が必要です。

1)UIを使用して製品タイプリストを削除および再作成します

UIを使用してルックアップリスト(この場合は製品タイプ)を削除して再作成すると、リストのID GUIDが再作成時に変更されるため、接続が失われます。だから、そのルートに行かないでください。

2)機能を使用して製品タイプを削除および再作成します

要素を使用してファイルから製品タイプリストを作成した場合、そのリストを削除してから同じ機能を使用して再作成すると(基本的に、ListInstanceのId属性は同じままで、リストアイテムの数、つまり要素の数、変更される可能性があります)、関連付けは維持されます。したがって、さらに5つの製品タイプを追加する場合、機能を使用してリストを作成した場合は、リストを削除し、同じ機能を使用して新しいアイテムの追加情報を使用して新しいリストをプロビジョニングするだけで、すべてが正常に機能します。feature.xml<ListInstance><Row>

ちなみに、これはより良いアプローチです。なぜなら、多くのサーバーでアップグレードを行う必要がある場合は、stsadmを介してリストのエクスポートをインポートするのではなく、機能の非アクティブ化とアクティブ化がはるかに推奨されるソリューションだからです。これが私たちのやり方です。

3)製品タイプからすべてのリストアイテムを削除し、新しいアイテムを追加します(リストが削除されることはありません)

ルックアップフィールド(製品リスト内)をルックアップリスト(製品タイプ)のIDフィールドにリンクする場合、IDは自動インクリメントされることを覚えておく必要があります。したがって、すべてのアイテムを削除してから新しいアイテムを追加すると、 IDは異なります。リストにIDが1〜5個あるアイテムが5つあるとします(データセットビューで編集している間、IDフィールドはUIに表示されません)。それらを削除して新しいアイテムを追加すると、それらのIDは1ではなく6から始まります。したがって、ルックアップフィールドにID 1のアイテムへのリンクが含まれている場合、製品タイプリストにID 1のアイテムがないため、このメソッドは機能しません。したがって、この方法で本番環境に移行する前に、これを実際に試してみることをお勧めします。

4)リストを適切に編集する

リストがそれほど大きくなく、この変更を1つまたは2つのインスタンスに加えるだけでよい場合は、prodサーバーのデータシートビューでリストを直接編集するだけでは不十分でしょうか。データシートビューで編集する場合は、アイテムを削除せず、列の値を上書きするだけです。また、必要に応じてアイテムを追加できます。これにより、IDが有効であることが確認されます。

私は主にリストに新しいアイテムを追加することについて話しました。これで、既存のアイテムを削除する場合、フィールドをIDでリンクしたとすると、アイテムが削除されたためIDが存在しなくなるため、ルックアップフィールドが影響を受けます。基本的に、IDを維持するために使用する方法はすべて重要です。

疑問/質問について:リストのstsadm export importについてはよくわかりませんが(自分で行ったことはありません)、一部の操作は特定のスコープでのみ機能するため、stsadmは注意が必要です。したがって、開発環境で正確なシナリオを試してみることをお勧めします。

インポート中に何が起こるかは、正確なタイミングによってはまた注意が必要です。SPには独自の並行性メカニズムがあると確信していますが、インポートの段階によって異なる可能性があるため、明確な答えを得ることができません。可能であれば、推奨されるアプローチは、計画されたダウンタイム中にインポートを実行することです。

リストのスキーマの変更に関しては、リストのスキーマを変更しても、既存のリストインスタンスには影響しません(ほとんどの場合)。UIを介してこれを行う場合、SPはコンテンツDBに直接変更を加えると思います。これをどのように行うのかはわかりませんが、機能を使用して既存のリストに列を追加する場合、これを行う方法は、機能のアクティブ化中に、リストに新しいコンテンツタイプを追加し、新しい列を追加することです。このコンテンツタイプに。この方法で列を追加しますが、既存のリストアイテムには影響しません。

幸運を...

于 2010-04-26T21:55:04.020 に答える
1

特定のルックアップには、フィールドとフィールド値の2つのコンポーネントがあります。フィールド値には、参照するアイテムのIDと表示フィールドのみが含まれます。この情報は、表示するリストと表示フィールドとして使用するフィールドを指定するフィールドがないと意味がありません。

  • ルックアップが機能しなくなる主な理由は、フィールドスコープで発生します。参照したリストが存在しないか、リストに必要なフィールドが含まれていません。これらは通常、リストを削除して再作成した場合に発生しますが、それは実行していません。ルックアップのリスト参照を壊した場合、ルックアップフィールドが作成されるとリスト参照を構成できないため、ルックアップを再作成することしかできません。
  • インポート/エクスポート手順の欠点は、現在存在するすべてのルックアップ値の有効性が失われることです。ルックアップは、参照するアイテムのIDに基づいて整合性を維持します。したがって、表示フィールドが変更されても、同じアイテムを参照します。アイテムを削除すると、表示フィールドに同じ値を持つ新しいアイテムを作成した場合でも、ルックアップはそのアイテムを参照しなくなります。したがって、すべての製品を新しい製品タイプに再割り当てする必要があります。
    • そのアイテムの削除を元に戻すと、ルックアップに戻ることに注意してください。そのIDへの参照は、実際のルックアップ値が更新されるまで(Productの編集などによって)保持されます。
  • 現在無効になっている参照はすべて、対話の目的でnullになります。表示フォームには何も表示されず、製品を更新しようとしたときにオプションが表示されません。製品を更新するときは、設定したとおりに更新します。これは、存在しないIDを設定できないため、それらのIDへの参照がなくなることを意味します。
  • ルックアップに指定された表示フィールドに影響を与えない製品タイプリストのスキーマへの変更は、ルックアップの整合性に影響を与えません。表示フィールドを何らかの方法で変更した場合、そしてもちろんそれを削除した場合、リスト参照と同じ方法で表示フィールドが壊れます。ただし、UIとオブジェクトモデルの両方で表示フィールドを設定できるため、これを簡単に修正できます。
于 2010-04-21T19:19:12.923 に答える