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 |
crm | 0 |
crm software | 0 |
sales force automation | 0 |
sfa | 0 |
customer relationship management solutions | 0 |
contact management | 0 |
marketing automation | 0 |
customer support | 0 |
salesforce.com on-demand | 0 |
salesforce.com | 0 |
on-demand | 0 |
perspectives on salesforce.com | 0 |
consulting | 0 |
consultant | 0 |
methodology | 0 |
sforce | 0 |
blog | 1 |
App Exchange | 0 |
AppExchange | 0 |
successforce | 0 |
customforce | 0 |
saas | 0 |
software as a service | 0 |
force.com | 0 |
apex | 3 |
visualforce | 0 |
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
sfdc.arrowpointe.com Similar Website
Domain |
WebSite Title |
webto.salesforce.com | Salesforcecom |
mcchorus.secure.force.com | Salesforcecom |
sfdc.arrowpointe.com | Perspectives on Salesforce.com |
gibneydance.secure.force.com | All Available Events - Salesforcecom |
knowledgebase.force.com | KnowledgeBase - Salesforcecom |
journal.policy-perspectives.org | Policy Perspectives |
powerofus.force.com | Login - Salesforcecom |
mema.force.com | Login - Salesforcecom |
news.greylock.com | Greylock Perspectives |
agaperspectives.gastro.org | AGA Perspectives |
ccadb.force.com | Common CA Database - Salesforcecom |
pre-employ.force.com | Site Login - Salesforcecom |
class.perspectives.org | Perspectives - Find A Class |
frm.force.com | AAMCO Login - Salesforcecom |
blogs.3ds.com | 3D PERSPECTIVES | from Dassault Systèmes |
sfdc.arrowpointe.com Traffic Sources Chart
sfdc.arrowpointe.com Alexa Rank History Chart
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"