Dynamics CRM 4.0 では、 ユーザが最初に作成された組織がそのユーザの既定の組織になります。http://test/ など、組織名をつけずにブラウザからアクセスしたときにリダイレクトされる組織が既定の組織です。今回は既定の組織を変更するSQLを紹介します。

元ネタは、Default organization to load in MS Dynamics CRM 4 Enterprise です。リンク先の内容を一つ一つ実行すると既定の組織を変更できますが、一度のクエリの実行で変更できるようにSQLをまとめました。

展開マネージャで指定する既定の組織について
展開マネージャで設定する既定の組織は、ユーザの既定の組織とは別のものです。展開マネージャの既定の組織はDynamics CRM 3.0用のアドオンプログラムとの互換性のための設定みたいです。Dynamics CRM 3.0はマルチテナント機能がないため、3.0 用のアドオンプログラムが Dynamics CRM 4.0にアクセスしたときに、設定した既定の組織が使われるらしいです(ただし未検証)。

ユーザの既定の組織を変更するSQLを記載します。 元ネタのSQLを一つにまとめたような感じです。SQU内で、@orgname は既定とする組織の名前, @domainname は変更するユーザのドメイン名を指定します。中間あたりの dyn1_MSCRM.dbo.FilteredSystemUser の dyn1_MSCRMは環境にユーザが登録されている任意の組織DBの名前に置き換えてください。

USE MSCRM_CONFIG
GO

-- 既定とする組織のユニーク名
declare @orgname nvarchar(100)
set @orgname = 'dyn1'

-- 既定の組織を変更するユーザのドメイン名
declare @domainname nvarchar(100)
set @domainname = 'TEST\crmuser01'

-- 既定とする組織のIDを取得
declare @newdefaultorganizationid uniqueidentifier
select @newdefaultorganizationid = Id
  from Organization
 where UniqueName = @orgname

-- 既定の組織を変更するユーザの任意の組織上での
-- systemuseridを取得。ここでは、既定に変更する組織
-- 上のsystemuseridを取得している.
-- ※dyn1_MSCRMの部分はユーザが登録されている任意の組織DB名に変更すること
declare @systemuserid uniqueidentifier
 select @systemuserid = systemuserid
  from dyn1_MSCRM.dbo.FilteredSystemUser
 where domainname = @domainname

-- MSCRM_CONFIGのsystemuserorganizationsから
-- 変更するユーザのMSCRM_CONFIG.dbo.systemsuer
-- テーブル上のIDを取得
declare @userid uniqueidentifier
select @userid = UserId from systemuserorganizations 
 where crmuserid = @systemuserid

-- 変更前の既定の組織のGUIDを取得
declare @olddefaultorganizationid uniqueidentifier
select @olddefaultorganizationid = DefaultOrganizationId
  from SystemUser
 where Id = @userid 
 
 -- ユーザの既定の組織を変更
update systemuser 
   set defaultorganizationid = @newdefaultorganizationid
 where id = @userid

print '変更前の既定の組織:' + CAST(@olddefaultorganizationid as nvarchar(50))
print '変更後の既定の組織:' + CAST(@newdefaultorganizationid as nvarchar(50))

私の環境では上記スクリプトで既定の組織の変更を確認できました。

直接テーブルを更新する操作は非サポート行為です。変更する必要がある場合、必ずステージング環境で検証してください。