Tag Archives: Salesforce

EmailMessage in Salesforce

“EmailMessage” represents an email in Salesforce.

EmailMessage Supported Calls:

  • create()
  • delete()
  • describeLayout()
  • describeSObjects()
  • getDeleted()
  • getUpdated()
  • query()
  • retrieve()
  • undelete()
  • update()
  • upsert()
  • EmailMessage is only available for organizations that use Email-to-Case or Enhanced Email, which is automatically enabled for most customers.
  • Customer Portal users have read access to EmailMessage if the value for the ParentID field is associated with a case. Otherwise, access is determined by sharing access of the associated task.
  • update() is supported only on records whose Status is Draft. When a record’s Status is not Draft, update() is supported only for the IsExternallyVisible field and custom fields.

Fields in EmailMessage:

Field Label API Field Name Type Length Properties Description
Activity ActivityId reference 15 Create, Filter, Group, Nillable, Sort ID of the activity that is associated with the email. Usually represents an open task that is created for the case owner when a new unread email message is received.
BCC Ids BccIds JunctionIdList Create, Update A string array of IDs for contacts, leads, and users who were sent a blind carbon copy of the email message. Each ID is linked to an EmailMessageRelation record, which represents the relationship between an email message and a Contact, Lead, or User record.
BCC Address BccAddress string 4000 Create, Filter, Nillable, Sort, Update A string array of email addresses for recipients who were sent a blind carbon copy of the email message. This field should include only email addresses that are not associated with Contact, Lead, or User records in Salesforce. If the recipient is a contact, lead, or user, add their ID to the BccIds field instead of adding their email address to the BccAddress field. Then the email message is automatically associated with the contact, lead, or user.
CC Address CcAddress string 4000 Create, Filter, Nillable, Sort, Update A string array of email addresses for recipients who were sent a carbon copy of the email message. This field should include only email addresses that are not associated with Contact, Lead, or User records in Salesforce. If the recipient is a contact, lead, or user, add their ID to the CcIds field instead of adding their email address to the CcAddress field. Then the email message is automatically associated with the contact, lead, or user.
CC Ids CcIds JunctionIdList Create, Update A string array of IDs for contacts, leads, and users who were sent a carbon copy of the email message. Each ID is linked to an EmailMessageRelation record, which represents the relationship between an email message and a Contact, Lead, or User record.
Created By CreatedById reference 15 Defaulted on create, Filter
Created Date CreatedDate datetime Defaulted on create, Filter
Deleted IsDeleted boolean Defaulted on create, Filter Indicates whether the object has been moved to the Recycle Bin (true) or not (false). Label is Deleted.
EmailMessage ID Id id 15
From Address FromAddress email 1000 Create, Filter, Nillable, Update The address that originated the email.
From Name FromName string 1000 Create, Filter, Nillable, Update The sender’s name.
HTML Body HtmlBody textarea 32000 Create, Nillable, Update The body of the email in HTML format.
Has Attachment HasAttachment boolean Defaulted on create, Filter Indicates whether the email was sent with an attachment (true) or not (false).
Headers Headers textarea 32000 Create, Nillable, Update The Internet message headers of the incoming email. Used for debugging and tracing purposes. Does not apply to outgoing emails.
Is Incoming Incoming boolean Create, Defaulted on create, Filter Indicates whether the email was received (true) or sent (false).
Is Client Managed IsClientManaged boolean Create, Defaulted on create, Filter, Group If EmailMessage is created with IsClientManaged set to true, users can modify EmailMessage.ContentDocumentIds to link file attachments even when the Status of the EmailMessage is not set to Draft.
Is Externally Visible IsExternallyVisible boolean Create, Defaulted on create, Filter, Group, Update If the community case feed is enabled, IsExternallyVisible controls the external visibility of emails in communities. When IsExternallyVisible is set to true—its default value—email messages are visible to external users in the case feed.
Only emails with the ParentId field populated are available to be externally visible in communities.
This field can’t be updated if the email’s Status is set to Draft.
Last Modified By LastModifiedById reference 15 Defaulted on modify, Filter
Last Modified Date LastModifiedDate datetime Defaulted on modify, Filter
Message Date MessageDate datetime Create, Filter, Nillable, Update The date the email was created.
Message Identifier MessageIdentifier string 255 Create, Filter, Group, Nillable, Sort, Update The ID of the email message.
Parent Case ParentId reference 15 Create, Filter, Group, Nillable, Sort ID of the case that’s associated with the email.
Related To Id RelatedToId reference 15 Create, Filter, Group, Nillable, Sort The RelatedToId represents nonhuman objects such as accounts, opportunities, campaigns, cases, or custom objects. RelatedToIds are polymorphic. Polymorphic means a RelatedToId is equivalent to the ID of a related object.
Reply-to Email Message ReplyToEmailMessageId reference 15 Create, Filter, Group, Nillable, Sort ID of the inbound or outbound EmailMessage the current EmailMessage is a reply to. It’s not possible to reply to a message whose Status is Draft.
Status Status picklist 40 Create, Filter, Restricted picklist, Update Read only. The status of the email. For example, New, Draft, Unread, Replied, or Sent.
Subject Subject string 3000 Create, Filter, Nillable, Update The subject line of the email.
System Modstamp SystemModstamp datetime
Thread Identifier ThreadIdentifier String 255 Create, Filter, Group, Nillable, Sort, Update The ID of the email thread the email message belongs to.
Text Body TextBody textarea 32000 Create, Nillable, Update The body of the email, in plain text format.
To Address ToAddress string 4000 Create, Filter, Nillable, Update A string array of email addresses for recipients who were sent the email message. This field should include only email addresses that are not associated with Contact, Lead, or User records in Salesforce. If the recipient is a contact, lead, or user, add their ID to the ToIds field instead of adding their email address to the ToAddress field. Then the email message is automatically associated with the contact, lead, or user.
Validate From Address ValidateFromAddress picklist Create, Filter, Nillable, Update A string array of email addresses for recipients who were sent the email message. This field should include only email addresses that are not associated with Contact, Lead, or User records in Salesforce. If the recipient is a contact, lead, or user, add their ID to the ToIds field instead of adding their email address to the ToAddress field. Then the email message is automatically associated with the contact, lead, or user.

