Регистрация  |  Вход

Не могу взять под контроль выводимую ширину картинки

Приветствую всех.

Ситуация:
аккуратно вывести картинки, хранящиеся в поле типа Rich Text при помощи тега <apex:outputField>

Проблема: вывести получается, а вот "аккуратно" - нет.
Т.е. я хотел задать ширину тега <apex:outputField> в 200пк через стиль, но не работает даже если указать стиль display:block.


Вопросы:
(1) правильно ли я делаю что использую поле типа Rich Text для хранения картинок?
(2) правильно ли я делаю что использую тег <apex:outputField> для вывода содержимого этого поля?
(3) как задать выводимый размер картинки в таком случае?

И я предвижу ваш вопрос: а может сразу использовать картинку правильного размера, я не ресайзить ее в браузере, что не есть хорошо? это было бы здорово, но как организовать этот ресайз картинки? все что могут клиенты, это просто загрузить картинку (неизвестного размера) в поле..

Приветствую всех.

[b]Ситуация:[/b]
аккуратно вывести картинки, хранящиеся в поле типа Rich Text при помощи тега <apex:outputField>

[b]Проблема:[/b] вывести получается, а вот "аккуратно" - нет.
Т.е. я хотел задать ширину тега <apex:outputField> в 200пк через стиль, но не работает даже если указать стиль display:block.


[b]Вопросы:[/b]
(1) правильно ли я делаю что использую поле типа Rich Text для хранения картинок?
(2) правильно ли я делаю что использую тег <apex:outputField> для вывода содержимого этого поля?
(3) как задать выводимый размер картинки в таком случае?

И я предвижу ваш вопрос: а может сразу использовать картинку правильного размера, я не ресайзить ее в браузере, что не есть хорошо? это было бы здорово, но как организовать этот ресайз картинки? все что могут клиенты, это просто загрузить картинку (неизвестного размера) в поле..

Eще вопрос:
хочу подгружать дефолтную картинку в зависимости от того, есть ли картинка в поле.
фактически будет вкл или откл дефолтной картинки в зависисмости от наличия содержания поля.

можно ли использовать формулу таким образом:

<img src=''link to documents" style="display: (IF(ISBLANK(r.View__c)), "block", "none")"></img>

не разобрался с синтаксисом формул, не могу заставить это работать...

Или не получится так использовать формулы и нужно писать JAVAскриптик?

[b]Eще вопрос:[/b]
хочу подгружать дефолтную картинку в зависимости от того, есть ли картинка в поле.
фактически будет вкл или откл дефолтной картинки в зависисмости от наличия содержания поля.

можно ли использовать [b]формулу[/b] таким образом:

<img src=''link to documents" style="display: (IF(ISBLANK(r.View__c)), "block", "none")"></img>

не разобрался с синтаксисом формул, не могу заставить это работать...

Или не получится так использовать формулы и нужно писать JAVAскриптик?

Страница в VisualForce? Если так, то чем не подходит <apex:image>?
Документацию по нему можно найти тут: http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_image.htm

Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html.

Страница в VisualForce? Если так, то чем не подходит <apex:image>?
Документацию по нему можно найти тут: [url]http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_image.htm[/url]

Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание [url]http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html[/url].

Den Brown
Вопросы:
(1) правильно ли я делаю что использую поле типа Rich Text для хранения картинок?
(2) правильно ли я делаю что использую тег <apex:outputField> для вывода содержимого этого поля?
(3) как задать выводимый размер картинки в таком случае?

1. Неправильно. Если картинки надо привязать к определенной записи, то лучше использовать Attachments. Rich Text используется для хранения форматированного текста.
2. Для вывода этого поля, да! <apex:outputField> лучше использовать для вывода любого поля в Salesforce.
3. Если все-таки вставил картинку в Rich Text, то она должна выводиться с помощью html тега <img>. Найди как до него добраться и вставить информацию о размере картинки в этот тег.

