開発システムアーキテクチャSalesforce システムトラブルシューティング

トラブルシューティング

Salesforceの共有設定に関する一般的な問題と、その診断・解決方法を解説します。


問題1: 「ログインできない」

症状

Community Userとしてログインしようとすると、エラーメッセージが表示される。

診断手順

Step 1: ユーザーがActiveか確認

SELECT Id, Name, Username, Email, IsActive, UserType, Profile.Name
FROM User
WHERE Email = 'user@example.com'

確認項目:

  • IsActive = true か?
  • UserType = “CustomerSuccess” または “PowerPartner” か?

解決方法:

User詳細ページ → Edit → Active ✅ → Save

Step 2: Contactに紐付いているか確認

SELECT Id, Name, ContactId, Contact.Name, Contact.AccountId, Contact.Account.Name
FROM User
WHERE Email = 'user@example.com'

確認項目:

  • ContactId が null でないか?
  • Contact.AccountId が設定されているか?

解決方法:

User詳細ページ → Edit → Contact を選択 → Save

Step 3: Profileが正しいか確認

SELECT Id, Name, Profile.Name, Profile.UserLicense.Name
FROM User
WHERE Email = 'user@example.com'

確認項目:

  • Profile が “R Design | Maker Community User” などのCommunity用Profileか?
  • UserLicense が “Customer Community” または “Partner Community” か?

解決方法:

User詳細ページ → Edit → Profile を変更 → Save

Step 4: Experience Cloud Siteのメンバーか確認

Setup → Digital Experiences → All Sites → [Site Name] → Administration 
→ Members → 検索

解決方法:

Members → Add Members → ユーザーを検索して追加

問題2: 「レコードが見えない」

症状

Community Userとしてログインしているが、自ブランドのレコードが表示されない。

診断手順

Step 1: レコードの所有者を確認

SELECT Id, Name, OwnerId, Owner.Name, Owner.UserType
FROM Design_Family_Name__c
WHERE Id = 'a1x...'

確認項目:

  • レコードが本当に存在するか?
  • 所有者は誰か?

Step 2: OWDを確認

Setup → Sharing Settings → Organization-Wide Defaults
→ Design Family の External Sharing Model を確認

確認項目:

  • externalSharingModel = “Private” か?

Step 3: Owner_Account__c が正しく設定されているか確認

SELECT 
  Id, 
  Name, 
  Maker_Code__c, 
  Maker_Code__r.Name,
  Maker_Code__r.Owner_Account__c,
  Maker_Code__r.Owner_Account__r.Name
FROM Design_Family_Name__c
WHERE Id = 'a1x...'

確認項目:

  • Maker_Code__c が設定されているか?
  • Maker_Code__r.Owner_Account__c が設定されているか?

解決方法:

Vendor Brand レコードを開く → Owner Account フィールドを確認・設定

Step 4: User の Account を確認

SELECT 
  Id, 
  Name, 
  Contact.AccountId, 
  Contact.Account.Name,
  Contact.Account.Type
FROM User
WHERE Id = '005...'

確認項目:

  • Contact.AccountId が設定されているか?
  • このAccount IDが、レコードの Maker_Code__r.Owner_Account__c と一致するか?

Step 5: Account IDの一致を確認

-- User の Account
SELECT Contact.AccountId 
FROM User 
WHERE Id = '005...'
 
-- レコードの Owner Account
SELECT Maker_Code__r.Owner_Account__c 
FROM Design_Family_Name__c 
WHERE Id = 'a1x...'

これらが完全に一致していることを確認。

解決方法:

不一致の場合:

  1. Vendor Brand の Owner_Account__c を修正
  2. または、User の Contact.Account を修正

Step 6: Sharing Set Settingsを確認

Setup → Sharing Settings → Sharing Set Settings
→ ユーザーのProfileに紐付いたSharing Setがあるか確認

確認項目:

  • Profile “R Design | Maker Community User” に Sharing Set が割り当てられているか?
  • Object “Design_Family_Name__c” が含まれているか?
  • Access Determined By が User.Account = Design_Family_Name__c.Maker_Code__r.Owner_Account__c になっているか?

