locked
選択肢列の値を動的に更新したい RRS feed

  • 質問

  • MOSS2007のドキュメントライブラリに列を追加しました。
    列の情報の種類は「選択肢(メニューから選択)」に設定し、その選択肢を、
    一般ユーザから追加出来る様に設定しています。

     

    例えば「製品名」という列とし、ユーザが「Windows7」という選択肢を追加したとします。
    ユーザが追加した選択肢を次回ドキュメントアップロード時に新たな選択肢として
    表示されるように、選択肢の項目を動的に更新する方法などございますでしょうか?

     

    現状では「ビュー」で選択肢毎に表示するように設定しており、例えば
    ユーザAが「Windows7」、ユーザBが「Windows 7」と入力した場合、ビューでは
    別カテゴリという事で表示されてしまいます。

    2008年11月12日 4:42

回答

  • SPItemEventReceiverのItemAdded、ItemUpdatedにて、

    以下のようなコードを実行して、ユーザーが追加した新しい選択肢を動的に

    SPFieldChoice.Choicesへ

    追加することが可能になると思いますが。。。

    Code Snippet

     

      

       private void HowToGetOrSetSPFieldChoiceInfo(SPListItem li)
       {  
                //SPListItemでSPFieldChoiceの現在の設定値の参照
                string strProductName = ((SPFieldChoice)li.Fields["製品名"]).GetFieldValueAsText(li["製品名"]);
               
                //SPFieldChoiceの参照
                SPFieldChoice spFieldChoiceProductName = (SPFieldChoice)li.Fields["製品名"];

                //SPFieldChoiceの選択肢の追加
                if (!spFieldChoiceProductName.Choices.Contains(strProductName))
                {
                    spFieldChoiceProductName.Choices.Add(strProductName);

     

               //SPFieldChoiceの選択肢の追加のデータベースへのアップデート
               spFieldChoiceProductName.Update();           

           }

       }

     

     

    2008年11月20日 10:20
  • Jeon

     

    ご回答ありがとうございます、また返信遅くなり申し訳ありません。

     

    頂いた情報を基にチャレンジしてみたいと思います。

     

    #手元に試せる環境がなく、中途半端なお返事で申し訳ありません。

    2008年12月4日 4:19

すべての返信

  • SPItemEventReceiverのItemAdded、ItemUpdatedにて、

    以下のようなコードを実行して、ユーザーが追加した新しい選択肢を動的に

    SPFieldChoice.Choicesへ

    追加することが可能になると思いますが。。。

    Code Snippet

     

      

       private void HowToGetOrSetSPFieldChoiceInfo(SPListItem li)
       {  
                //SPListItemでSPFieldChoiceの現在の設定値の参照
                string strProductName = ((SPFieldChoice)li.Fields["製品名"]).GetFieldValueAsText(li["製品名"]);
               
                //SPFieldChoiceの参照
                SPFieldChoice spFieldChoiceProductName = (SPFieldChoice)li.Fields["製品名"];

                //SPFieldChoiceの選択肢の追加
                if (!spFieldChoiceProductName.Choices.Contains(strProductName))
                {
                    spFieldChoiceProductName.Choices.Add(strProductName);

     

               //SPFieldChoiceの選択肢の追加のデータベースへのアップデート
               spFieldChoiceProductName.Update();           

           }

       }

     

     

    2008年11月20日 10:20
  • Jeon

     

    ご回答ありがとうございます、また返信遅くなり申し訳ありません。

     

    頂いた情報を基にチャレンジしてみたいと思います。

     

    #手元に試せる環境がなく、中途半端なお返事で申し訳ありません。

    2008年12月4日 4:19