Salesfuchs Logo Salesfuchs
Erstgespräch buchen

Salesforce Dateiverwaltung erklärt: Objekte und Apex

ContentDocument, ContentVersion, Attachment. Welche Salesforce-Objekte stehen dahinter und wie steuern Sie die Dateiverwaltung sauber mit Apex und ohne Datenverlust.

· · 5 min Lesezeit
Salesforce Dateiverwaltung erklärt: Objekte und Apex
Strukturierte Dateiverwaltung ist die Grundlage für skalierbare Salesforce-Anwendungen.

Wer in Salesforce mit Dateien arbeitet, stolpert früher oder später über drei Objekte: ContentDocument, ContentVersion und ContentDocumentLink. Die meisten Admins kennen nur das Ergebnis - die hochgeladene Datei - aber nicht die Struktur dahinter. Das wird spätestens dann zum Problem, wenn Sie per Apex auf Dateien zugreifen oder sie automatisiert verarbeiten wollen.

Salesforce setzt hierbei auf vier zentrale Objekte: ContentWorkspace, ContentDocument, ContentVersion und ContentDocumentLink. Diese bilden die Grundlage für die Dateiverwaltung und bieten zahlreiche Möglichkeiten, wenn Sie ihre Funktionen und Limits verstehen. Besonders in der Sales Cloud fehlen oft Features wie eine tiefere Dokumentenkategorisierung, die in anderen Clouds wie der Health Cloud verfügbar sind. Doch mit den richtigen Ansätzen und etwas technischem Know-how können Sie auch hier effiziente Lösungen schaffen. Lassen Sie uns die Objekte Schritt für Schritt durchgehen, um ein solides Fundament zu legen.


ContentWorkspace: Bibliotheken gezielt nutzen

Das ContentWorkspace-Objekt repräsentiert öffentliche Bibliotheken in Salesforce und wird in der Benutzeroberfläche mit dem Schlüsselprefix 058 angezeigt. Es ist seit Version 17 verfügbar und dient als zentraler Speicherort für gemeinsam genutzte Dateien. Wichtig zu wissen: Persönliche Bibliotheken werden hier nicht abgebildet, und Sie können keine neuen Datensätze über die API erstellen. Dennoch können Sie mit einer SOQL-Abfrage wie SELECT Id, Name, Description FROM ContentWorkspace auf bestehende Bibliotheken zugreifen und deren Inhalte analysieren.

Ein häufiges Problem ist die unzureichende Kategorisierung von Dokumenten in Bibliotheken. Eine Best Practice ist es, klare Namenskonventionen für Bibliotheken zu definieren und diese mit benutzerdefinierten Feldern zu erweitern, um eine bessere Übersicht zu schaffen. So könnten Sie etwa ein Feld für Abteilungen oder Projekte hinzufügen, um die Zuordnung zu erleichtern.

ContentDocument: Das Herzstück der Dateien

Das ContentDocument-Objekt steht für hochgeladene Dokumente, sei es in Salesforce CRM Content oder Salesforce Files, und trägt das Schlüsselprefix 069. Es wird automatisch erstellt, sobald eine ContentVersion hinzugefügt wird, die als Kind eines ContentDocument fungiert. Ein Limit, das Sie beachten sollten: Salesforce erlaubt maximal 30 Millionen Dokumente, doch Speichergrenzen Ihrer Instanz schränken dies oft früher ein.

💡
Praxistipp: Überwachen Sie regelmäßig Ihre Speicherauslastung unter Setup > Speicher > Speicherplatz und archivieren Sie alte Dokumente, die nicht mehr benötigt werden, in einem externen System. So vermeiden Sie, dass Ihre Instanz an ihre Grenzen stößt, und halten die Performance stabil.

ContentVersion: Versionierung und Dateidetails

ContentVersion speichert spezifische Versionen eines Dokuments und trägt das Schlüsselprefix 068. Es ähnelt dem Attachment-Objekt, bietet jedoch mehr Flexibilität, etwa bei der Versionsverwaltung. Die maximale Dateigröße beträgt 50 MB bei Uploads über die SOAP-API, wobei die Base64-Konvertierung die Größe um etwa 37 % erhöht. Nur Nutzer mit einer vollen Salesforce-Lizenz können dieses Objekt vollständig bearbeiten – Plattformnutzer sind auf Standardfunktionen beschränkt.