Step 7: Sharing Records を直接確認

SELECT 
  Id, 
  ParentId, 
  UserOrGroupId, 
  AccessLevel, 
  RowCause
FROM Design_Family_Name__Share
WHERE ParentId = 'a1x...'

確認項目:

  • ユーザーに対するShareレコードが存在するか?
  • AccessLevel は何か?(“Read”, “Edit”)
  • RowCause は何か?(どの仕組みで共有されたか)
📌

RowCause の意味

  • Manual: 手動共有
  • Rule: Sharing Rule
  • ImplicitChild: ControlledByParent
  • Team: Team Sharing
  • Owner: 所有者

問題3: 「編集できない」

症状

レコードは表示されるが、編集ボタンが表示されない、または編集しようとするとエラー。

診断手順

Step 1: アクセスレベルを確認

SELECT 
  Id, 
  ParentId, 
  UserOrGroupId, 
  AccessLevel
FROM Design_Family_Name__Share
WHERE ParentId = 'a1x...'
AND UserOrGroupId = '005...'

確認項目:

  • AccessLevel が “Edit” か?(“Read” では編集不可)

Step 2: Sharing Set Settingsのアクセスレベルを確認

Setup → Sharing Settings → Sharing Set Settings
→ Object "Design_Family_Name__c" の Access Level を確認

確認項目:

  • Access Level が “Read/Write” になっているか?

解決方法:

Sharing Set Settings → Edit → Access Level を "Read/Write" に変更 → Save

Step 3: Profileのオブジェクト権限を確認

Setup → Profiles → [Profile Name] → Object Settings 
→ Design Family → Permissions

確認項目:

  • Read ✅
  • Edit ✅

解決方法:

Object Settings → Edit → Edit権限をチェック → Save

Step 4: Field-Level Securityを確認

特定の項目のみ編集できない場合:

Setup → Object Manager → Design Family → Fields & Relationships
→ [フィールド名] → Set Field-Level Security

確認項目:

  • Profile “R Design | Maker Community User” で Edit権限があるか?

問題4: 「他のブランドのレコードが見えてしまう」

症状

Brand A のユーザーが、Brand B のレコードにアクセスできてしまう。

🚨

重大なセキュリティ問題

これは重大なセキュリティ問題です。直ちに調査・修正してください。

診断手順

Step 1: OWDを確認

Setup → Sharing Settings → Organization-Wide Defaults

確認項目:

  • External Sharing Model が “Private” になっているか?

もし “Read” や “ReadWrite” になっている場合、これが原因です。

解決方法:

⚠️ 注意: OWDの変更は全体に影響します。慎重に実施してください。

Sharing Settings → Edit → External Sharing Model を "Private" に変更
→ Save

Step 2: Sharing Rulesを確認

Setup → Sharing Settings → Sharing Rules for Design Family

確認項目:

  • “All Partner Users” や “All Customer Portal Users” に共有するルールがあるか?

もしある場合、そのルールが意図したものか確認。

解決方法:

不要なSharing Rule → Delete

Step 3: Sharing Set Settingsを確認

Setup → Sharing Settings → Sharing Set Settings

確認項目:

  • Access Determined By の条件が正しいか?
  • Account IDで適切にフィルタリングされているか?

Step 4: Manual Sharingを確認

SELECT 
  Id, 
  ParentId, 
  UserOrGroupId, 
  AccessLevel, 
  RowCause
FROM Design_Family_Name__Share
WHERE ParentId = 'a1x...'
AND RowCause = 'Manual'

意図しない手動共有がないか確認。


問題5: 「Chatterで@mentionできない」

症状

同じブランドの他のユーザーを@mentionしようとしても、候補に表示されない。

診断手順

Step 1: 両方のユーザーが同じCommunity Siteのメンバーか確認

Setup → Digital Experiences → All Sites → [Site Name] → Administration 
→ Members → 検索

確認項目:

  • User1 がメンバーか?
  • User2 がメンバーか?