Den Brown
И я предвижу ваш вопрос: а может сразу использовать картинку правильного размера, я не ресайзить ее в браузере, что не есть хорошо? это было бы здорово, но как организовать этот ресайз картинки? все что могут клиенты, это просто загрузить картинку (неизвестного размера) в поле..

Если хочешь ресайзить все картинки, которые умудрится загрузить пользователь в поле Rich Text, то тут только javascript (jquery) поможет. Т.е. повесь на onload страницы обработчик, который будет резайзить картинки из области где выводится Rich Text

[quote="Den Brown"]Вопросы:
(1) правильно ли я делаю что использую поле типа Rich Text для хранения картинок?
(2) правильно ли я делаю что использую тег <apex:outputField> для вывода содержимого этого поля?
(3) как задать выводимый размер картинки в таком случае?[/quote]

1. Неправильно. Если картинки надо привязать к определенной записи, то лучше использовать Attachments. Rich Text используется для хранения форматированного текста.
2. Для вывода этого поля, да! <apex:outputField> лучше использовать для вывода любого поля в Salesforce.
3. Если все-таки вставил картинку в Rich Text, то она должна выводиться с помощью html тега <img>. Найди как до него добраться и вставить информацию о размере картинки в этот тег.

[quote="Den Brown"]И я предвижу ваш вопрос: а может сразу использовать картинку правильного размера, я не ресайзить ее в браузере, что не есть хорошо? это было бы здорово, но как организовать этот ресайз картинки? все что могут клиенты, это просто загрузить картинку (неизвестного размера) в поле..[/quote]

Если хочешь ресайзить все картинки, которые умудрится загрузить пользователь в поле Rich Text, то тут только javascript (jquery) поможет. Т.е. повесь на onload страницы обработчик, который будет резайзить картинки из области где выводится Rich Text

Den Brown
хочу подгружать дефолтную картинку в зависимости от того, есть ли картинка в поле.
фактически будет вкл или откл дефолтной картинки в зависисмости от наличия содержания поля.

можно ли использовать формулу таким образом:

<img src=''link to documents" style="display: (IF(ISBLANK(r.View__c)), "block", "none")"></img>

не разобрался с синтаксисом формул, не могу заставить это работать...

Или не получится так использовать формулы и нужно писать JAVAскриптик?

Смотри в сторону Attachements, будет намного проще организавать логику к коде контроллера.
Посмотри вот эту мою статью Загружаем и присоединяем к объектам файлы. Attachments

[quote="Den Brown"]
хочу подгружать дефолтную картинку в зависимости от того, есть ли картинка в поле.
фактически будет вкл или откл дефолтной картинки в зависисмости от наличия содержания поля.

можно ли использовать формулу таким образом:

<img src=''link to documents" style="display: (IF(ISBLANK(r.View__c)), "block", "none")"></img>

не разобрался с синтаксисом формул, не могу заставить это работать...

Или не получится так использовать формулы и нужно писать JAVAскриптик?
[/quote]

