FilerContentDocumentSalesforce-admin

Så fungerar fildelning på poster (ContentDocumentLink)

Datamodellen bakom Salesforce Files: ContentDocument, ContentVersion och ContentDocumentLink — och hur ShareType och Visibility avgör vem som ser en fil.

AgentForceAccess 3 min läsning
Ett schemadiagram över en central filnod kopplad till post-, användar- och gruppentiteter

Om du någonsin undrat varför en fil dyker upp där den gör i Salesforce — eller behövt fråga ut filer i Apex eller en rapport — behöver du datamodellen under ytan. Moderna Salesforce Files är tre relaterade objekt, och två fält på länken avgör vem som ser vad. Det här är admin/utvecklar-följeslagaren till vem som kan se en fil i Salesforce.

De tre objekten

ObjektVad det ärHur många
ContentDocumentSjälva filenEn per fil
ContentVersionEn specifik version av filens innehållEn per uppladdning/revision
ContentDocumentLinkEn länk som binder filen till en post, användare eller gruppMånga per fil

När du laddar upp en fil skapar du en ContentVersion, som Salesforce kapslar in i en ContentDocument. När du kopplar den filen till en post eller delar den med någon skapar du en ContentDocumentLink.

Filen är ContentDocument. Var den finns och vem som kan se den ligger helt och hållet i dess ContentDocumentLinks.

En rad i ContentDocumentLink säger “den här filen är länkad till den där saken, på den här åtkomstnivån, för den här målgruppen.” Dess viktigaste fält:

LinkedEntityId — vad filen är kopplad till

ID:t för det som filen är länkad till:

  • En post (Account, Opportunity, Case, anpassat objekt…) → filen är “kopplad till” den posten.
  • En User eller Group → filen delas direkt med den personen eller gruppen.

En enda fil kan ha många länkar samtidigt — kopplad till två poster och delad med en användare på samma gång. Varje länk är en oberoende väg till att se filen.

ShareType — åtkomstnivån

VärdeNivåKan göra
VViewerÖppna och ladda ner
CCollaboratorVisa, redigera, ladda upp nya versioner, ändra delning
IInferredÅtkomstnivå ärvd från åtkomst till den länkade posten

Inferred (I) är den viktiga för filer kopplade till poster: en användares åtkomst till filen härleds från deras åtkomst till posten den är länkad till. Det är mekanismen bakom “alla som kan se posten kan se dess filer.”

Visibility — vilken målgrupp

VärdeMålgrupp
AllUsersInterna och externa (community) användare
InternalUsersEndast interna användare
SharedUsersEndast användare som filen uttryckligen delats med

Det här är fältet som tyst bryter åtkomst i Experience Cloud: en fil kopplad till en post med Visibility = InternalUsers visas inte för community-användare även om de kan se posten. (Mer om det i filer och gäst- / Experience Cloud-användare.)

Hur åtkomst faktiskt avgörs

Sammantaget kan en användare se en fil om någon av dess ContentDocumentLinks ger åtkomst:

  1. En länk till en post de kan komma åt (ShareType I) — åtkomst ärvd från postens delning.
  2. En länk direkt till dem eller deras grupp (ShareType V/C).
  3. Ett biblioteksmedlemskap eller en publik länk (separata mekanismer).

…och länkens Visibility måste inkludera deras målgrupp. De flesta ärenden om “filen syns inte” beror på en saknad länk eller en för snäv Visibility.

Fråga ut det

Eftersom allt är data kan du inspektera det direkt — t.ex. hitta varje plats där en fil delas:

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

Varje rad är en målgrupp som kan nå filen. För att räkna upp personerna expanderar du sedan hela delningsmålgruppen för varje LinkedEntityId-post — och det är där det snabbt blir omfattande.

Från rader till ett svar i klartext

En fil kopplad till flera poster ärver varje posts hela målgrupp — rollhierarki, delningsregler, team och allt — multiplicerat över varje ContentDocumentLink. Att rekonstruera det för hand utifrån råa rader är precis det arbete som döljer oavsiktlig exponering. AgentForceAccess går igenom ContentDocumentLinks och postdelningen bakom var och en, och svarar på “vem kan se den här filen, och varför” i klartext.

Vanliga frågor

Vad är skillnaden mellan ContentDocument, ContentVersion och ContentDocumentLink?

ContentDocument är själva filen (en per fil). ContentVersion är en specifik version av den filen (en per uppladdning/revision). ContentDocumentLink kopplar en ContentDocument till något annat — en post, användare eller grupp — och bär åtkomstnivån och synligheten för just den länken.

Vad pekar LinkedEntityId på?

Det är ID:t för det som filen är länkad till. För en fil kopplad till en post är det postens ID (Account, Opportunity, Case osv.); för en fil som delas direkt med en person eller grupp är det ett User- eller Group-ID. En enda fil kan ha många ContentDocumentLinks samtidigt.

Vad betyder ShareType-värdena V, C och I?

V = Viewer (öppna och ladda ner), C = Collaborator (visa, redigera, ladda upp versioner, ändra delning), I = Inferred (åtkomstnivån en användare får indirekt via åtkomst till den länkade posten). Inferred är hur poståtkomst sprids vidare till en fil.

Vad gör fältet Visibility?

Visibility anger vem länken exponeras för: AllUsers (interna och externa/community-användare), InternalUsers (endast interna) eller SharedUsers (endast användare som filen uttryckligen delats med). Community-/Experience Cloud-användare behöver vanligtvis AllUsers för att se en fil kopplad till en post.

Se det i din egen organisation

AgentForceAccess förklarar, på vanlig svenska, varför vilken användare som helst kan se vilken post eller fil som helst — över varje delningsmekanism i Salesforce.

Begär förhandsåtkomst