EmailMessage Usage:
If your organization uses Email-to-Case, a case is created when an email is sent to one of your company’s addresses. The email, which is related to the case by the ParentID field, is stored as an EmailMessage record. When users view the email, they see the EmailMessage record.

If your organization uses Enhanced Email, each email is stored as an EmailMessage record and a Task record. When users view an email, they see the EmailMessage record.

Salesforce Sales Cloud Data Model

Leads : Represents a prospect or lead.
Accounts : Represents an organization or person involved with your business such as customers, competitors or partners.
Contacts : Represents a contact, which is a person associated with an account.
Opportunity : Represents an opportunity, which is a sale or pending deal.
Product : Represents a product that your org sells.
Opportunity Line Item : Represents an opportunity line item, which is a member of the list of Product2 products associated with an Opportunity.
Price Books : Represents to establish different pricing structures for products.
Quote : Represents a quote, which is a record showing proposed prices for products and services.
Order : Represents an order associated with a contract or an account. An order record is an agreement between a company and a customer to provision services or deliver products with a known quantity, price, and date.
Contract : Represents a contract(Business Legal Agreement) associated with an Account.
Campaigns : Represents and tracks a marketing campaign, such as a direct mail promotion, webinar, or trade show.
Campaign Members : Represents the association between a campaign and either a lead or a contact.

Custom Clone Button in Salesforce

Salesforce provides Clone functionality for some standard objects(Standard Clone button), However some standard objects do not have this button. For this purpose of cloning we will need to create custom button that will perform the functionality of cloning.

This cloning functionality can be achieved by writing a javascript for this custom button.

As an example lets create a custom button “Clone” on Account object that will clone the record.

Simply override your custom button “Clone” with the following javascript and you will have your custom Clone button that functions exactly like standard clone button

