문제

인증 된 사용자가 익명으로 항목을 목록에 추가 할 수 있어야합니다. 즉, 인증하지만 필드별로 작성 / 수정 된 필드에 의해 생성 된 / 수정 된 부분이 이름을 표시해서는 안됩니다.필드를 뷰에서 숨길 수 있었지만 클라이언트는 사이트 Coll Admin이 사용자가 항목을 추가 한 항목을 볼 수 있도록 사용자를 원하지 않습니다.문제의 필드를 변경하여 서비스 계정을 저장하지만 사용자 지정 코드를 포함하지 않고도 해결하는 또 다른 방법이 있습니까?

미리 감사드립니다.

도움이 되었습니까?

해결책

중앙 관리자를 통해 수행 할 수 있지만 모든 인증 된 사용자 에게이 절차를 사용하지 않는 것이 좋습니다.

  • 중앙 관리자의 응용 프로그램 관리로 이동 한 다음 '정책을 클릭하십시오. '응용 프로그램 보안'아래 웹 응용 프로그램의 경우
  • SharePoint 웹 응용 프로그램을 선택하면 문서를 업로드합니다. '사용자 추가'를 클릭하십시오.

  • 원하는 영역 (또는 '모든 영역')을 선택하고 '다음'을 클릭하십시오. 를 클릭하십시오.

  • 계정 이름을 지정하고 '완전한 컨트롤'의 상자를 확인하고
    '계정이 시스템으로 작동'된 상자를 확인한 다음
    클릭하십시오. '마침'.

    권장 방법은 물론 이벤트 수신기를 사용하는 것입니다. 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에는 두 개의 두 개의 과부하, SystemUpdate () 및 SystemUpdate (Boolean)가 있습니다. 두 번째 오버로드를 사용하면 TRUE를 전달하여 새 버전이 작성된 경우 제어 할 수 있습니다. 기본값 (매개 변수 오버로드 없음)은 false입니다 - 새 버전을 만들지 마십시오.

다른 팁

List.SystemUpdate () 를 사용할 수 있습니다.

item.update ()를 사용하면 목록 항목에 대한 변경 사항을 업데이트합니다.그게 모든 것이 무엇인가?또한 내부적으로 사용자 및 현재 서버 시간에 기록 된 현재로 "ModifiedBy"및 "ModifiedOn"필드를 업데이트합니다.선택적으로 해당 특정 목록에서 버전 관리 옵션이 켜져있는 경우 항목의 버전을 업데이트합니다.

그래서, 어떤 시점에서, 우리가 이러한 여분의 것들을 업데이트하지 않기를 바라는 경우, "modifiedon", "modifiedby"와 "item version", 솔루션은 항목 대신 item.systemupdate ()를 사용하는 것입니다.최신 정보().이렇게하면 코드 블록 내에 지정된 필드 만 업데이트하는 데 도움이됩니다.

SPSecurity.RunWitheLevatedPrivileges에서 실행되고 업데이트를 수행 해야하는 항목 이벤트 수신자의 항목 업데이버에서 항상 코드를 실행하거나 특정 "더미 사용자"로 업데이트하는 이와 유사한 무언가를 사용할 수 있습니다.코드 - 방금 현장에 썼습니다!).

버전 관리가 가능하면 일어나는 일을 확인해야합니다 (해당 사례가있는 경우!)

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