Stumbled over the Salesforce Platform Cache the other day and just discovered this nice Trailhead Module on it (Platform Cache Basics). Worth 30 minutes if you’re developing on the platform.
Author: lekkim
Salesforce week 12
Week 12 brought me to Stockholm for 3 days, had 1 day in our new shiny Salesforce office in Hellerup (closer to Copenhagen center) and 1 day working from home. I spent most of the week getting up to speed on Salesforce Lightning and developing mockups for a custom component for the customer. All in all it was a great week where I learned a lot and made significant contribution to the customer project although I’m not officially assigned and billable yet (I’m shadowing).
Salesforce Lightning components are very nice and the component framework is cool although it is also pretty obvious in some areas that it’s new and there are round edges to be considered. Custom Lightning Components can be used in many places but unfortunately there are still areas where they cannot be used so workarounds are needed. Also building custom components can both be done from the supplied Lightning UI widgets and custom markup. For now most of what I’m doing resorts to combining custom markup with Salesforce Lightning Design System (SLDS) – I will have to see how much can and should be done using the built in components.
Much more to learn in the time to come.
Sunday it was time for Super Bowl and my New England Patriots came from behind to overcome a 25 deficit to win by 6 in overtime. What a great game!! Not much sleep but there is always coffee 🙂
What did I learn
- Lots about Salesforce Lightning, Lightning Component and the Salesforce Lightning Design System (SLDS)
- There are wicked many CSS classes in SLDS
- Stockholm is a nice city
- Patriots performed the biggest ever comeback in NFL history to close a 25 points gap to win by 6 in overtime
Status after this week
Trailhead points: 70400
Trailhead badges: 70
Certifications: 4 (Salesforce Certified Administrator, Salesforce Certified Platform App Builder, Salesforce Certified Advanced Administrator, Salesforce Certified Sales Cloud Consultant)
Salesforce week 11
First week on “the job” brought me to the customer I’ll most likely be assigned to in Stockholm. I spent Tuesday to Thursday there and have already delivered something that will go into production in a couple of weeks. Both exciting and scary… The week was basically spent learning about the project, the phases, deliverables and a whole slew of new terminology. All good stuff. Nothing much else to report for now besides Stockholm being a nice city.
What did I learn
- Some customers actually use Salesforce Lightning
- What’s it’s like being thrown in mid-project
- That I will stay at 3 different hotels in Stockholm over the next weeks
Status after this week
Trailhead points: 70400
Trailhead badges: 70
Certifications: 4 (Salesforce Certified Administrator, Salesforce Certified Platform App Builder, Salesforce Certified Advanced Administrator, Salesforce Certified Sales Cloud Consultant)
Salesforce username/password OAuth flow against a sandbox
We had issues today because our OAuth password flow wouldn’t work against one of our sandboxes although the code worked against production. Instead we got this error:
{"error":"invalid_grant","error_description":"authentication failure"}
After Googling and finding this thread it turned out that when using the username/password flow against a sandbox you have to either relax IP restrictions for login or authenticate against test.salesforce.com instead of login.salesforce.com (which of course makes sense).
Below is curl commands for using the username/password flow against a sandbox:
$ curl -d "grant_type=password
&client_id=3MVG9X0_oZyBSzHrnzENlR...JSDz0_MiwxyieREuBhtgZJrF7Lzx8542TFpU_
&client_secret=6235860963257688256
&username=mikkel.heisterberg%40example.com.sandboxname
&password=Passw0rd.SecurityToken" https://test.salesforce.com/services/oauth2/token
{"access_token":"00D6E000000Cpmu!AQ0AQIj4...cGCRqmNnYc6dmgLT09VNoIFXJtHvsPGLqrBs0VlK",
"instance_url":"https://someaddress.my.salesforce.com",
"id":"https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW",
"token_type":"Bearer","issued_at":"1485850119972","signature":"malODIaSULh1siHzdw...pHKjBpWoQcm66UQ="}
$curl -H 'Authorization: Bearer 00D6E000000Cpmu!AQ0AQIj4...cGCRqmNnYc6dmgLT09VNoIFXJtHvsPGLqrBs0VlK'
https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW
{"id":"https://test.salesforce.com/id/00D6E000000CpmuUAC/0056E000000OCcCQAW",
"asserted_user":true,"user_id":"0056E000000OCcCQAW","organization_id":"00D6E000000CpmuUAC",
"username":"mikkel.heisterberg@example.com.sandboxname","nick_name":"mheis",
"display_name":"Mikkel Heisterberg","email":"mheisterberg@foo.com","email_verified":true,"first_name":"Mikkel",
"last_name":"Heisterberg","timezone":"Europe/Paris","photos":{"picture":"https://someaddress.content.force.com/profilephoto/005/F",
"thumbnail":"https://someaddress.content.force.com/profilephoto/005/T"},"addr_street":null,"addr_city":null,"addr_state":null,
"addr_country":null,"addr_zip":null,"mobile_phone":"+45 12345678","mobile_phone_verified":true,"status":{"created_date":null,
"body":null},"urls":{"enterprise":"https://someaddress.my.salesforce.com/services/Soap/c/{version}/00D6E000000Cpmu",
"metadata":"https://someaddress.my.salesforce.com/services/Soap/m/{version}/00D6E000000Cpmu",
"partner":"https://someaddress.my.salesforce.com/services/Soap/u/{version}/00D6E000000Cpmu",
"rest":"https://someaddress.my.salesforce.com/services/data/v{version}/",
"sobjects":"https://someaddress.my.salesforce.com/services/data/v{version}/sobjects/",
"search":"https://someaddress.my.salesforce.com/services/data/v{version}/search/",
"query":"https://someaddress.my.salesforce.com/services/data/v{version}/query/",
"recent":"https://someaddress.my.salesforce.com/services/data/v{version}/recent/",
"profile":"https://someaddress.my.salesforce.com/0056E000000OCcCQAW",
"feeds":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feeds",
"groups":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/groups",
"users":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/users",
"feed_items":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feed-items",
"feed_elements":"https://someaddress.my.salesforce.com/services/data/v{version}/chatter/feed-elements",
"custom_domain":"https://someaddress.my.salesforce.com"},"active":true,"user_type":"STANDARD","language":"en_US","locale":"en_US",
"utcOffset":3600000,"last_modified_date":"2017-01-26T13:49:33.000+0000","is_app_installed":true}
Arlanda Express app
These weeks – and probably through the end of the year – I’m going quite a lot to Stockholm so like any respectable geek I’m trying my best to make my travels more productive and easier to manage. Flying is easy – booking is all online and trips, boarding cards and receipts are managed entirely mobile. Easy. Next was hotels – also easy using existing apps except for the actual check in process.
This Monday I found the Arlanda Express app. Excellent!! Tickets are bought and paid in the app using saved credentials unlocked using a pin code. Once bought a receipt is emailed to you and it can be easily added to Concur for expensing. The ticket and the return ticket is saved in the app so no more stubs to keep track of. Nice.
Quick CLI aliases for Salesforce instance info
Today when at a customer we were trying to figure out the release versions the various sandboxes and development environments and compare this info with the version of the production instance. Of course all this is available from status.salesforce.com but clicking around got a bit tedious so I whipped up a quick set of bash aliases for the Terminal. Since the output is also available as JSON it was pretty easy. First I grabbed the jq JSON parser for bash and then I wrote 4 aliases for bash:
- sf_instance – returns the instance ID (e.g. “na44”) from the hostname. This is useful if you are using a custom domain to access the instance e.g. lekkim-trailhead-dev-ed.my.salesforce.com
- sf_release – shows only the release the instance is on e.g. “Spring ’17 Patch 5.5”
- sf_status – shows release version, whether active or not and type of instance (production, sandbox etc)
- sf_status_raw – returns the raw JSON
Below are examples of usage and the ailases are at github.com/lekkimworld/sf_aliases.
$ sf_help Salesforce CLI actions: ----------------------- - sf_status Shows status for instance ID Syntax : sf_status Example: sf_status na44 - sf_release Shows release version of supplied instance ID Syntax: sf_release Example: sf_release na44 - sf_instance Get instance ID from hostname Syntax: sf_instance Example: sf_instance org62.lightning.force.com - sf_status_raw Shows raw JSON Syntax: sf_status_raw ------------------------ $ sf_instance na44.salesforce.com na44 $ sf_instance lekkim-trailhead-dev-ed.my.salesforce.com eu11 $ sf_release eu11 Winter '17 Patch 18.10 $ sf_release na44 Spring '17 Patch 5.5 $ sf_status eu11 Release Version : Winter '17 Patch 18.10 Active : true Status : OK Environment : production $ sf_status cs85 Release Version : Spring '17 Patch 6 Active : true Status : OK Environment : sandbox
Salesforce week 10
Week 10 it all started to get real… All in all my last quiet week. I actually met my manager in person (she’s based in Amsterdam) and I spent more time playing with the Salesforce platform with a specific focus on Service Cloud, Lightning and Salesforce Lightning Design System (SLDS). I also got my first customer project in Stockholm which will be fun. With the planning on my first customer visits came fun experiments planning flights, hotels etc. All good fun.
What did I learn
- Service Cloud is easy to set up and one can actually do a very nice, full featured, call center implementation in about 1 hour
- The Service Cloud Console is actually not Lightning although it looks pretty similar
- Page Layouts needs to be feed based to look Lightning-like for the Service Console
Status after this week
Trailhead points: 70400
Trailhead badges: 70
Certifications: 4 (Salesforce Certified Administrator, Salesforce Certified Platform App Builder, Salesforce Certified Advanced Administrator, Salesforce Certified Sales Cloud Consultant)
Salesforce week 7-9
Wow! Time is starting to fly by. Week 7 I took vacation and relaxed by taking time off between Christmas and New Years. I got back into the office on Tuesday following New Years Eve and promptly started studying for my Salesforce bootcamp. The bootcamp is in San Francisco and I spent all of week 7 preparing and studying for that. We are very much into gamification as is obvious if you’ve ever visited Trailhead. I flew off to San Francisco on Friday and spent all of Saturday and Sunday settling in and watching a lot of NFL. It was Wildcard Weekend so we had 2 games on Saturday and 2 games on Sunday. Excellent!! It also gave me a good excuse to sit in the bar with my laptop, a beer and NFL. What’s not to like?!
Week 9 was spent in San Francisco for the bootcamp. Monday was Becoming Salesforce which is basically culture emersion and learning about the Salesforce Way including volunteering. Tuesday to Friday was bootcamp with sessions, group assignments and presentations. We also went to go on a tour to the various Salesforce buildings in San Francisco – pretty cool!! In the evenings when we got back to the hotel around 7pm it was hanging out in the bar with the other participants from all over the World (India, Australia, Germany, Netherlands, US, Denmark and the UK to name a few). Then off to have dinner and more beer before bed. All good fun and a great experience. It did rain all week however but we didn’t have time to be outside really so it didn’t matter much.
What did I learn
- When it rains it pours in San Francisco
- Cmd-Enter submits a Chatter post in Salesforce Lightning – so happy as it is sorely missing in Salesforce Classic
- Uber is really cool
- Apparent Embagadero is a pretty long walk from Fishermans Wharf
Status after this week
Trailhead points: 65550
Trailhead badges: 67
Certifications: 4 (Salesforce Certified Administrator, Salesforce Certified Platform App Builder, Salesforce Certified Advanced Administrator, Salesforce Certified Sales Cloud Consultant)
.gitignore for MavensMate
Note to self… Exclude the workspace and project files as well as /config from Git so a .gitignore file should be something iike this:
*-project *-workspace config
So in bash something like:
$ echo *-workspace > .gitignore $ echo *-project >> .gitignore $ echo config >> .gitignore
Salesforce week 6
Again study, study, study… Since last week I completed 2 certifications which takes me to 4 of the 5 I need. The last is Certified Salesforce Service Cloud Consultant which is looking pretty tricky but I have to find some material on the exam. Did my second round of volunteering – felt good. Closing off the year having volunteered 13 hours. Okay I think. Looking into how I can help for a Salesforce project in Africa. Interesting.
From here on it’s xmas, then new years and it’s time to think about other stuff than Salesforce for a while. See you on the other side…
What did I learn
- Take the exam – go for it!
- Sales Cloud certification was trickier than I thought it would be
Status after this week
Trailhead points: 57600
Trailhead badges: 59
Certifications: 4 (Salesforce Certified Administrator, Salesforce Certified Platform App Builder, Salesforce Certified Advanced Administrator, Salesforce Certified Sales Cloud Consultant)