匿名でリストする項目を追加します(匿名ユーザーとしてではありません)。

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/37053

質問

私は認証されたユーザーがリストにアイテムを匿名で追加できるようにする必要があるという要件を持っています、すなわちそれらは認証されますが、フィールド別に作成された/修正されたものはそれらの名前を表示しないでください。私はビューからフィールドを非表示にするだけでなく、クライアントはサイト契約管理者を持つユーザーがアイテムを追加したのかを確認できるようにすることさえしません。私はあなたがサービスアカウントを保存するために質問のフィールドを変更するイベント受信者とこれをこれにできると思いますが、カスタムコードを含まずにそれをするもう1つの方法はありますか?

事前にありがとうございました。

役に立ちましたか?

解決

Central Admin経由で実行できますが、認証されたすべてのユーザーに対してこの手順を使用することはお勧めしません。

  • Central Adminで、アプリケーション管理に移動してから、[ポリシー]をクリックします。 「アプリケーションセキュリティ」の「Webアプリケーションの場合」
  • 文書をアップロードしているSharePoint Webアプリケーションを
    そして[ユーザーの追加]をクリックします。

  • 目的のゾーン(またはすべてのゾーン ')を選択し、[次へ]をクリックします。

  • あなたのアカウント名を指定し、「完全なコントロール」のボックスをチェックし、
    「アカウントをシステムとして動作する」というラベルの付いたボックスをオンにしてから、[
    ]をクリックします。 '終了'。

    推奨道は、もちろんイベント受信者を使用する方法です。 item.systemUpdate()を一覧表示して使用します。以下のコードを参照してください。

    public override void ItemAdded
                              (SPItemEventProperties properties)
    {
       SPUser adminUser =
           properties.Web.EnsureUser("GEEKTRAINER\\charrison");
       using (SPSite site =
           new SPSite(properties.WebUrl, adminUser.UserToken))
       using (SPWeb web = site.OpenWeb()) {
         SPList list = web.Lists[properties.ListId];
         SPListItem item = list.GetItemById(properties.ListItemId);
    
         item.BreakRoleInheritance(true);
         item.SystemUpdate();
       }
    
    
     }
    
    .

    SystemUpdateには、2つのオーバーロード、SystemUpdate()とSystemUpdate(Boolean)があります。 2番目の過負荷では、TRUEに渡して新しいバージョンが作成されたかどうかを制御できます。デフォルト(パラメータの過負荷なし)がfalseです - 新しいバージョンを作成しないでください。

他のヒント

これを考えてみると、list.systemupdate()を使うことができます

item.update()では、リスト項目に加えられた変更を更新します。それはそれが何をするのでしょうか?NO、内部的には、現在のログインユーザーと現在のサーバーの時刻に従って、 "modifiedby"と "middudon"フィールドも更新します。オプションで、バージョン管理オプションがその特定のリストに対してオンになっている場合は、アイテムのバージョンも更新します。

それで、これらの追加事項、すなわち「修正on」、「修正ビリー」、および「アイテムバージョン」を更新しない場合は、その解決策はアイテムの代わりにitem.systemupdate()を使用することです。更新()。これにより、コードブロック内で指定されているフィールドのみを更新するのに役立ちます。

SPSecurity.RunWithWithElevatedPrivilegesで実行されるアイテムイベント受信者のItemUpdated部分で実行されているコードを常に実行し、それを使って更新を実行するか、特定の "Dummy User"で更新するためにこれに似たものを使用することができます(チェックコード - 私はちょうどそれをスポットに書いた!)。

バージョン管理が有効になっている場合はどうなるかを検証する必要があります(そのためのケースがある場合)

using(SPSite currentSite = new SPSite(properties.Site.Url))
{ 
    SPWeb oWeb = oSite.OpenWeb();

    SPList oList = oWeb.Lists["TestCustomList"];
    SPListItemCollection oListCollection = oList.Items;
    foreach (SPListItem oListItem in oListCollection)
    {
        SPFieldUserValue oUser =
        new SPFieldUserValue(
            oWeb,
            oWeb.CurrentUser.ID,
            oWeb.CurrentUser.LoginName);

        // or you can hard code the value like this
        SPFieldUserValue oUser = new SPFieldUserValue(oWeb, 14, "Dummy User");
        oListItem["Author"] = oUser;//created by column value = "14;#DummyUser"
        oListItem["Editor"] = oUser;//modified by column value = "14;#DummyUser"              
        oListItem.Update();              
    }         
    oWeb.Update();
}
.

ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top