locked
JSリンクを使用してカスタムリストのアイテムのユーザーとグループ列の表示名を取得するには RRS feed

  • 質問

  • お世話になっております。

    JSリンクを使用してカスタムリストに登録したアイテムのタイトルとユーザー名をCSSで加工し表示したいと考えています。
    ユーザー名はSenderNameという物理名で列のタイプはユーザーとグループ列(表示フィールドは、名前 )です。
    今、アイテムにタイトル:テスト1、ユーザー名(SenderName):田中一郎 ※ADに存在するユーザー と入力し、
    下記のJSリンクのコードを実装したところ、SenderNameが"2"となり期待する表示名"田中一郎"となりません。

    (function () {
    
        var overrideCtx = {};
        overrideCtx.Templates = {};
    
        overrideCtx.BaseViewID = 1;
        overrideCtx.ListTemplateType = 100;
        overrideCtx.Templates.Item = customItem;
    
        SPClientTemplates.TemplateManager.RegisterTemplateOverrides(overrideCtx);
    })();
    
    function customItem(ctx) {
    
        var outputHTML;
        
        var rowData = ctx.ListData.Row[0];
        var Title = rowData.Title;
        var SenderName = rowData.SenderName; // "2"
    
        outputHTML = <HTMLによる加工など>
    
        return outputHTML;
    }

    他のプロパティ等探しましたが有効な手立てが見つからず、
    ユーザーとグループ列の表示名を取得する方法があればご教示下さい。

    宜しくお願い致します。

    2016年2月9日 13:55

回答

  • title は Title ではなく、全て小文字で title でもダメでしょうか?

    手元で試してみると、
    ctx.CurrentItem.SenderName[0].title
    ctx.CurrentItem["SenderName"][0].title
    のどちらでもユーザーの表示名が取得できそうです。

    また、ご紹介頂いた URL 先でも記載されていますが、ビューの設定で JS リンクのスクリプトで扱いたい列を表示対象として設定しておく必要がありますので、こちらも合わせてご確認ください。

    • 回答としてマーク tazdam 2016年2月16日 2:35
    2016年2月15日 0:13

すべての返信

  • 補足します。
    上記コード内でRESTを使用(_api/web/getUserById)することでユーザーの表示名を取得することは出来ましたが、
    もしRESTを使用しない他の手段がありましたらご教示下さい。

    2016年2月10日 1:54
  • ブラウザの F12 開発者ツールなどで確認すると、SenderName には配列でオブジェクトが登録されていませんか?
    SendarName[0].title として取得すると、ユーザーの表示名が取れそうな気がします。
    2016年2月10日 2:06
  • OTA Hirofumi様
    ご指摘ありがとうございます。

    開発者ツールで試したところ、
    rowData.SenderName[0].title は「undefined」となりました。
    なお、rowData.SenderName[0] は「"2"」となります。

    また、こちらのサイトを参考に記述を変えて試してみましたが、期待する結果とはなりませんでした。
    http://sharepoint.stackexchange.com/questions/167203/sharepoint-jslink-ctx-currentitemauthor0-title

    ctx.CurrentItem["SenderName"][0].Title //undefined
    ctx.CurrentItem["SenderName"] //"2"
    ctx.CurrentItem["SenderName"][0].["Title"] //識別子がありません。

    2016年2月10日 8:41
  • title は Title ではなく、全て小文字で title でもダメでしょうか?

    手元で試してみると、
    ctx.CurrentItem.SenderName[0].title
    ctx.CurrentItem["SenderName"][0].title
    のどちらでもユーザーの表示名が取得できそうです。

    また、ご紹介頂いた URL 先でも記載されていますが、ビューの設定で JS リンクのスクリプトで扱いたい列を表示対象として設定しておく必要がありますので、こちらも合わせてご確認ください。

    • 回答としてマーク tazdam 2016年2月16日 2:35
    2016年2月15日 0:13
  • OTA Hirofumi様

    はい、小文字のtitleでも表示名は取得できず、undefinedとなりました。
    使用しているビューには表示項目として選択しています。

    カスタムリストに予め登録されている列である登録者(Author)や更新者(Editor)
    で置き換えてみましたが、現象は変わりませんでした。

    開発者ツールではそもそもSenderNameやAuthor、Editorは配列にはなっていないように見えます。

    実は現在利用しているビューのスタイルは「ニュースレター」を使用していまして
    このスタイルを「基本的な表形式」に変更したところ上記のSenderNameやAuthor、Editorが配列扱いとなり、
    教わった書き方で表示名を取得することが出来ました。

    現状はJSリンクのコード内でビューのスタイルを明示的に指定する必要があるのかと思いプログラムを見直しています。
    もしくはスタイルを「ニュースレター」とせず、実現したいデザインとなるよう検討するつもりです。

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

    2016年2月16日 2:34