Как получить ссылку для скачивания для вложения?

Я загрузил изображение в формате jpeg для учетной записи. Идентификатор файла изображения jpeg — 069i0000001dkl8, и он не может получить доступ через, https://c.na15.content.force.com/servlet/servlet.FileDownload?file=069i0000001dkl8

Но он может получить доступ через https://c.na15.content.force.com/sfc/servlet.shepherd/version/download/068i0000001hwPn?asPdf=false&operationContext=CHATTER

Есть ли способ получить загружаемый URL-адрес для вложения в Salesforce (используя вызовы API)? Или есть ли способ создать загружаемый URL-адрес, обработав некоторые поля в объекте API (SObject)?

Спасибо.


person lsc    schedule 30.10.2014    source источник


Ответы (2)


С технической точки зрения, вы имеете дело с ContentDocument (069 ключевой префикс) и ContentVersion (068 ключевой префикс), а не Вложение (префикс ключа 00P).

Ознакомьтесь с моделью данных для объектов контента. :

Модель данных контента

Вы можете использовать SOQL для создания запроса, который даст вам правильную версию ContentVersion для ContentDocument. Полученный идентификатор затем можно использовать для создания URL-адреса загрузки.

Кроме того, вы можете получить двоичное содержимое вложения из ContentVersion напрямую через API.

Кстати, сайт Salesforce Stackexchange — отличное место, где можно задать конкретные вопросы по Salesforce.

person Daniel Ballinger    schedule 30.10.2014
comment
Спасибо за очень четкий ответ. Также есть ли способ получить идентификатор вложения (префикс ключа 00P), когда у нас есть идентификаторы ContentDocument (префикс ключа 069) или ContentVersion (префикс ключа 068)? - person lsc; 31.10.2014
comment
@lasithc Вложения и содержимое — это два отдельных типа записей. Вы не можете напрямую перемещаться между ними. т.е. это не запись вложения с теми же данными, которые хранятся в ContentVersion. И Attachment, и ContentVersion хранят двоичные данные. - person Daniel Ballinger; 02.11.2014

Зимой 15 Salesforce сделала это возможным. Вы можете создать класс, который преобразует вложение в ContentVersion. и ContentDistribution. Затем передайте пользователю поле DistributionPublicUrl ContentDistribution.

Код будет примерно таким

            list<Attachment> invoices = [select id, name, body from attachment limit 10];
            list<ContentVersion> contents = new list<ContentVersion>();
            list<ContentDistribution> dists = new list<ContentDistribution>();

            for(Attachment inv: invoices){
                ContentVersion cont = new ContentVersion();
                cont.Title = inv.Name;
                cont.PathOnClient =  inv.Name;
                cont.VersionData = inv.Body;
                contents.add(cont);
            }
            insert contents;

            for(ContentVersion cont : contents){
                ContentDistribution cd = new ContentDistribution();
                cd.name = cont.Title;
                cd.ContentVersionId = cont.id;
                cd.PreferencesAllowOriginalDownload = true;
                cd.PreferencesAllowPDFDownload = true;
                cd.PreferencesAllowViewInBrowser = true;
                dists.add(cd); 
            }             

            insert dists ;
person Amr Ibrahim    schedule 06.07.2015