2017-09-01 9 views
5

C#コードでDynamics CRM 2016ユーザーを無効にするには、現在SetStateRequestが使用されています。 例: Microsoft CRM:廃止予定のSetStateRequestを使用しないSystemuserを有効または無効にする方法

var requestToDisableUser = new SetStateRequest() 
{ 
    EntityMoniker = new EntityReference("systemuser", userGuid), 
    State = new OptionSetValue(1), 
    Status = new OptionSetValue(-1) 
}; 
organizationService.Execute(requestToDisableUser); 

はしかし、マイクロソフトによるとSetStateRequestが廃止されており、Update

を使用することによって置き換えしかし、私は、ユーザー
例を無効にするには、Updateを使用しようとすると、する必要があります。

var userToDisable = new Entity("systemuser", userGuid) 
{ 
    ["statecode"] = new OptionSetValue(1), 
    ["statuscode"] = new OptionSetValue(-1) 
}; 
service.Update(userToDisable); 

次に、エラーが発生します。

未処理の例外: System.ServiceModel.FaultException`1 [Microsoft.Xrm.Sdk.OrganizationServiceFault]: 'systemuser' 実体が名前= 'statecode' で属性が含まれていません。

これはtrueです。なぜなら、systemuserエンティティには状態コードがないからです。
そして、systemuserエンティティにはIsDisabled属性がありますが、その属性は読み取り専用です。

したがって、SetStateRequestを使用せずにユーザーをどのように無効/有効にすることができますか?

+0

更新:MSからの連絡先を介して、それはまだバックログにある既知の問題であることが判明しました。 SetStateRequestは、システムユーザーまたはビジネスユニットを無効/有効にする現在の方法として推奨されていました。 – LukStorms

答えて

3

誰かがそれを証明しない限り、私は可能ではないと思います。私の意見を支持する:最新のSDK(8.2.1.1; 4/6/2017)はSetStateRequestの例をSDK\SampleCode\CS\BusinessDataModel\UsersAndRoles\DisableOREnableUser.csに与えています。したがって、ドキュメントの別の部分で非推奨としてマークされているにもかかわらず、推奨する方法である必要があります。

MSサポートでインシデントを開始することも、Connectで提案することもできます。私の経験によれば、回避策があるかどうかはあまり気にしません。

+1

はい、私は[このページ](https://msdn.microsoft.com/en-us/library/jj602914(v= crm.8).aspx)で気づきました。これは、将来のバージョンでSetStateRequestを実際に削除した場合にのみ問題になります。とにかく古い方法がまだ機能しているので。 – LukStorms

1

CRMオンライン2015更新1の後、特別なメッセージに対して特別なメッセージは推奨されなくなりました。 Read more

メタデータごとにIsDisabledの属性systemuserが更新に有効でないとして表示されることがあります。また、チーム、BUなどの他の企業所有のエンティティでは、状態コード&のステータスコードは使用されません。

廃止予定のメソッドを使用しないことを計画している場合は、IsDisabled属性を使用する必要があります。

おそらくドキュメントに欠けている部分です。しかし、ヒントを見つけることができます。MSDN

これらの特殊なメッセージは、2011年のエンドポイントでは引き続き動作します。ただし、可能であればUpdateRequestメソッドまたはUpdateメソッドを使用してこれらの属性を設定することをお勧めします。更新メッセージは、組織サービスを簡素化し、Dynamics 365で使用される標準的なデータ統合ツールを簡単にコーディングできます。さらに、複数の特殊メッセージの代わりに単一の更新メッセージに対して実行するプラグインのコーディングと登録が簡単です。このリリースでは、上記の属性のAttributeMetadata.IsValidForUpdateプロパティがtrueに変更され、この機能が有効になりました。

2011年のエンドポイントに関するこれらの特殊メッセージをコード内で引き続き使用できます。ただし、最終的に組織サービスを置き換えるWeb APIは、これらのタイプの操作の更新メッセージのみをサポートします。 Web APIに合わせてコードを変更するときに頭を下げたい場合は、これを行うことができます。詳細については、Microsoft Dynamics 365 Web APIの使用を参照してください。