sfdc.arrowpointe.comPerspectives on Salesforce.com

sfdc.arrowpointe.com Profile

sfdc.arrowpointe.com

Maindomain:arrowpointe.com

Title:Perspectives on Salesforce.com

Description:Authored by Scott Hemmeter of Arrowpointe Corp, this blog is written from the perspective of a Salesforce.com solution provider and contains information on

Keywords:crm, crm software, sales force automation, sfa, customer relationship management solutions, contact management, marketing automation, customer support, salesforce.com on-demand, salesforce.com, on-demand, perspectives on salesforce.com, consulting, consultant, methodology, sforce, blog, App Exchange, AppExchange, successforce, customforce, saas, software as a service, force.com, apex, visualforce...

Discover sfdc.arrowpointe.com website stats, rating, details and status online.Use our online tools to find owner and admin contact info. Find out where is server located.Read and write reviews or vote to improve it ranking. Check alliedvsaxis duplicates with related css, domain relations, most used words, social networks references. Go to regular site

sfdc.arrowpointe.com Information

Website / Domain: sfdc.arrowpointe.com
HomePage size:88.068 KB
Page Load Time:0.9808 Seconds
Website IP Address: 64.13.192.85
Isp Server: Media Temple Inc.

sfdc.arrowpointe.com Ip Information

Ip Country: United States
City Name: Culver City
Latitude: 34.017185211182
Longitude: -118.39282989502

sfdc.arrowpointe.com Keywords accounting

Keyword Count
crm0
crm software0
sales force automation0
sfa0
customer relationship management solutions0
contact management0
marketing automation0
customer support0
salesforce.com on-demand0
salesforce.com0
on-demand0
perspectives on salesforce.com0
consulting0
consultant0
methodology0
sforce0
blog1
App Exchange0
AppExchange0
successforce0
customforce0
saas0
software as a service0
force.com0
apex3
visualforce0

sfdc.arrowpointe.com Httpheader

Date: Wed, 11 Mar 2020 23:09:15 GMT
Server: Apache/2.4.39
X-Powered-By: PHP/5.6.21
Link: http://sfdc.arrowpointe.com/wp-json/; rel="https://api.w.org/"
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

sfdc.arrowpointe.com Meta Info

64.13.192.85 Domains

Domain WebSite Title

sfdc.arrowpointe.com Similar Website

Domain WebSite Title
webto.salesforce.comSalesforcecom
mcchorus.secure.force.comSalesforcecom
sfdc.arrowpointe.comPerspectives on Salesforce.com
gibneydance.secure.force.comAll Available Events - Salesforcecom
knowledgebase.force.comKnowledgeBase - Salesforcecom
journal.policy-perspectives.orgPolicy Perspectives
powerofus.force.comLogin - Salesforcecom
mema.force.comLogin - Salesforcecom
news.greylock.comGreylock Perspectives
agaperspectives.gastro.orgAGA Perspectives
ccadb.force.comCommon CA Database - Salesforcecom
pre-employ.force.comSite Login - Salesforcecom
class.perspectives.orgPerspectives - Find A Class
frm.force.comAAMCO Login - Salesforcecom
blogs.3ds.com3D PERSPECTIVES | from Dassault Systèmes

sfdc.arrowpointe.com Traffic Sources Chart

sfdc.arrowpointe.com Alexa Rank History Chart

sfdc.arrowpointe.com aleax

sfdc.arrowpointe.com Html To Plain Text