Wichtige Felder wie FirstPublishLocationId helfen Ihnen, den initialen Speicherort eines Dokuments zu definieren, während ContentDocumentId und VersionId die Beziehung zwischen Dokument und Version abbilden. Ein typischer Fehler ist das Übersehen von Versionskonflikten bei parallelen Uploads. Mein Tipp: Nutzen Sie eindeutige Namenskonventionen für Versionen und automatisieren Sie die Versionsverwaltung mit einem kleinen Apex-Skript, um Überschreibungen zu vermeiden.

Das ContentDocumentLink-Objekt ermöglicht es, Dateien mit Benutzern, Gruppen oder Datensätzen zu teilen. Das Feld LinkedEntityId speichert die ID des verknüpften Objekts, sodass Sie eine Datei mehrfach an verschiedene Datensätze anhängen können. Dies ist besonders nützlich, wenn Sie etwa ein Dokument sowohl einem Account als auch einer Opportunity zuordnen möchten.

💡
Ein häufiges Problem: Die Sichtbarkeitseinstellungen werden oft falsch gesetzt, sodass Nutzer keinen Zugriff erhalten. Prüfen Sie immer die ShareType- und Visibility-Einstellungen – setzen Sie diese etwa auf InternalUsers, um den Zugriff auf interne Nutzer zu beschränken.

SOQL-Abfragen für mehr Übersicht

SOQL (Salesforce Object Query Language) ist ein mächtiges Werkzeug, um die Dateiverwaltung zu optimieren. Hier sind einige nützliche Abfragen, die Sie direkt einsetzen können:

  • ContentDocumentId aus ContentVersion abrufen:
    SELECT ContentDocumentId FROM ContentVersion WHERE Id = '068…'
  • Anzahl der Downloads eines Dokuments ermitteln:
    SELECT Count(Id) FROM ContentVersionHistory WHERE field='contentVersionDownloaded' AND ContentVersion.ContentDocumentId = '069…' GROUP BY ContentVersion.ContentDocumentId
  • Verknüpfte Datensätze finden:
    SELECT LinkedEntityId FROM ContentDocumentLink WHERE ContentDocumentId = '069…'

Diese Abfragen helfen Ihnen, schnell relevante Informationen zu extrahieren und beispielsweise festzustellen, welche Dokumente besonders häufig genutzt werden. Für detaillierte Einblicke in SOQL empfehle ich die offizielle Dokumentation auf developer.salesforce.com.

Dateien mit Apex effizient einbinden

Apex bietet Ihnen die Möglichkeit, die Dateiverwaltung zu automatisieren und an Ihre Bedürfnisse anzupassen. Hier ein Beispiel, wie Sie ein Dokument hochladen und mit einem Account verknüpfen:

Zunächst erstellen Sie einen Elterndatensatz:

Account acc = new Account(Name='Test Account');  
insert acc;  

Dann fügen Sie eine ContentVersion hinzu:

ContentVersion cv = new ContentVersion();  
cv.Title = 'Testdokument';  
cv.PathOnClient = 'TestDokument.pdf';  
cv.VersionData = Blob.valueOf('Testinhalt');  
cv.IsMajorVersion = true;  
insert cv;  

Zum Schluss verknüpfen Sie die Datei über ContentDocumentLink:

Id conDocId = [SELECT ContentDocumentId FROM ContentVersion WHERE Id = :cv.Id].ContentDocumentId;  
ContentDocumentLink cdl = new ContentDocumentLink();  
cdl.LinkedEntityId = acc.Id;  
cdl.ContentDocumentId = conDocId;  
cdl.shareType = 'V';  
insert cdl;  

Dieser Ansatz spart Zeit und reduziert manuelle Fehler. Weitere Beispiele und Grundlagen zur Datenverwaltung mit Apex-Programmierung finden sie in diesem Modul auf der Salesforce Lernplattform Trailhead.

📬
Dieser Artikel gefällt Ihnen? Jeden Dienstag teile ich Praxiswissen zu Salesforce, CRM und Automatisierung. Kostenlos per Newsletter.

Anlagen in Dateien umwandeln

Ein weiteres Szenario ist die Konvertierung von Anlagen (Attachments) in moderne Salesforce-Dateien. Hier ein kurzes Beispiel:

Zuerst rufen Sie die Anlage ab:

Attachment attach = [SELECT Id, Name, Body, ContentType, ParentId FROM Attachment LIMIT 1];  

Dann erstellen Sie eine ContentVersion:

ContentVersion cVersion = new ContentVersion();  
cVersion.ContentLocation = 'S';  
cVersion.PathOnClient = attach.Name;  
cVersion.Origin = 'H';  
cVersion.OwnerId = attach.OwnerId;  
cVersion.Title = attach.Name;  
cVersion.VersionData = attach.Body;  
insert cVersion;  

Abschließend verknüpfen Sie die Datei:

Id conDocument = [SELECT ContentDocumentId FROM ContentVersion WHERE Id = :cVersion.Id].ContentDocumentId;  
ContentDocumentLink cDocLink = new ContentDocumentLink();  
cDocLink.ContentDocumentId = conDocument;  
cDocLink.LinkedEntityId = attach.ParentId;  
cDocLink.ShareType = 'I';  
cDocLink.Visibility = 'InternalUsers';  
insert cDocLink;  

Dieser Prozess ist besonders nützlich, wenn Sie ältere Daten migrieren möchten.

Häufige Fragen

Was ist der Unterschied zwischen Salesforce Files, Attachments und Documents?

Attachments sind das alte Modell (bis API v37) und direkt an Records gebunden. Files (ContentDocument/ContentVersion) sind das aktuelle Modell mit Versionierung und Sharing. Documents sind statische Dateien in Libraries ohne Record-Bezug.

Wie greife ich per Apex auf Dateien in Salesforce zu?

Uber ContentVersion und ContentDocumentLink. ContentVersion enthält die Datei selbst (VersionData als Blob), ContentDocumentLink verknüpft sie mit einem Record. Fur neue Implementierungen immer das Files-Modell verwenden.

Wie viel Speicherplatz verbrauchen Salesforce Files und was kostet zusätzlicher Speicher?

Der Basisspeicher liegt je nach Edition bei 10-11 GB pro Org plus 2 GB pro Lizenz. Zusätzlicher File-Speicher kostet ca. 5 USD pro GB und Monat. Bei großen Dateimengen lohnt sich die Integration eines externen Storage-Systems wie Amazon S3.

Wie lösche ich Dateien in großen Mengen aus Salesforce?

Uber Apex-Batch-Jobs mit Database.Batchable, der ContentDocument-Objekte in Batches löscht. Wichtig: ContentDocument löschen entfernt auch alle verknüpften ContentVersions und ContentDocumentLinks automatisch.

Fazit: Ihre Salesforce Dateiverwaltung optimieren

Cheat Sheet: Salesforce Dateiverwaltung

Alle Dateiobjekte, Limits und Apex-Methoden auf einer Seite. Hängen Sie das Cheat Sheet neben Ihren Monitor, damit Sie beim nächsten Dateiprojekt nicht jedes Mal in der Doku suchen müssen.


Die Salesforce Dateiverwaltung bietet Ihnen als Admin oder Berater zahlreiche Möglichkeiten, Dateien effizient zu organisieren und zu verwalten – wenn Sie die Objekte wie ContentWorkspace, ContentDocument, ContentVersion und ContentDocumentLink richtig einsetzen. Mit SOQL-Abfragen und Apex können Sie manuelle Prozesse automatisieren und typische Grenzen wie fehlende Kategorisierungsoptionen umgehen. Wichtig ist, die Limits Ihrer Instanz im Blick zu behalten und Best Practices wie klare Namenskonventionen oder regelmäßige Speicherprüfungen anzuwenden.

Falls Sie Unterstützung bei der Optimierung Ihrer Dateiverwaltung oder der Implementierung von Apex-Lösungen benötigen, stehe ich Ihnen gerne zur Seite. Mit meiner Erfahrung als Salesforce-Berater helfe ich Ihnen, maßgeschneiderte Lösungen zu entwickeln, die Ihre Prozesse nachhaltig verbessern. Kontaktieren Sie mich einfach über den Button unten – ich freue mich darauf, Sie zu unterstützen!

Lassen Sie uns Ihren nächsten Salesforce-Schritt planen

Kostenloses Erstgespräch buchen