CSV出力する際に「ユーザー選択」フィールドのユーザー表示名を出力したい

いつも参考にさせていただいております。
営業日報アプリを作成して運用しています。
この中で「ユーザー選択」フィールドで作成した項目(ログインユーザー)について、レコード一覧画面上ではユーザー表示名が表示されていますが、「ファイルに書き出す」機能を利用してCSV出力した結果ではログイン名(ID)が出力されてしまいます。
この時、ユーザー表示名を出力する方法はないでしょうか?

cybozu.com developer network を参照したところ、「https://cybozudev.zendesk.com/hc/ja/articles/203605844」で参考になりそうなトピックスが掲載されていましたが、最終まで解決できていない模様なのと、関連レコード設定でkintoneログインユーザーテーブルが設定できないため、どうしたものかと思案している状況です。

ご教示いただけると幸いです。

teraさん

サイボウズスタートアップスの武井です。

 

端的に申し上げると、「標準CSV出力」で「ユーザー選択」フィールドのユーザー表示名を出すことは不可能だと考えています。

これはもう、kintoneの標準CSV出力の仕様で、ユーザー選択=ID出力になってしまっているからです。

 

ここからは私が思いつく限りの解決策ですが、

標準CSV出力で表示するためのユーザー表示名を格納する別フィールドを用意する方法ではいかがでしょうか。

 

JavaScriptカスタマイズになりますが、

全く同名ラベルの文字列フィールドを用意し、

showイベントではこれをsetFieldShownしておきます。

 

保存時イベントで、対象のユーザー選択フィールドをなめ、

登録されているユーザーの名称を格納していきます。

 

そして、CSV出力時には、こちらの文字列フィールドの方を出力させます。

 

 

別フィールドを用意したくない場合は、

ご提示のデベロッパーネットワークの記事のように自前でCSV出力機能を作成し、

ユーザー選択フィールドについては、

“ユーザー選択”.value[n].nameを出力するようにすればよろしかろうと思います。

 

ご返信ありがとうございます。

ご提示いただいた「標準CSV出力で表示するためのユーザー表示名を格納する別フィールドを用意する方法」か「自前でCSV出力機能を作成する方法」かのいずれかでトライしてみたいと思います。

お世話になります。「標準CSV出力で表示するためのユーザー表示名を格納する別フィールドを用意する方法」でテストしていますが、うまく動作しないので、ご支援いただけると幸いです。

作成したフォームでは、”活動担当者” ←「ユーザー選択」、”活動担当者名”←「文字列(1行)」の2つのフィールドを用意して、下記のスクリプトを作成しました。

結果、”活動担当者”のフィールドにユーザーを1つ入力して保存すると、”活動担当者名”のフィールドには、”[object object]”という値がセットされ、3つ入力して保存すると、”活動担当者名”のフィールドには、”[object object],[object object],[object object]”という値がセットされてしまいます。

本来は、ユーザーIDがセットされるようにしたいのですが、どうしたらうまく動くでしょうか。

また、最終的には、セットされるのはユーザーIDではなく、kintoneで登録されているユーザー表示名をセットしたいのです。

初心者のため、よろしくお願いいたします。

(function() {
    “use strict”;

    kintone.events.on([‘app.record.create.submit’, ‘app.record.edit.submit’], function(event) {
        var record = event.record;
        var tempname = “”;
        var member = record[‘活動担当者’][‘value’];

        for (var i = 0; i < member.length; i++) {
          
            if (tempname == “”) {
                tempname += record[‘活動担当者’][‘value’][i];
            } else {
                tempname += “,” + record[‘活動担当者’][‘value’][i];
            }

        }
        record[‘活動担当者名’][‘value’] = tempname;
        return event;
    });
})();

 

teraさん
cstapの瀧ヶ平です。

ユーザー選択フィールドのフィールド形式の問題ですね

record['活動担当者']['value'][i]

record['活動担当者']['value'][i].name;

に修正すれば問題なく動作するかと思います

teraさん

 

record.活動担当者.value[n].nameでユーザー名が取得できます。

パッと見たところ、nameの位置が異なるようです。

早速のご教示ありがとうございます。

実際にやってみて、.name を追加するだけでユーザー名がセットされるようになりました。
う~ん、随分試行錯誤をした結果だったのですが、数分で解決されるとは…難しい

また、[i]の位置が異なるとのご指摘ですが、本来の位置はどこがよいのでしょうか。

もう一つ、今後のために教えていただきたいことは、

record[‘活動担当者’][‘value’][i].name;

record.活動担当者.value[i].name;
とは書き方が随分と異なるようです。今後勉強してくのであればどちらの記載がよろしいのでしょうか。

teraさん

異なるのは[i]でなくnameの位置でしたね。すみません!

 

ドット記法とブラケット記法については、

基本はドット記法でしょう。(私見)

ただ、ブラケット記法は[i]でもわかる通り、変数でアクセスすることができます。

大きい違いはそこだけだと思います。

武井さん、瀧ヶ平さん

ドット記法とブラケット記法ですか。ハードル高そうです(+o+)

頑張って勉強していこうと思います。今後ともよろしくお願い申し上げます。

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