Step 2: レコードへのアクセス権限を確認

-- User2 がレコードにアクセスできるか確認
SELECT 
  Id, 
  ParentId, 
  UserOrGroupId, 
  AccessLevel
FROM Design_Family_Name__Share
WHERE ParentId = 'a1x...'
AND UserOrGroupId = '005...' -- User2のID

確認項目:

  • User2 がレコードに対してRead権限以上を持っているか?

Step 3: Chatterが有効か確認

Setup → Chatter Settings

確認項目:

  • Chatter が有効になっているか?
Setup → Object Manager → Design Family → Chatter Settings

確認項目:

  • Feed Tracking が有効になっているか?

問題6: 「新規ブランド追加後、共有されない」

症状

新しいブランドをオンボーディングしたが、そのブランドのユーザーが自社のレコードにアクセスできない。

チェックリスト

1. Contactレコードが正しく作成されているか

SELECT Id, Name, AccountId, Account.Name, Email
FROM Contact
WHERE Email = 'newuser@example.com'

2. Userレコードが正しく作成されているか

SELECT 
  Id, 
  Name, 
  ContactId, 
  Contact.AccountId,
  Profile.Name,
  IsActive
FROM User
WHERE Email = 'newuser@example.com'

確認項目:

  • ContactId が設定されているか?
  • Profile が “R Design | Maker Community User” か?
  • IsActive = true か?

3. Vendor Brandが正しく設定されているか

SELECT 
  Id, 
  Name, 
  Account__c, 
  Owner_Account__c,
  Owner_Account__r.Name
FROM Maker_Code__c
WHERE Account__c = '001...' -- Business Account ID

確認項目:

  • Owner_Account__c が Community Licensee Account のIDに設定されているか?
  • User の Contact.AccountId と一致しているか?

4. Portal Roleが設定されているか

User詳細ページ → Portal Role フィールドを確認

確認項目:

  • Portal Role が設定されているか?

5. Sharing Set Settingsが適用されているか

Setup → Sharing Settings → Sharing Set Settings
→ ユーザーのProfileを確認

6. Sharing Rulesの再計算

Setup → Sharing Settings → "Recalculate" ボタン

新規データ追加後は、Sharing Rulesを再計算することで問題が解決する場合があります。


診断ツール

Apex診断スクリプト(例)

// 匿名Apexで実行
Id userId = '005...'; // 診断対象のUser ID
Id recordId = 'a1x...'; // 診断対象のレコードID
 
// 1. User情報取得
User u = [
  SELECT Id, Name, Contact.AccountId, Contact.Account.Name, Profile.Name
  FROM User
  WHERE Id = :userId
];
System.debug('User: ' + u.Name);
System.debug('User Account: ' + u.Contact.Account.Name);
System.debug('User Account ID: ' + u.Contact.AccountId);
 
// 2. レコード情報取得
Design_Family_Name__c df = [
  SELECT Id, Name, Maker_Code__r.Owner_Account__c, Maker_Code__r.Owner_Account__r.Name
  FROM Design_Family_Name__c
  WHERE Id = :recordId
];
System.debug('Design Family: ' + df.Name);
System.debug('Owner Account: ' + df.Maker_Code__r.Owner_Account__r.Name);
System.debug('Owner Account ID: ' + df.Maker_Code__r.Owner_Account__c);
 
// 3. Account IDの一致確認
if (u.Contact.AccountId == df.Maker_Code__r.Owner_Account__c) {
  System.debug('✅ Account ID一致: 共有されるはず');
} else {
  System.debug('❌ Account ID不一致: 共有されない');
}
 
// 4. Sharing Records確認
List<Design_Family_Name__Share> shares = [
  SELECT Id, UserOrGroupId, AccessLevel, RowCause
  FROM Design_Family_Name__Share
  WHERE ParentId = :recordId
  AND UserOrGroupId = :userId
];
 
if (shares.isEmpty()) {
  System.debug('❌ Sharing Recordなし');
} else {
  for (Design_Family_Name__Share s : shares) {
    System.debug('✅ Sharing Record: ' + s.AccessLevel + ' (' + s.RowCause + ')');
  }
}