{!REQUIRESCRIPT("/soap/ajax/22.0/connection.js")} 
window.parent.location.href="/{!Account.Id}/e?&clone=1&retURL=/{!Account.Id}";

Note: retUrl specifies the location where you want to be on press of back button.

Attachments in Salesforce

Salesforce attachment represents a file that a User has uploaded and attached to a parent standard or custom object record. The permission to attach an attachment to the parent object is depend on parent object permission.

Attachment Supported following Calls:

  • create()
  • delete()
  • describeSObjects()
  • getDeleted()
  • getUpdated()
  • query()
  • retrieve()
  • search()
  • undelete()
  • update()
  • upsert()

Notes and Attachments are available for Standard Controller by default. If it is not there you can adding it in a Page Layout related list and for custom object you have to enable Add Notes and Attachments related list to default page layout as shown below.

This above option will be only available when custom object is first created. If you wish to add/remove Notes and Attachment later you can add/remove it to related list at any time by using page layout.

Attachment Field:

Field Name Data Type Description
Body base64 Required. Encoded file data.
BodyLength integer Size of the file (in bytes).
ConnectionReceivedId reference ID of the PartnerNetworkConnection that shared this record with your organization. This field is only available if you have enabled Salesforce to Salesforce.
ConnectionSentId reference ID of the PartnerNetworkConnection that you shared this record with. This field is only available if you have enabled Salesforce to Salesforce.
ContentType string The content type of the attachment.

If the Don’t allow HTML uploads as attachments or document recordssecurity setting is enabled for your organization, you cannot upload files with the following file extensions: .htm, .html, .htt, .htx, .mhtm, .mhtml,.shtm, .shtml, .acgi, .svg.

Description textarea Description of the attachment. This field is available in API version 18.0 and later.
IsEncrypted boolean Indicates whether the attachment is encrypted using Platform Encryption(true) or not (false).
IsPartnerShared boolean Indicates whether this record is shared with a connection usingSalesforce to Salesforce. Label is Is Shared With Partner.
IsPrivate boolean Indicates whether this record is viewable only by the owner and administrators (true) or viewable by all otherwise-allowed users (false).
Name string Required. Name of the attached file. Label is File Name.
OwnerId reference ID of the User who owns the attachment.
ParentId reference Required. ID of the parent object of the attachment.

Access to fields depends on the method being used:

  • All of the fields are accessible using the describeSObjects() and query() calls. With thecreate() call, you can insert the Name, ParentId, Body, IsPrivate, and OwnerId fields.
  • To modify existing records, the update() call gives you access to change the Name, Body, IsPrivate and OwnerId fields.
  • You can access all of the fields using a query() call. However, you can’t receive the Body field for multiple records in a single query() call. If your query returns the Body field, your client application must ensure that only one row with one Attachment is returned; otherwise, an error occurs. A more effective approach is to return IDs (but not Attachment records in theBody field) from a query() call and then pass them into retrieve() calls that return the Bodyfield.

Limitation of Attachments :

  • Attachment maximum size that can be upload is 25 MB.
  • For a file attached to a Solution, the limit is 1.5 MB.
  • The maximum email attachment size is 3 MB.
  • The size limit for multiple files attached to the same email is 25 MB, with a maximum size of 5 MB per file.
  • The query call does not return attachments parented by email, unless the user performing the query has the “Modify All Data” permission.
  • Attachment records are not searched during text searches.
  • When issued by an administrator, the query results include Attachment records from the Recycle Bin.
  • When issued by a non-administrator, the queryAll() call results do not include Attachment records from the Recycle Bin.
  • You can create trigger for Attachment only by using developer console or Force IDE. Form Setup you can’t able to create a trigger for attachment.
  • By Using global $Action you can only able to download a file.For Attachment $Action will not support for Create(New) / Update(Edit) / View.
  • You can’t able to customize Notes and Attachment related list.If you want then go with Visual page replacing with standard Notes and Attachment related list.
  • You can’t able to create custom fields for Notes and Attachments.
  • Export attachments using Data Loader will give you file body as binary encrypted format.So you will face some problem while import it back.But you can use dataloader.io to import and export Salesforce attachment.