Смотри в сторону Attachements, будет намного проще организавать логику к коде контроллера.
Посмотри вот эту мою статью [url=http://salesforce-developer.ru/zagruzhaem-i-prisoedinyaem-k-obektam-faylyi-attachments/]Загружаем и присоединяем к объектам файлы. Attachments[/url]

andreyzh
Страница в VisualForce? Если так, то чем не подходит <apex:image>?
Документацию по нему можно найти тут: http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_image.htm

<apex:image> позволит вывести картинку по прямому URL из Static Resources или из интернета. При рендеренге страницы он становится html тегом <img>. Поле Rich Text это уже кусок html, вставить ее в apex:image не получится


andreyzh
Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html.

Отличное замечание! Да, для условного вывода части страницы надо использовать rendered.
Вот я писал про это Условный вывод информации на Visualforce странице (rendered attribute)

[quote="andreyzh"]
Страница в VisualForce? Если так, то чем не подходит <apex:image>?
Документацию по нему можно найти тут: [url]http://www.salesforce.com/us/developer/docs/pages/Content/pages_compref_image.htm[/url]
[/quote]
<apex:image> позволит вывести картинку по прямому URL из Static Resources или из интернета. При рендеренге страницы он становится html тегом <img>. Поле Rich Text это уже кусок html, вставить ее в apex:image не получится


[quote="andreyzh"]
Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание [url]http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html[/url].
[/quote]
Отличное замечание! Да, для условного вывода части страницы надо использовать rendered.
Вот я писал про это [url=http://salesforce-developer-rus.blogspot.com/2013/01/visualforce-rendered-attribute.html]Условный вывод информации на Visualforce странице (rendered attribute)[/url]

andreyzh
Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html.

Так и сделал. Спасибо

[quote="andreyzh"]
Отвечая на второй вопрос, то тут есть стандартная директива render / rerender. Вот тут неплохое описание [url]http://cloudforce4u.blogspot.fi/2013/07/render-and-rerender-in-salesforce.html[/url].[/quote]
Так и сделал. Спасибо

Dmitry Shnyrev
Если все-таки вставил картинку в Rich Text, то она должна выводиться с помощью html тега <img>. Найди как до него добраться и вставить информацию о размере картинки в этот тег.

Так и сделал. Получил с помощью комбинированного селектора('.whereMyImageTag img') jQuiery доступ с нужным img тэгам и дал им размер через стиль.

Почему использую RichText вместо Attachments? пока у меня только одно объяснение: RichText хоть как-то может ограничить размер фото (1mb).

Но вот уже пора делать и галлерею или слайд-шоу для кастомной DetailView страницы. А значит придется разбираться с Attachments (который в финальной разметки (предположительно) дает "чистый" img тэг). С RichText это будут костыли на костылях...

Насчет вашей статьи, Дмитрий, Загружаем и присоединяем к объектам файлы.
(1) если мы используем public with sharing class UploadAttachementTestController как расширение стандартного контроллера для кастомной Дитейл страницы для отображение записи, то как сюда получить ID текущей записи (глупый вопрос, но голова уже не соображает)
attachment.ParentId = 'a00d000000AWM1z';

(2) В одной из следующих статей я применю этот метод чтобы добавить к объектам Book в нашем приложении возможность подгружать обложки.
не нашел этой статьи.
В двух словах: как потом вывести этот аттачмент. В переменную какого ТИПА брать этот аттачмент? как выводить в марк-апе? или в контроллере мы берем путь к картинке (не саму картинку) и закидываем его в <apex:image>? но как получить этот путь?
спасибо

[quote="Dmitry Shnyrev"]
 Если все-таки вставил картинку в Rich Text, то она должна выводиться с помощью html тега <img>. Найди как до него добраться и вставить информацию о размере картинки в этот тег.
[/quote]

Так и сделал. Получил с помощью комбинированного селектора('.whereMyImageTag  img') jQuiery доступ с нужным img тэгам и дал им размер через стиль.

Почему использую RichText вместо Attachments? пока у меня только одно объяснение: RichText хоть как-то может ограничить размер фото (1mb).

Но вот уже пора делать и галлерею или слайд-шоу для кастомной DetailView страницы. А значит придется разбираться с Attachments (который в финальной разметки (предположительно) дает "чистый" img тэг). С RichText это будут костыли на костылях...

Насчет вашей статьи, Дмитрий, [b]Загружаем и присоединяем к объектам файлы. [/b]
(1) если мы используем public with sharing class UploadAttachementTestController как расширение стандартного контроллера для кастомной Дитейл страницы для отображение записи, то как сюда получить ID текущей записи (глупый вопрос, но голова уже не соображает)
attachment.ParentId = 'a00d000000AWM1z'; 

(2) [b]В одной из следующих статей я применю этот метод чтобы добавить к объектам Book в нашем приложении возможность подгружать обложки.[/b]
не нашел этой статьи. 
[b]В двух словах:[/b] как потом вывести этот аттачмент. В переменную какого ТИПА брать этот аттачмент? как выводить в марк-апе? или в контроллере мы берем путь к картинке (не саму картинку) и закидываем его в <apex:image>? но как получить этот путь?
спасибо

Den Brown
Почему использую RichText вместо Attachments? пока у меня только одно объяснение: RichText хоть как-то может ограничить размер фото (1mb).

Размер Attachement max 5Mb так что тут ограничение из коробки. Но я думаю что проверить размер загружаемой картинки тоже не проблема.

Den Brown
(2) В одной из следующих статей я применю этот метод чтобы добавить к объектам Book в нашем приложении возможность подгружать обложки.
не нашел этой статьи.

Каюсь Не хватило сил дописать и закончить серию уроков про "Библиотеку".

На ворпосы 1,2 отвечу чуть позже.

[quote="Den Brown"]Почему использую RichText вместо Attachments? пока у меня только одно объяснение: RichText хоть как-то может ограничить размер фото (1mb).[/quote]

Размер Attachement max 5Mb так что тут ограничение из коробки. Но я думаю что проверить размер загружаемой картинки тоже не проблема. 

[quote="Den Brown"]
(2) В одной из следующих статей я применю этот метод чтобы добавить к объектам Book в нашем приложении возможность подгружать обложки.
не нашел этой статьи. 
[/quote]

Каюсь :( Не хватило сил дописать и закончить серию уроков про "Библиотеку". 

На ворпосы 1,2 отвечу чуть позже.

Den Brown
(1) если мы используем public with sharing class UploadAttachementTestController как расширение стандартного контроллера для кастомной Дитейл страницы для отображение записи, то как сюда получить ID текущей записи (глупый вопрос, но голова уже не соображает)
attachment.ParentId = 'a00d000000AWM1z';

Вот ссылка на официальную документацию StandardController Class

В конструкторе extension должен присутствовать обязательный параметр. Это и есть StandardController.

public myControllerExtension(ApexPages.StandardController stdController) {
this.acct = (Account)stdController.getRecord();
}

А вот собственно все методы, которые доступны у StandardController StandardController Instance Methods

[quote="Den Brown"](1) если мы используем public with sharing class UploadAttachementTestController как расширение стандартного контроллера для кастомной Дитейл страницы для отображение записи, то как сюда получить ID текущей записи (глупый вопрос, но голова уже не соображает)
attachment.ParentId = 'a00d000000AWM1z'; [/quote]

Вот ссылка на официальную документацию [url=http://www.salesforce.com/us/developer/docs/pages/Content/apex_pages_standardcontroller.htm]StandardController Class[/url]

В конструкторе extension должен присутствовать обязательный параметр. Это и есть StandardController.
[code]
public myControllerExtension(ApexPages.StandardController stdController) {
    this.acct = (Account)stdController.getRecord();
}
[/code]
А вот собственно все методы, которые доступны у StandardController [url=http://www.salesforce.com/us/developer/docs/pages/Content/apex_ApexPages_StandardController_instance_methods.htm]StandardController Instance Methods[/url]

Den Brown
В двух словах: как потом вывести этот аттачмент. В переменную какого ТИПА брать этот аттачмент? как выводить в марк-апе? или в контроллере мы берем путь к картинке (не саму картинку) и закидываем его в <apex:image>? но как получить этот путь?
спасибо

смысл вот какой.
В контроллере тебе надо узнать ID твоего attachment который ты хочешь вывести. Делается это с помощью SOQL запросу к объекту Attachement
зная ID на VisualForce page надо вставить такой тег
<apex:image url="/servlet/servlet.FileDownload?file={!Attachment_ID}"></apex:image>

На месте этого тега должна появиться картинка.
Как-то так. Пробуй. Сам не проверял. Если что не получится пиши.

Попробую собраться с силами и написать статью про загрузку и вывод Attachments на Salesforce

[quote=" Den Brown"]В двух словах: как потом вывести этот аттачмент. В переменную какого ТИПА брать этот аттачмент? как выводить в марк-апе? или в контроллере мы берем путь к картинке (не саму картинку) и закидываем его в <apex:image>? но как получить этот путь?
спасибо[/quote]

смысл вот какой. 
В контроллере тебе надо узнать ID твоего attachment который ты хочешь вывести. Делается это с помощью SOQL запросу к объекту Attachement
зная ID на VisualForce page надо вставить такой тег
<apex:image url="/servlet/servlet.FileDownload?file={!Attachment_ID}"></apex:image> 

На месте этого тега должна появиться картинка. 
Как-то так. Пробуй. Сам не проверял. Если что не получится пиши. 

Попробую собраться с силами и написать статью про загрузку и вывод Attachments  на Salesforce

Dmitry Shnyrev
На месте этого тега должна появиться картинка.
Как-то так. Пробуй. Сам не проверял. Если что не получится пиши.

Буду пробовать, ибо картинки - это важная часть данных, с которой нужно научится правильно работать.

Небольшие вопросы про контроллер:
(1) вижу в примерах код, где в класс, являющийся расширение стандартного контроллера, закидывают аргументом не "ApexPages.StandardController stdController", a "ApexPages.StandardSETController stdController". Как я понял, это делается в том случае, если из "stdController" нужно получить записИ, а не одну запись. Правильно?

(2) не уловил до конца, с какой целью некоторые методы контроллера объявляются в виде объекта типа "PageReference"?

(3) знаю как это сделать в asp.net, не разобрал как сделать в SF: как в контроллере обратиться к компоненту или обычному HTML тегу и поменять значение его атрибута, например, в момент пост-бэка, я отключаю рендеринг того компонента, который и вызвал пост-бек (он больше не нужен по сценарию, но ниже на странице есть кнопки как его вернуть).

Спасибо. Ваши ответы даже "в двух словах" сохраняют мне много времени, и наверняка помогут и другим пользователям, кто будет читать форум в будущем.

[quote="Dmitry Shnyrev"]
На месте этого тега должна появиться картинка. 
Как-то так. Пробуй. Сам не проверял. Если что не получится пиши. 
[/quote]

Буду пробовать, ибо картинки - это важная часть данных, с которой нужно научится правильно работать.

Небольшие вопросы про контроллер:
(1) вижу в примерах код, где в класс, являющийся расширение стандартного контроллера, закидывают аргументом не "ApexPages.StandardController stdController", a "ApexPages.StandardSETController stdController". Как я понял, это делается в том случае, если из "stdController" нужно получить записИ, а не одну запись. Правильно?

(2) не уловил до конца, с какой целью некоторые методы контроллера объявляются в виде объекта типа "PageReference"?

(3) знаю как это сделать в asp.net, не разобрал как сделать в SF: как в контроллере обратиться к компоненту или обычному HTML тегу и поменять значение его атрибута, например, в момент пост-бэка, я отключаю рендеринг того компонента, который и вызвал пост-бек (он больше не нужен по сценарию, но ниже на странице есть кнопки как его вернуть).

Спасибо. Ваши ответы даже "в двух словах" сохраняют мне много времени, и наверняка помогут и другим пользователям, кто будет читать форум в будущем.

Den Brown
(1) вижу в примерах код, где в класс, являющийся расширение стандартного контроллера, закидывают аргументом не "ApexPages.StandardController stdController", a "ApexPages.StandardSETController stdController". Как я понял, это делается в том случае, если из "stdController" нужно получить записИ, а не одну запись. Правильно?

StandardSETController используется когда ты хочешь создать extension страницу для стандартной страницы списка (List). У каждого объекта есть перечень стандартных страниц (List, Edit, View, New и еще ряд других). Одни из них относятся к одной записи, другие относятся к списку записей. Так вот чтобы переназначить каждую из них надо использоваться соответствующий тип контроллера.

[quote="Den Brown"](1) вижу в примерах код, где в класс, являющийся расширение стандартного контроллера, закидывают аргументом не "ApexPages.StandardController stdController", a "ApexPages.StandardSETController stdController". Как я понял, это делается в том случае, если из "stdController" нужно получить записИ, а не одну запись. Правильно?[/quote]

StandardSETController используется когда ты хочешь создать extension страницу для стандартной страницы списка (List). У каждого объекта есть перечень стандартных страниц (List, Edit, View, New и еще ряд других). Одни из них относятся к одной записи, другие относятся к списку записей. Так вот чтобы переназначить каждую из них надо использоваться соответствующий тип контроллера.

Den Brown
(2) не уловил до конца, с какой целью некоторые методы контроллера объявляются в виде объекта типа "PageReference"?

PageReference означает, что будет произведен редирект на другую страницу. PageReference Class. Обычно используется в методах (action) контроллера, к которым обращается Visualforce page.

[quote="Den Brown"](2) не уловил до конца, с какой целью некоторые методы контроллера объявляются в виде объекта типа "PageReference"?[/quote]

PageReference означает, что будет произведен редирект на другую страницу. [url=http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_system_pagereference.htm]PageReference Class[/url]. Обычно используется в методах (action) контроллера, к которым обращается Visualforce page.

Den Brown
(3) знаю как это сделать в asp.net, не разобрал как сделать в SF: как в контроллере обратиться к компоненту или обычному HTML тегу и поменять значение его атрибута, например, в момент пост-бэка, я отключаю рендеринг того компонента, который и вызвал пост-бек (он больше не нужен по сценарию, но ниже на странице есть кнопки как его вернуть).

Как-то не очень понятно что ты питаешься описать.

Но может мое общее объяснение поможет. В SF логика работы страницы такая:

1. Контроллер получает GET запрос запускает контроллер после чего рендерит страницу (преобразует все apex теги в html) и отправляет в браузер со всеми переменными (View State) и нафиг удаляет контроллер.
2. Браузер строит страницу и ждет твоей реакции.
3. Ты нажимаешь кнопку и на SF отправляется хитрый POST запрос (вот почему на SF нельзя посылать POST запросы вручную) который содержит информацию какой action в контроллере запустить, а также View State.
4. Salesforce воссоздает из View State состояние контроллера и запускает нужный метод.
5. После этого контроллер опять рендерит страницу (преобразует все apex теги в html) и отсылает в браузер с новым View State и снова умирает.

Т.е. простыми словами контроллер ничего не знает о твоем html теге. Он может только поменять значение каких либо переменных, которые повлияют на рендеринг страницы.

Как-то так.

[quote="Den Brown"](3) знаю как это сделать в asp.net, не разобрал как сделать в SF: как в контроллере обратиться к компоненту или обычному HTML тегу и поменять значение его атрибута, например, в момент пост-бэка, я отключаю рендеринг того компонента, который и вызвал пост-бек (он больше не нужен по сценарию, но ниже на странице есть кнопки как его вернуть).[/quote]

Как-то не очень понятно что ты питаешься описать.

Но может мое общее объяснение поможет. В SF логика работы страницы такая:

1. Контроллер получает GET запрос запускает контроллер после чего рендерит страницу (преобразует все apex теги в html) и отправляет в браузер со всеми переменными (View State) и нафиг удаляет контроллер.
2. Браузер строит страницу и ждет твоей реакции.
3. Ты нажимаешь кнопку и на SF отправляется хитрый POST запрос (вот почему на SF нельзя посылать POST запросы вручную) который содержит информацию какой action в контроллере запустить, а также View State. 
4. Salesforce воссоздает из View State состояние контроллера и запускает нужный метод.
5. После этого контроллер опять рендерит страницу (преобразует все apex теги в html) и отсылает в браузер с новым View State и снова умирает.

Т.е. простыми словами контроллер ничего не знает о твоем html теге. Он может только поменять значение каких либо переменных, которые повлияют на рендеринг страницы.

Как-то так.

Спасибо, вроде все понял.
Если дадут время - буду пробовать сегодня.

Пока в голове только один вопрос: в момент создания новой записи как мы можем передать ID записи вот сюда, если ID еще не существует:
attachment.ParentId = 'a00d000000AWM1z'; // the record the file is attached to
получается, что сначала записываем новую записть, затем получаем ее ID, а затем записываем downloading...

пока буду пробовать что-то прикрепить и вывести на редактируемых записях, у которых уже есть ID.

Спасибо, вроде все понял.
Если дадут время - буду пробовать сегодня.

Пока в голове только один вопрос:  в момент создания новой записи как мы можем передать ID записи вот сюда, если ID еще не существует:
 attachment.ParentId = 'a00d000000AWM1z'; // the record the file is attached to
получается, что сначала записываем новую записть, затем получаем ее ID, а затем записываем downloading...

пока буду пробовать что-то прикрепить и вывести на редактируемых записях, у которых уже есть  ID.

Пока в голове только один вопрос: в момент создания новой записи как мы можем передать ID записи вот сюда, если ID еще не существует:
attachment.ParentId = 'a00d000000AWM1z'; // the record the file is attached to
получается, что сначала записываем новую записть, затем получаем ее ID, а затем записываем downloading...

Да, именно. Сначала надо сохранить саму запись чтобы система сгенерировала ее ID, и потом ее уже подставлять в parentID для Attachement.

Но это в случае если ты запись создаешь и одновременно загружаешь attachement.

В реальности такое редко бывает (даже в стандартном Salesforce). Обычно создается сама запись, сохраняется, а уже на странице View созданной записи появляется кнопка прикрипить что-нибудь (в этом случае attachment)

[quote]Пока в голове только один вопрос: в момент создания новой записи как мы можем передать ID записи вот сюда, если ID еще не существует:
attachment.ParentId = 'a00d000000AWM1z'; // the record the file is attached to
получается, что сначала записываем новую записть, затем получаем ее ID, а затем записываем downloading...[/quote]

Да, именно. Сначала надо сохранить саму запись чтобы система сгенерировала ее ID, и потом ее уже подставлять в parentID для Attachement. 

Но это в случае если ты запись создаешь и одновременно загружаешь attachement. 

В реальности такое редко бывает (даже в стандартном Salesforce). Обычно создается сама запись, сохраняется, а уже на странице View созданной записи появляется кнопка прикрипить что-нибудь (в этом случае attachment)

Вывод картинки: Rich Text Area field VS Attachement

Итак немного подытожу результат моих экспериментов с выводом картинок.

Rich Text Area -недостатки:

(1) позволяет пользователю ввести в поле не только картинку но и текст, что приведет к поплывшему дизайну.
(2) если выгрузить Дата Лоудером записи с Rich Text Ares с картинкой, то я не представляю, что будет в csv файле в этом поле...
(3) и самое главное: в VF нет прямого доступа к тэгу IMG, приходится его цеплять к нему стили, классы, атрибуты с помощью JS уже в браузере.

Rich Text Area -плюсы:
(1) возможность использования стандартных контроллеров;
(2) одноэтапность создания записи с картинками (все делается за один раз);
(3) размер содержания поля ограничен 1Мб (что в ситуации невозможности ресайзить картинку на сервере хоть как-то помогает).

Attachement -недостатки:
(1) требует кастомизации контроллеров и создания кастомных страниц;
(2) требует знания как переносить записи объекта Attachements при миграции (я не знаю еще)

Attachement -плюсы:
(1) в финальной разметке выводит чистый IMG и в VF есть прямой доступ к нему, что всегда хорошо, а в ситуации, когда эти теги создаются диначески на сервере и в броузере с ними работает JS (например для создания галлерей, слайд-шоу) это особенно важно;

Фундаментальные проблемы работы с картинками:
(1) невозможность контролировать пользовательский ввод (в Rich Text Ares могут ввести и фото и текс, в Attachements могут загрузить .doc);
(2) невозможность проверять размер, автоматически ресайзить картинку при загрузке.

добавляйте свом комментарии по этому вопросу.
всем спасибо

Вывод картинки:[b] Rich Text Area field VS Attachement[/b]

Итак немного подытожу результат моих экспериментов с выводом картинок.
[i]
Rich Text Area -недостатки:[/i]
(1) позволяет пользователю ввести в поле не только картинку но и текст, что приведет к поплывшему дизайну.
(2) если выгрузить Дата Лоудером записи с Rich Text Ares с картинкой, то я не представляю, что будет в csv файле в этом поле...
(3) и самое главное: в VF нет прямого доступа к тэгу IMG, приходится его цеплять к нему стили, классы, атрибуты с помощью JS уже в браузере.

[i]Rich Text Area -плюсы:[/i]
(1) возможность использования стандартных контроллеров;
(2) одноэтапность создания записи с картинками (все делается за один раз);
(3) размер содержания поля ограничен 1Мб (что в ситуации невозможности ресайзить картинку на сервере хоть как-то помогает).

[i]Attachement -недостатки:[/i]
(1) требует кастомизации контроллеров и создания кастомных страниц;
(2) требует знания как переносить записи объекта Attachements при миграции (я не знаю еще)

[i]Attachement -плюсы:[/i]
(1) в финальной разметке выводит чистый IMG и  в VF есть прямой доступ к нему, что всегда хорошо, а в ситуации, когда эти теги создаются диначески на сервере и в броузере с ними работает JS (например для создания галлерей, слайд-шоу) это особенно важно;

[i]Фундаментальные проблемы работы с картинками:[/i]
(1) невозможность контролировать пользовательский ввод (в Rich Text Ares могут ввести и фото и текс, в Attachements могут загрузить .doc);
(2) невозможность проверять размер, автоматически ресайзить картинку при загрузке.

добавляйте свом комментарии по этому вопросу.
всем спасибо

Работа с картинками в Salesforce действительно реализован просто "никак" (по крайней мере в через apex).
Действительно при загрузке attachments нет возможности проверить ни тип файла, ни разрешение, ни тем более изменить размер на лету. Как бы тут остается полагаться на совесть самих пользователей или писать свои кастыли.

Я погуглил и нашел несколько теоретических рецептов:

1. Организовать проверки и ресайз на стороне javascript в браузере. Способ крайне ненадежный, потому что зависит от клиента (javascript не сработать или его просто отключат).

2. При получении attachement в контроллере отправить его на стройний сервис с помощью callout, который собственно и все и сделает и вернет ответ, на основании которого будет приниматься решение о сохранении attachment или возвращении ошибки. Тоже способ сомнительный потому что в callout объем передаваемых и принимаемых данных ограничен 3Мб. Особенно не разгонишься.

3. Способ так сказать объединяет два предыдущих. Браузер отправляет картинку непосредственно на сторонний сервис, который делает все необходимые манипуляции и оповещает Salesforce о результате запроса. Salesforce соответственно возвращает ответ пользователю. Получается такой треугольник. Способ хороший, я даже я знаю пример подобной реализации в боевом проекте. Но очень сложный. Тут за один вечер не напишешь.

Это все касается только attachement. Хранить картинки в Rich Text я не советую.

Работа с картинками в Salesforce действительно реализован просто "никак" (по крайней мере в через apex). 
Действительно при загрузке attachments нет возможности  проверить ни тип файла, ни разрешение, ни тем более изменить размер на лету. Как бы тут остается  полагаться на совесть самих пользователей или писать свои кастыли.

[b]Я погуглил и нашел несколько теоретических рецептов:[/b]

1. Организовать проверки и ресайз на стороне javascript в браузере. Способ крайне ненадежный, потому что зависит от клиента (javascript не сработать или его просто отключат).

2. При получении attachement в контроллере отправить его на стройний сервис с помощью callout, который собственно и все и сделает и вернет ответ, на основании которого будет приниматься решение о сохранении attachment или возвращении ошибки. Тоже способ сомнительный потому что в callout объем передаваемых и принимаемых данных ограничен 3Мб. Особенно не разгонишься.

3. Способ так сказать объединяет два предыдущих. Браузер отправляет картинку непосредственно на сторонний сервис, который делает все необходимые манипуляции и оповещает Salesforce о результате запроса. Salesforce соответственно возвращает ответ пользователю. Получается такой треугольник. Способ хороший, я даже я знаю пример подобной реализации в боевом проекте. Но очень сложный. Тут за один вечер не напишешь.

[i]Это все касается только attachement. Хранить картинки в Rich Text я не советую.[/i]