1つのサイトコレクションから別のサイトコレクションにSPListItem(ファイル付き)をコピーしようとしています。私はそのようにSPListItemの作成者フィールドが保持されません。
Utilities.PopulateListItemMetadata(....)
ことのようにオリジナルのアイテムに対応するために、新しいアイテムのすべてのフィールド値を設定して書いたユーティリティメソッドを通じて
var archiveFile = newsArchive.Lists[listName].RootFolder.Files.Add(originalItem.File.Name, originalItem.File.OpenBinary());
var archiveItem = archiveFile.Item;
:私はこのようなファイルを作成することによって、これを行いますこれはAuthorフィールドを保持しません。
私はそうのような、たとえば、ありとあらゆる方法で明示的にAuthorフィールドを設定してみました:
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user.ID + ";#" + user.LoginName;
archiveItem.Update();
そしてそう
string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user;
archiveItem.Update();
しかし、すぐにSPListItem.Update()メソッドがあるとして、のようなarchiveItem ["Author"]フィールドがsharepoint \ systemに戻りました。私はここで紛失しているが、これはうまくいくはずだ。
P.S. SPListItem.GetUserメソッドは拡張メソッドです
P.P.S.コードは...
編集タイマージョブから実行されている:いくつかは、より多くのコンテンツタイプに新しいフィールドを追加し、元のアイテムの作者を反映するために、そのフィールドを設定することで掘りましたが、それは設定されていませんどちらか。ただし、web.EnsureUser(username)は正しいユーザーを返します。これは奇妙なものなのですか?
新しいSPFieldUserValueを作成することは、おそらくそれを正しくnewsArchiveにマッピングすることでしょうか?役に立った、ありがとう! –
おそらく、コンストラクタはSPWebへの明示的な参照を必要とするでしょうか? – Colin
SystemUpdate(false)は、SystemUpdate()によって短縮できます。 –