Dynamics CRMの - C#プラグインのシステム管理者権限でのエンティティを更新するために

シーンの説明:

      1. CRMシステムを使用する場合は、レコード更新の他のエンティティのエンティティであること、または(あなたがupdate()メソッド(SDKまたはにupdateObjectを使用する必要がポストに自分自身を更新する必要がある場合が多いです)メソッド)が、updateメソッドの実装では、あなたが更新されるユーザエンティティに必要に割り当てる権限を持っています。

      CRMシステムへ2.ユーザー権限のために設定することができますので、ユーザは、エンティティの権限になりましエンティティ(実行更新)の更新にユーザーを変更しない基本的な設定権限が必要に対応して割り当てを持っていないかもしれません。

      上記の二つの点を踏まえ、我々は、更新操作のプラグインは、次の2つのメソッドを実行するには、システム管理者を使用することができます。

 

解決策1:

      LINQの(またはそれ以外)を使用して、管理者の役割を持つユーザーIDを照会して、アップデートを実行するためにそれを使用します。

使用(OrganizationServiceContext orgService = 新しいOrganizationServiceContext(サービス))
{ 
    VARの systemUserId =(からのUserRole  orgService.CreateQuery <Entities.SystemUserRoles> ()
                        の役割に参加 orgService.CreateQueryを<Entities.Role> ()
                        userrole.RoleIdにはrole.Idに等しいです
                        どこ role.Name == " システム管理者" 
                        を選択(userrole.SystemUserId).FirstOrDefaultを)。

    もし(systemUserId!= nullの
    { 
        IOrganizationServiceエコプリンティング = factory.CreateOrganizationService(systemUserId)。
        SystemService.Update(new_entity); 
    } // !END IF systemUserId = nullを 
}

      現在のユーザーが管理者の役割のユーザーIDを取得することができませんでしパーミッション対応表の読み取り権限を持っていない場合、につながること:管理者の役割のユーザーIDを取得するユーザロールクエリによって、このような共同システムの存在は、大きな欠点に近づきますコードは、更新操作を実行しません。それは、ここに記載されているこの方法はお勧めしません。

 

対処方法2:

      ときCreateOrganizationService()を直接nullパラメータを渡す、管理者ロール方式のユーザーIDを照会することによって、それが直接サービスを作成するには、管理者としてランク付けするわけではありません。

IOrganizationServiceエコプリンティング= factory.CreateOrganizationService(NULL )。
SystemService.Update(new_entity)。

        権限が故障を更新するために必要なので、この方法を使用して、更新操作を実行することをお勧めします、それは問題を引き起こすことはありません。

おすすめ

転載: www.cnblogs.com/Sunny20181123/p/10939261.html