SOQLクエリ集

ユーザーのAccount確認

SELECT 
  Id, 
  Name, 
  Email,
  Contact.AccountId, 
  Contact.Account.Name,
  Contact.Account.Type,
  Profile.Name
FROM User
WHERE Email LIKE '%@example.com'

Vendor BrandのOwner Account確認

SELECT 
  Id, 
  Name, 
  Account__c,
  Account__r.Name,
  Owner_Account__c,
  Owner_Account__r.Name
FROM Maker_Code__c
ORDER BY Name

レコードとSharing状況確認

SELECT 
  Id, 
  Name, 
  Maker_Code__r.Name,
  Maker_Code__r.Owner_Account__c,
  Maker_Code__r.Owner_Account__r.Name,
  (
    SELECT UserOrGroupId, AccessLevel, RowCause
    FROM Shares
  )
FROM Design_Family_Name__c
WHERE Id = 'a1x...'

パフォーマンス問題

症状

ログインや画面遷移が遅い。

診断手順

1. Sharing Set Settingsの複雑さを確認

Setup → Sharing Settings → Sharing Set Settings
→ 各Sharing Setのルール数を確認

目安:

  • 10個以下のオブジェクト: 問題なし
  • 20個以上: パフォーマンスに影響の可能性

2. Sharing Rulesの数を確認

Setup → Sharing Settings
→ 各オブジェクトのSharing Rules数を確認

目安:

  • オブジェクトあたり10個以下: 問題なし
  • 20個以上: パフォーマンスに影響の可能性

3. データ量を確認

-- Design Familyレコード数
SELECT COUNT()
FROM Design_Family_Name__c
 
-- Shareレコード数
SELECT COUNT()
FROM Design_Family_Name__Share

目安:

  • Shareレコード数が親レコード数の10倍以上: 最適化を検討

最適化方法

  1. 不要なSharing Rulesを削除
  2. Sharing Rulesを統合(複数のルールを1つに)
  3. Sharing Rulesを定期的に再計算
  4. インデックスの活用(カスタムフィールドに自動適用)

エラーメッセージ別トラブルシューティング

”insufficient access rights on cross-reference id”

意味: 関連レコード(例: Vendor Brand)へのアクセス権限がない

解決方法:

  1. 関連レコード(Vendor Brand)の共有設定を確認
  2. Sharing Set Settingsに Vendor Brand が含まれているか確認

”You do not have the level of access necessary to perform the operation you requested”

意味: レコードに対する十分なアクセス権限がない

解決方法:

  1. OWDを確認
  2. Sharing Set Settingsを確認
  3. Profileのオブジェクト権限を確認

”The requested resource does not exist”

意味: レコードが存在しない、またはアクセス権限がない

解決方法:

  1. レコードIDが正しいか確認
  2. レコードが削除されていないか確認
  3. アクセス権限を確認

サポートへのエスカレーション

情報収集

問題をサポートにエスカレーションする前に、以下の情報を収集:

  1. ユーザー情報

    • User ID
    • Email
    • Profile
    • Contact.AccountId
  2. レコード情報

    • Record ID
    • Owner ID
    • Maker_Code__r.Owner_Account__c
  3. エラーメッセージ

    • スクリーンショット
    • 正確なエラーテキスト
  4. 実行したSOQLクエリと結果

  5. 試した解決方法


予防的メンテナンス

定期的なチェック(月次)

  1. 不要なSharing Rulesの削除
  2. Sharing Rulesの再計算
  3. 非アクティブユーザーの確認
  4. Portal Roleの整合性確認

新規ブランド追加時のチェックリスト

  • Contactレコード作成
  • Userレコード作成
  • Portal Role設定
  • Vendor Brand の Owner_Account__c 設定
  • テストレコード作成・アクセス確認
  • 他ブランドからアクセス不可を確認
  • Chatterで@mention可能を確認

関連ドキュメント


更新履歴

  • 2026年1月21日: 初版作成