SharePoint에서 간단한 게시판 만들기

5946 단어 SharePointPowerShell
블로그에서 전재

요 전날 SharePoint 보기에 적용되는 필터에서 동적 값을 사용할 수 있음을 알게 되었습니다.

[Me]와 [Today]를 사용하면 액세스한 사용자와 액세스한 날을 필터로 사용할 수 있습니다.



여기를 사용하여 논프라밍으로 간단한 게시판을 만들려고 생각했습니다.
※논프라밍은 무리였습니다 _(:3」∠)_

하고 싶은 일(사양)


  • 제목, 본문 및 첨부 파일 외에도 게시 기간을 지정할 수 있습니다.
  • 타인이 만든 데이터는 게재 기간외일 때 열람 불가
  • 자신이 만든 데이터는 게재 기간외에서도 열람 가능

  • 환경



  • 서버 환경
  • SharePoint Online


  • 클라이언트 환경
  • Windows 10 Pro
  • PowerShell 5.1


  • 준비한 목록



    리스트명은 게시판으로 했습니다.

    리스트의 작성 방법은 자세하게 쓰지 않습니다만, 열의 내부명을 반각 영숫자로 붙이기 위해서, 아래 표의 「열의 내부명」으로 일단 등록해, 그 후에 「열명」으로 변경하고 있습니다 .


    열의 내부 이름
    열 이름
    종류
    필수


    body
    본문
    여러 줄 텍스트
    -

    publish_date
    공개일시
    날짜와 시간


    limit_date
    게재 마감
    날짜와 시간
    -


  • 공개일시(publish_date)
  • 게재 기한(limit_date)

  • 필터 만들기



    필터가 기존의 '모든 항목'을 수정했습니다.

  • 표시
  • 제목
  • 등록자
  • 공개 일시
  • 게시 기한


  • 정렬
  • 공개 일시, 내림차순
  • 게시 기한, 오름차순

  • 필터

  • 이 필터로 다음을 실현하고 있습니다.

    (게재 기한 is null and 공개 일시 <= 오늘) or (게재 일시 >= 오늘) or (등록자 = 현재 사용자)

    [Today]의 함정



    SharePoint를 사용하는 사람이라면 상식이지만 [Today]는 날짜 만 비교합니다. [Now] 라든지는 준비되어 있지 않은 것 같습니다. 뭐가 잘못 됐니?

    이대로라면, 공개일시 2017/05/06 12:00 으로 한 기사가 2017/05/06 00:00 가 되면 볼 수 있습니다! 아니, 좋지만 절각을 만들었는데 슬프다.



    그래서 SharePoint Designer에서 CAML Query를 변경하는 기사가 많기 때문에 그곳을 모방하고 SharePoint Designer는 싫어서 PowerShell로 하기로 했습니다.

    [Today]를 시간을 보도록 설정



    PowerShell을 시작하고 다음을 수행합니다.
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null
    
    # 取得する SharePoint Online の URL
    $url = 'https://<your tenant>/';
    
    # ユーザー名
    $user = '<your account>';
    
    # パスワード
    $secure = Read-Host -Prompt "Enter the password for ${user}(Office365)" -AsSecureString;
    
    # SharePoint Online 認証情報
    $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($user, $secure);
    
    # SharePoint Client Context インスタンスを生成
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($url)
    $context.Credentials = $credentials
    
    # View の取得
    $view = $context.Web.Lists.GetByTitle("掲示板").Views.GetByTitle("すべてのアイテム")
    $context.Load($view)
    $context.ExecuteQuery()
    
    # DateTime 型に時間も含める
    $view.ViewQuery = $view.ViewQuery -replace '<Value Type="DateTime">', '<Value Type="DateTime" IncludeTimeValue="True">'
    
    # 保存
    $view.update()
    $context.Load($view)
    $context.ExecuteQuery()
    
    # オブジェクト破棄
    $context.Dispose()
    

    18행째까지는 거의 흔들리지 않습니다.

    21행째로 기존의 뷰 「모든 아이템」을 취해 오고, 26행째로 IncludeTimeValue="True" 를 덧붙여 시간도 더하는 설정을 하고 있습니다.

    결과


  • 등록자 2017/05/06 12:01 지나

    등록자는 모두 데이터를 볼 수 있습니다
  • 다른 사용자 2017/05/06 11:55

    다른 사용자로부터는 공개 일시 ≦ 현재 ≦ 게재 기한 의 데이터가 보이고 있다
    # 공개 기한 12:00의 데이터 (패턴 2와 패턴 6)가 보입니다
  • 다른 사용자 2017/05/06 12:01

    다른 사용자로부터는 공개 일시 ≦ 현재 ≦ 게재 기한 의 데이터가 보이고 있다
    # 패턴 2와 패턴 6의 데이터가 보이지 않습니다

  • 참고


  • SharePoint 2013 목록 보기에서 복잡한 필터 기준 설정
  • How do I filter by [Today] and time in SharePoint list view ?
  • 좋은 웹페이지 즐겨찾기