PlikiContentDocumentAdministracja Salesforce

Jak działa udostępnianie plików na rekordach (ContentDocumentLink)

Model danych Salesforce Files: ContentDocument, ContentVersion i ContentDocumentLink — oraz jak ShareType i Visibility decydują, kto zobaczy plik.

AgentForceAccess 3 min czytania
Diagram schematu przedstawiający centralny węzeł pliku połączony z encjami rekordu, użytkownika i grupy

Jeśli kiedykolwiek zastanawiałeś się, dlaczego plik pojawia się akurat w tym miejscu w Salesforce — albo musiałeś odpytać pliki w Apex lub raporcie — potrzebujesz znać model danych, który leży u podstaw. Nowoczesne Salesforce Files to trzy powiązane obiekty, a dwa pola na powiązaniu decydują, kto co widzi. To jest administratorsko-deweloperski towarzysz artykułu kto może zobaczyć plik w Salesforce.

Trzy obiekty

ObiektCzym jestIle
ContentDocumentSam plikJeden na plik
ContentVersionKonkretna wersja zawartości plikuJedna na przesłanie/poprawkę
ContentDocumentLinkPowiązanie łączące plik z rekordem, użytkownikiem lub grupąWiele na plik

Gdy przesyłasz plik, tworzysz ContentVersion, który Salesforce opakowuje w ContentDocument. Gdy dołączasz ten plik do rekordu lub udostępniasz go komuś, tworzysz ContentDocumentLink.

Plik to ContentDocument. To, gdzie się znajduje i kto może go zobaczyć, zawiera się w całości w jego rekordach ContentDocumentLink.

Wiersz ContentDocumentLink mówi „ten plik jest powiązany z tamtą rzeczą, na tym poziomie dostępu, dla tej grupy odbiorców”. Jego kluczowe pola:

LinkedEntityId — do czego plik jest dołączony

Identyfikator tego, z czym plik jest powiązany:

  • Rekord (Account, Opportunity, Case, obiekt niestandardowy…) → plik jest „dołączony” do tego rekordu.
  • User lub Group → plik jest udostępniony bezpośrednio tej osobie lub grupie.

Jeden plik może mieć jednocześnie wiele powiązań — być dołączony do dwóch rekordów i udostępniony jednemu użytkownikowi naraz. Każde powiązanie to niezależna ścieżka dostępu do pliku.

ShareType — poziom dostępu

WartośćPoziomCo umożliwia
VViewerOtwieranie i pobieranie
CCollaboratorPrzeglądanie, edycja, przesyłanie nowych wersji, zmiana udostępniania
IInferredPoziom dostępu dziedziczony z dostępu do powiązanego rekordu

Inferred (I) to wartość najważniejsza dla plików dołączonych do rekordów: dostęp użytkownika do pliku jest wyprowadzany z jego dostępu do rekordu, z którym plik jest powiązany. To właśnie mechanizm stojący za zasadą „każdy, kto widzi rekord, widzi jego pliki”.

Visibility — która grupa odbiorców

WartośćGrupa odbiorców
AllUsersUżytkownicy wewnętrzni i zewnętrzni (społecznościowi)
InternalUsersTylko użytkownicy wewnętrzni
SharedUsersTylko użytkownicy, którym plik został wprost udostępniony

To właśnie to pole po cichu psuje dostęp w Experience Cloud: plik dołączony do rekordu z Visibility = InternalUsers nie pokaże się użytkownikom społecznościowym, mimo że widzą oni rekord. (Więcej na ten temat w pliki a użytkownicy gościnni / Experience Cloud.)

Jak dostęp jest faktycznie rozstrzygany

Składając to w całość, użytkownik może zobaczyć plik, jeśli którekolwiek z jego rekordów ContentDocumentLink mu na to pozwala:

  1. Powiązanie z rekordem, do którego ma dostęp (ShareType I) — dostęp dziedziczony z udostępniania rekordu.
  2. Powiązanie bezpośrednio z nim lub jego grupą (ShareType V/C).
  3. Członkostwo w bibliotece lub link publiczny (osobne mechanizmy).

…a pole Visibility powiązania musi obejmować jego grupę odbiorców. Większość zgłoszeń typu „plik niewidoczny” sprowadza się do brakującego powiązania lub zbyt wąsko ustawionej wartości Visibility.

Odpytywanie

Ponieważ wszystko to są dane, możesz je sprawdzić bezpośrednio — np. znaleźć każde miejsce, w którym plik jest udostępniony:

SELECT ContentDocumentId, LinkedEntityId, ShareType, Visibility
FROM ContentDocumentLink
WHERE ContentDocumentId = '069...'

Każdy wiersz to jedna grupa odbiorców, która może dotrzeć do pliku. Aby wyliczyć konkretne osoby, musisz następnie rozwinąć pełną grupę odbiorców dla każdego rekordu z LinkedEntityId — i tu robi się szybko bardzo obszernie.

Od wierszy do odpowiedzi po ludzku

Plik dołączony do kilku rekordów dziedziczy całą grupę odbiorców każdego z nich — hierarchię ról, reguły udostępniania, zespoły i wszystko inne — pomnożoną przez każdy rekord ContentDocumentLink. Odtworzenie tego ręcznie z surowych wierszy to dokładnie ta praca, w której kryje się przypadkowa ekspozycja danych. AgentForceAccess przechodzi przez rekordy ContentDocumentLink oraz udostępnianie rekordów stojące za każdym z nich i odpowiada po ludzku na pytanie „kto może zobaczyć ten plik i dlaczego”.

Najczęściej zadawane pytania

Jaka jest różnica między ContentDocument, ContentVersion i ContentDocumentLink?

ContentDocument to sam plik (jeden na plik). ContentVersion to konkretna wersja tego pliku (jedna na każde przesłanie lub poprawkę). ContentDocumentLink łączy ContentDocument z czymś innym — rekordem, użytkownikiem lub grupą — i przenosi poziom dostępu oraz widoczność dla tego powiązania.

Na co wskazuje LinkedEntityId?

To identyfikator tego, do czego plik jest powiązany. W przypadku pliku dołączonego do rekordu jest to ID rekordu (Account, Opportunity, Case itd.); w przypadku pliku udostępnionego bezpośrednio osobie lub grupie jest to ID typu User lub Group. Jeden plik może mieć jednocześnie wiele rekordów ContentDocumentLink.

Co oznaczają wartości V, C i I w polu ShareType?

V = Viewer (otwieranie i pobieranie), C = Collaborator (przeglądanie, edycja, przesyłanie wersji, zmiana udostępniania), I = Inferred (poziom dostępu, który użytkownik otrzymuje pośrednio z dostępu do powiązanego rekordu). Inferred to mechanizm, dzięki któremu dostęp do rekordu propaguje się na plik.

Do czego służy pole Visibility?

Visibility określa, komu powiązanie udostępnia plik: AllUsers (użytkownicy wewnętrzni i zewnętrzni/społecznościowi), InternalUsers (tylko wewnętrzni) lub SharedUsers (tylko użytkownicy, którym plik został wprost udostępniony). Użytkownicy Community/Experience Cloud zwykle potrzebują wartości AllUsers, aby zobaczyć plik dołączony do rekordu.

Zobacz to na swojej organizacji

AgentForceAccess wyjaśnia prostym językiem, dlaczego dowolny użytkownik widzi dowolny rekord lub plik — w każdym mechanizmie współdzielenia Salesforce.

Poproś o wczesny dostęp