none
"プロファイルの同期"のタイマージョブの対象について RRS feed

  • 質問

  • SharePoint 2007 の"プロファイルの同期"のタイマージョブの対象について質問があります。
    現在、以下の方法でADからユーザー情報をSharePointに連携しています。

    ①ActiveDirectoryへの追加や変更

    ↓ 共有サービスのプロファイル取込機能 日次実行

    ②共有サービス プロバイダのDB : dbo.UserProfile_Full

    ↓ SharePointのタイマージョブの「プロファイル同期機能」 毎時実行

    ③コンテンツ DB : dbo.UserInfo(アカウントの情報など)、dbo.AllUserData(自己紹介、写真など)

    ①から②は問題ないのですが、②から③で追加されないユーザーがいます。

    他の情報サイト等には、②から③に更新されない場合の対応方法として、
    非アクティブなユーザーに対する対応方法の情報はありましたが、
    そもそも、③のテーブルに登録されないユーザーがいます。

    「プロファイル同期機能」のタイマージョブで、登録対象となるユーザーの条件は何でしょうか?
    また、その条件を無効にして、②に登録されたユーザーは全て③に登録することは可能でしょうか?

    よろしくお願いします。

    2013年10月15日 1:22

回答

  • ご質問にある、②から③への同期ですが、こちらは③に存在するユーザーに対してのみ行われます。

    ③へのユーザー登録は、認証されたユーザーがサイトコレクションへ初回アクセスした際に行われるのが
    既定動作だと思いますので、一度もアクセスしていないユーザーは③のテーブルには登録されていないと思われます。

    事前に③にデータを登録するには、SPWeb.EnsureUser メソッドといった API を利用する方法が考えられます。
    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.ensureuser(v=office.12).aspx

    上記の事象に当てはまりますでしょうか?

    • 回答としてマーク Jatze_Dar 2013年10月18日 0:36
    2013年10月17日 6:51

すべての返信

  • ご質問にある、②から③への同期ですが、こちらは③に存在するユーザーに対してのみ行われます。

    ③へのユーザー登録は、認証されたユーザーがサイトコレクションへ初回アクセスした際に行われるのが
    既定動作だと思いますので、一度もアクセスしていないユーザーは③のテーブルには登録されていないと思われます。

    事前に③にデータを登録するには、SPWeb.EnsureUser メソッドといった API を利用する方法が考えられます。
    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.ensureuser(v=office.12).aspx

    上記の事象に当てはまりますでしょうか?

    • 回答としてマーク Jatze_Dar 2013年10月18日 0:36
    2013年10月17日 6:51
  • OTA Hirofumiさん

    返信ありがとうございます。
    求めていた回答そのものでした。

    ②から③には③に存在する場合のみ同期される件、情報ありがとうございます。
    また、③には初回アクセス時に登録される件、こちらで動作確認したところ、
    確かにそのような動きになりました。

    今回、③からユーザー情報を取得する必要があるのですが、
    ②に存在するが③に存在しないユーザー情報をどのように取得するかの
    解決方法が見つからず止まっていました。

    教えて頂きました、SPWeb.EnsureUserを事前に使用すれば解決できそうです。

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

    2013年10月18日 0:36
  • ご確認ありがとうございました。
    要件、事情が分かりませんので、どちらが良いとは明言できないのですが…。

    今回悩まれているように、②から③への情報同期の動作は少し癖がありますので、
    「ユーザー情報を取得する」という目的であれば、直接ユーザープロファイルから
    情報を取り出した方が良いかとも思います。

    サーバーサイドのAPIであれば、UserProfileManagerクラスを利用できます。
    http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager(v=office.12).aspx

    リモートクライアントからは、WebサービスのUserProfileServiceクラスを利用できます。
    http://msdn.microsoft.com/en-us/library/websvcuserprofileservice.userprofileservice(v=office.12).aspx

    参考まで。

    2013年10月18日 2:56
  • OTA Hirofumiさん

    情報の提供ありがとうございます。

    事情としましては、取得したユーザー情報を最終的にSPUserクラスのオブジェクトにしてユーザー列に設定する必要があります。

    こちらで情報を探したところ、SPUserオブジェクトは、SPWebクラスのAllUsersプロパティから取得するなどの方法がありました。

    ですが、その場合③のサイトコレクションのユーザー情報に登録されていないと取得できませんでした。

    なので、何とかして③に存在しないユーザーを③に登録する方法は探していました。

    可能であれば、②の情報からSPUserオブジェクトを取得できればよいのですが、方法が見つかりませんでした。

    教えて頂きました、UserProfileManagerクラスからUserProfileクラスのオブジェクトは返してくれますが、

    SPUserクラスは返してくれるものがありませんでしたので、やはり前回に教えて頂きましたSPWeb.EnsureUserを使用し

    1、SPWeb.EnsureUserで③にユーザーを登録

    2、SPWebクラスのAllUsersプロパティ経由でSPUserオブジェクトを取得

    3、2で取得したSPUserオブジェクトを対象のユーザー列に設定

    のような方法を取るしかないかと思っています。

    もし、②の情報のみでSPUserオブジェクトの取得方法をご存知でしたら、情報を頂けますと幸いです。

    2013年10月23日 1:25