Link Chatter Files to Related Objects November 6, 2012 @ 10:39 am · Filed under APEX Code , Tips By Scott Hemmeter Share I prefer to upload “attachments” to records using Chatter Files vs. the old skool Attachments because… Chatter Files are searchable They still get listed under the Notes & Attachments list for a record I get the nice file previewer (most of my files are PDFs) I can store them once and link them to anything else It’s that last point that is especially cool and cannot be done with regular Attachments. “ Store Once, Link Anywhere ” One major difference, though, between old skool Attachments and Chatter Files is that Attachments would get linked up to the Parent Records too, at least for Standard Objects. This was nice. I could add an Attachment to an Opportunity and see it listed under the Account without needing to do anything special. Chatter Files do not do this. You can manually make it do this, but it’s not automated. Let’s automate this missing feature! Trigger Simple little trigger to gather IDs and call an @future event in a class. Note that the call is wrapped in the IF statment checking to see if we are already in an @future or batch context. For any trigger that calls an @future event, please always wrap the call like this. trigger FeedItems on FeedItem (after insert) { // AFTER INSERT if(Trigger.isAfter && Trigger.isInsert){ List<ID> IDs = new List<ID>(); for (FeedItem fi : trigger.new){ IDs.add(fi.id); } if(!system.isFuture() && !system.isBatch()){ FeedItems.linkChatterFiles(IDs); } } } Apex Class I have the method written to only process a single ContentPost (assuming the UI is being used), but if you want to bulkify, be my guest. What we are doing in the class is gathering the IDs of records we also want to link the file to. For me, I want to link files I post to Opportunities to the parent Account and files I post to Cases to the related Contact and Account. It’s up to you what to link. One important step in there is to gather a list of records the file is already linked to. Towards the end of the code, we remove those IDs from the master list so we do not link them all over again with a new Chatter Post. Take note of the InProcess boolean. This is a technique to prevent recursion. Since our trigger is on FeedItem and our method creates more FeedItems, we don’t want the trigger to keep firing. public class FeedItems { public static Boolean inProcess = false; // Links Chatter Files on certain objects to related objects @future public static void linkChatterFiles(List<Id> IDs) { // Only run for individual posts of files if(IDs.size() == 1 && inProcess == false){ inProcess = true; // turn on so we don't do recursive loops List<FeedItem> FIsToInsert = new List<FeedItem>(); // list we will be inserting for (FeedItem f: [select id, type, RelatedRecordId, parentId, title, body from FeedItem where id in:IDs and type = 'ContentPost']){ // Verify fields that we cannot use to filter SOQL if (f.RelatedRecordId == null) { continue; } // Get ContentVerion record ContentVersion cv = [select id, ContentDocumentId from ContentVersion where id = :f.RelatedRecordId][0]; // Get list of IDs this Content is already linked to so we don't do duplicate posts Set<Id> IDsAlreadyLinked = new Set<Id>(); for (ContentDocumentLink cdl : [SELECT ContentDocumentId, LinkedEntityId FROM ContentDocumentLink where ContentDocumentId = :cv.ContentDocumentId]){ IDsAlreadyLinked.add(cdl.LinkedEntityId); } // Depending on the object, link the content to different other objects Set<Id> IDsToLink = new Set<Id>(); if (String.valueOf(f.parentId).startsWith( Opportunity.sObjectType.getDescribe().getKeyPrefix() )){ Opportunity o = [select id, accountId from Opportunity where id = :f.ParentId limit 1][0]; if(o.AccountId != null){ IDsToLink.add(o.AccountId); } } else if (String.valueOf(f.parentId).startsWith( Case.sObjectType.getDescribe().getKeyPrefix() )){ Case c = [select id, accountId, contactId from Case where id = :f.ParentId limit 1][0]; if(c.AccountId != null){ IDsToLink.add(c.AccountId); } if(c.contactId != null){ IDsToLink.add(c.contactId); } } // Remove the IDs that are already linked so we don't create duplicate posts IDsToLink.removeAll(IDsAlreadyLinked); // Create a new FeedItem for each of the records we want to link to for (ID theId : IDsToLink){ FeedItem newFI = new FeedItem(); newFI.Type = 'ContentPost'; newFI.RelatedRecordId = f.RelatedRecordId; newFI.ParentId = theId; newFI.title = f.title; newFI.Body = f.body; FIsToInsert.add(newFI); } } // end main loop // INSERT if (!FIsToInsert.isEmpty()){ database.insert(FIsToInsert, false); } } // end check for 1 record in trigger } // end of linkChatterFiles method } Test And the Test code. We have a separate method for each object we want to test posting a file to. I should have some asserts in there to test it actually works, but I don’t have those yet. That’s your homework. @isTest private class FeedItems_Test { static testMethod void linkChatterFiles_Oppty() { Account a = new Account(name='test'); insert a; Contact c = new Contact (FirstName = 'Joe', LastName = 'Shmo', AccountId = a.id); insert c; OpportunityStage stage = [select MasterLabel from OpportunityStage where IsClosed = false limit 1]; Opportunity o = new Opportunity(); o.Name = 'TEST'; o.AccountId = a.id; o.CloseDate = Date.today(); o.StageName = stage.masterlabel; insert o; ContentVersion cv = new ContentVersion(); cv.Origin = 'H'; cv.PathOnClient='myFile.txt'; cv.Title ='myFile'; cv.VersionData = Blob.valueOf('I am a file posting to Chatter'); insert cv; FeedItem contentFI = new FeedItem(); contentFI.Type = 'ContentPost'; contentFI.ParentId = o.id; // Opportunity contentFI.RelatedRecordId = cv.id; contentFI.title = 'Content Post'; contentFI.Body = 'Body of content post'; insert contentFI; } static testMethod void linkChatterFiles_Case() { Account a = new Account(name='test'); insert a; Contact c = new Contact (FirstName = 'Joe', LastName = 'Shmo', AccountId = a.id); insert c; Case cs = new Case(); cs.subject = 'Test'; cs.ContactId = c.id; cs.AccountId = a.id; insert cs; ContentVersion cv = new ContentVersion(); cv.Origin = 'H'; cv.PathOnClient='myFile.txt'; cv.Title ='myFile'; cv.VersionData = Blob.valueOf('I am a file posting to Chatter'); insert cv; FeedItem contentFI = new FeedItem(); contentFI.Type = 'ContentPost'; contentFI.ParentId = cs.id; // Case contentFI.RelatedRecordId = cv.id; contentFI.title = 'Content Post'; contentFI.Body = 'Body of content post'; insert contentFI; } } Enjoy! Share Permalink Comments (1) -- UPDATE: Set Defaults for Opportunity Contact Roles (when converting) June 4, 2012 @ 9:34 am · Filed under APEX Code , Tips By Scott Hemmeter Share I’ve had a few people reach out regarding an old post about defaulting Opportunity Contact Roles on a Lead convert. Turns out the trigger on Opportunities is not the best option. This was resolved in the comments by having a trigger on Leads instead, but wanted to give the full update in it’s own blog post with updated code. The code below should work and now includes a Test Class too. Having an AFTER UPDATE trigger on Leads like this is a good way to handle many post-convert needs. Trigger trigger Leads on Lead (after update) { if(Trigger.isAfter && Trigger.isUpdate){ Leads l = new Leads(); l.SetContactRoleDefaults(Trigger.new, Trigger.oldMap); } } Class public class Leads { // Sets default values on the Opportunity and Opportunity Contact Role record created during Conversion. Called on AFTER UPDATE public void SetContactRoleDefaults(Lead[] leads, map<ID,Lead> old_leads) { set<ID> set_opptyIDs = new set<ID>(); // Get Opportunity IDs into a Set if the lead was just converted and an Opportunity was created for (Lead l:leads){ if (l.IsConverted && !old_leads.get(l.id).IsConverted){ if (l.ConvertedOpportunityId != null){ set_opptyIDs.add(l.ConvertedOpportunityId); } ...

sfdc.arrowpointe.com Whois

"domain_name": "ARROWPOINTE.COM", "registrar": "TUCOWS, INC.", "whois_server": "whois.tucows.com", "referral_url": null, "updated_date": [ "2019-11-07 09:41:25", "2019-11-07T09:41:25" ], "creation_date": [ "2004-11-09 17:55:00", "2004-11-09T17:55:00" ], "expiration_date": [ "2020-11-09 17:55:00", "2020-11-09T17:55:00" ], "name_servers": [ "NS1.MEDIATEMPLE.NET", "NS2.MEDIATEMPLE.NET", "ns1.mediatemple.net", "ns2.mediatemple.net" ], "status": [ "clientTransferProhibited https://icann.org/epp#clientTransferProhibited", "clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited" ], "emails": [ "arrowpointe.com@contactprivacy.com", "domainabuse@tucows.com", "dnsadmin@mediatemple.net" ], "dnssec": "unsigned", "name": "Contact Privacy Inc. Customer 0116688535", "org": "Contact Privacy Inc. Customer 0116688535", "address": "96 Mowat Ave", "city": "Toronto", "state": "ON", "zipcode": "M6K 3M1", "country": "CA"