When Salesforce is life!

Tag: Salesforce Page 15 of 24

[Salesforce / ORGanizer] Christmas Release 0.6.5 is live!

A new Christmas gift for my ORGanusers.

Christmas Release 0.6.5 is live!

It’s months I’ve been asked for an ORGanizer Firefox version and, drum roll…it is finally live!

It’s an important milestone: the ORGanizer can now be enjoied on the most widespread browsers.

That’s why I’m here to ask you to register to the ORGanizer beta program: I can track who wants to help me in enhancing our beloved extension, send them early releases (before the official production release), making the ORGanusers a community in our amazing Ohana community!

What’s more?

Increased usage limit

  • 200 total accounts
  • 150 total sync accounts

Conrt SF Id plugin now has a quick action to copy the current SF ID on the clipboard.

Configure all plugin shortcuts from the Options page:

Enhanced Formula plugin now plays correctly on Lightning Experience!

Follow the release notes for more details!

Don’t forget to Support the ORGanizer, the Best Salesforce Extension ever!

[Salesforce Ohana] Movember Cloud: a chat with Paolo Bergamo and the future of the italian Salesforce tech community

Italian Pride

I always say I’m a proud italian nerd.

This doesn’t mean I think everything from Italy is always the best, but I recognize that we, as Italians, can do a lot of beautifull things, from culture (I’m not talking about our politicians…but who does?) to food (I’m talking about spaghetti, but not about my code).

I’m writing this post (with a bit of delay) because I’m really proud of how me and my friends (with a bit of help from amazing people that I’m about to talk about) have organized a wonderful Salesforce Developer & User Group (DUG) few weeks ago in Milan.

This is the poster of the event:

Paolo Bergamo, who are you?

Few months ago (maybe more that a few, actually) I’ve been contacted by Paolo Bergamo, a Salesforce manager that lives in San Francisco and…drum roll. is italian!

At the time of the call I didn’t know who he was, but I was really hubled by the fact that a Salesforce VP wanted to talk with me to understand how Italian Salesforce devs where set up.

We met in person at the Milano Essentials and we felt really close, despite the fact I was (and am) none and he is actually one of the people that makes Salesforce great for its customers and also for us developers.

About 3 months ago Paolo and Nino Guarnacci (Cloud Solution Engineer at Salesforce) came back to me, introducing the possibility to increase and enhance our italian Salesforce technical community, because I was (and luckily still am) the only italian MVP and I was active online, so there is a bunch of italian guys that already has heard my name. They thought I could help them spread Salesforce Ohana in the italian community.

This is something I’m trying to do since I was nominated MVP, but it’s not easy and that’s the reason we’ve set up the Milano Developer Group with my beloved buddies Gianluca Perrone, Tonino Tripodi and Stefano Massoni.

The Movember Cloud Event

What’s the best way to make people come to the Salesforce side and enhance the community?

#1 Sharing amazing trailblazers stories, and Paolo Bergamo was a beautiful example of an amazing life (he’s a close friend with Mark Beniof and worked with Steve Jobs).

#2 Setting up a centralized italian Salesforce dev Community and Nino knows how this job must be done (he was one of the founders of Codemotion).

The Movember Cloud event (the name if deliberately funny) has been a real success: we still don’t have the power to acquire hundreds of people but we had more than 80 people that came to hear about Paolo Bergamo’s life and his funny stories about Mr. Jobs and Mr. Beniof, like when he’s been secretly kidnapped by Apple to develop one of the first Apple Store apps (and it was a Salesforce app) and Steve Jobs told him it was all but shit (seems incredible…but I believe every dev in the world accepts to be told this by Steve Jobs!!), or when Paolo told us that Mark Beniof loves emoticons and usually sends him a funny italian emoticon of a guy that east spaghetti…

I told Paolo to talk freely and he took my word and took the scene for an entire hour, letting people speachless with a lot of inspiring stories about his working life and his career in the Salesforce ecosystem.

This is the full meeting record (only in italian) the covers all the night.

If you want to watch me and Paolo and learn some italian (if you don’t already speak italian), please hit play on this video!

Paolo (and all the swag Paolo and Nino brought) was actually a bait, because we want to make people listen to what me and Nino were planning in the last month: create the very first Salesforce Italian Dev (and Admin) Community.

It is something really amazing that could really increase italian presence in the Salesforce world.

The Ohana Community and Nino Guarnacci

As I said at the event, Italy is full of talented people and I cannot figure out why there is only one MVP…the aim of this community is to leverage italian devs & admins skills and make Italian the biggest country community at Dreamforce 2018!

There is still a long way but Nino has already set up the Ohana.community domain (I cannot believe he got it!!!) and this is the starting point for our efforts!

This will be the focal point of italian Dev & Admins, a place where we can share knowledge and introduce people to the Salesforce world, share people, jobs, frienship and whatever we want.

The only way to start our journey is to send an email to [email protected] providing your name, email, social accounts and wait for the magic to happen (we are still setting up the public community).

The community will be responsible for itself: a commitee will manage the ORG (yes we are setting up a Salesforce Community with Chatter and glitters) and everyone will be given the power to put their hands on it: the more you share and be available to do stuff, the more powers you’ll have in the community!

Here is the full presentation deck presented by Nino.

Next steps?

With the power of the community we want to make the first all italian Slaesforce tech event, but we need your help!

Do you want to help us? join the Ohana Community NOW!

[Salesforce / TheMoreYouKnow] Campaign Member Status Configuration

Disclaimer
This is a “better write it down for the future me” post.

For the TL;DR pals, this is the Github repository.

It was years I wans’t working with Campaigns, so it took me a while to remember a simple thing: you cannot automate
Campaign Member Status configuration with point & click
.

It seems awkward, mostly because you have a Status picklist field on the Campaign Member.

And when you cannot find the New button on the picklist related list of that field you start feeling depressed.

After a while (you don’t really need much time, just google it a bit) you find out there is a wonderful Campaign Member Status object, that holds the details of a specific Campaign’s members statuses.

Then you learn (again) that you need to use the Advanced Setup button (in Classic) or the Campaign Member Status related list (in LEX):

When you add a new value the list of values in the Campaign Member Status is automatically updated:

So the next question is:

How to automate this?

Well, unfortunately you can’t, you have to manually create the Campaign Member Status values on every Campaign you create.

If your users create campaigns often, believe they won’t accept it as a solution!

As a simple solution we can:

  • correlate Campaign Member Status values to Campaign Record Types
  • store Campaign Record Type / Campaign Member Status Value couples inside a Custom Metadata object
  • implement a trigger that executes on campaign create or if its record type changes

CampaignMemberStatusConfiguration__mdt

Name and Label standard fields will not be used to store actual values for our feature implementation, becausr they can only store 40 chars that is definitely less than 80 required for Record Type Developer name and 765 required for Campaign Member Status value (we’ll be using max 255 chars in this implementation).

Campaign Record Types

Custom Metadata values

Apex Code algorithm

The following code, invoked from the Campaign trigger, calculates the new Campaign Member Status objects, removing the old one and creating the new ones.

/**
 * @author Enrico Murru (https://enree.co, @enreeco)
 * @description Creates CampaignMemberStatus records based on custom metadata object configuration
 */
public class CampaignTriggerHandler {
        
    public static void execute(){
        //new statuses to be created / updated (with default or responded)
        List<CampaignMemberStatus> defaultOrRespondedStatuses = new List<CampaignMemberStatus>();
        //new statuses to be created / updated (without default or responded)
        List<CampaignMemberStatus> otherStatuses = new List<CampaignMemberStatus>();
        //statuses to be deleted
        List<CampaignMemberStatus> deleteStatusesList = new List<CampaignMemberStatus>();
        
        //selected campaigns
        List<Campaign> cmpList = new List<Campaign>();
        //record types
        List<ID> rTypesList = new List<ID>();
        
        //select only campaigns that are inserted or that changed their record types
        for(Integer i = 0; i < Trigger.new.size(); i++){
            Campaign nCmp = (Campaign)Trigger.new[i];
            if(!Trigger.isInsert
                && nCmp.RecordTypeId == ((Campaign)Trigger.old[i]).RecordTypeId) continue;
            cmpList.add(nCmp);
            rTypesList.add(nCmp.RecordTypeId);
        }
        
        if(cmpList.isEmpty()) return;
        
        //delete standard statuses
        deleteStatusesList = [SELECT Id, Label, CampaignId, IsDefault, HasResponded 
                              From CampaignMemberStatus 
                              Where CampaignId IN :cmpList
                              Order By Label];
        
        //query record types
        Map<ID, Recordtype> rTypeMap = new Map<ID,RecordType>([Select Id, DeveloperName From RecordType 
                                                              Where SObjectType = 'Campaign'
                                                              and Id IN :rTypesList]);
     
        for(Campaign cmp : cmpList){
   
            //we can do as many query as we want with custom metadata
         for(CampaignMemberStatusConfiguration__mdt cmsc : [SELECT Id, RecordTypeDeveloperName__c, 
                                                            StatusValue__c, SortOrder__c,IsDefault__c, Responded__c 
                                                            FROM CampaignMemberStatusConfiguration__mdt
                                                            WHERE RecordTypeDeveloperName__c = :rTypeMap.get(cmp.RecordTypeId).DeveloperName
                                                            ORDER BY StatusValue__c, IsDefault__c DESC, Responded__c DESC]){

    //gets CMS with same label (avoid duplicates on upsert)
    CampaignMemberStatus oldCMS = null;
    for(Integer ci = deleteStatusesList.size()-1; ci >= 0; ci--){
                    CampaignMemberStatus cms = deleteStatusesList[ci];
     if(cms.CampaignId != cmp.Id) continue;
                    if(cms.Label == cmsc.StatusValue__c){
                        oldCMS = cms;
                        deleteStatusesList.remove(ci);
                        break;
                    }
    }
                                                                
    CampaignMemberStatus newCMS = new CampaignMemberStatus(Label = cmsc.StatusValue__c,
                                                             SortOrder = cmsc.SortOrder__c.intValue(),
                                                             IsDefault = cmsc.IsDefault__c,
                                                             HasResponded = cmsc.Responded__c);
    if(oldCMS != null){
                    newCMS.Id = oldCMS.Id;
                }else{
                    newCMS.CampaignId = cmp.Id;
                }
    if(!newCMS.IsDefault 
                   && !newCMS.HasResponded){
     otherStatuses.add(newCMS);
    }else{
                 defaultOrRespondedStatuses.add(newCMS);            
    }
   }
        }
  //this DML sequence guarantees no conflicts
        upsert defaultOrRespondedStatuses;
        delete deleteStatusesList;
        upsert otherStatuses;
        
    }
}

Find all the details in this Github repository.

[Salesforce] ORGanizer for Salesforce is on the AppExchange!

That’s one small step for [a] man, one giant leap for mankind” (cit.)

It’s with huge pride that I announce that the ORGanizer for Salesforce Chrome Extension has successfully passed the security review and it is finally on the AppExchange!

We’ve just celebrated 1 year since the pubblication on the Chrome Web Store and after 1 month since the request sent to the AppExchange team, we’ve been delivered this awesome gift.

Now we can proudly show this amazing logo:

From now on the ORGanizer for Salesforce Chrome Extension will be listed as a free app on the AppExchange.

A huge thank you to all my Ohana, who constantly supports me in this free-time project: this achievement is your achievement!

Remember that ORGanizer for Salesforce Chrome Extension is a free app, so please share your love and if you can, donate to the cause!

ORGanizer loves you all!

[Salesforce / Chrome Extension] Happy birthday to the ORGanizer: 1 year on the store!

Checking my diary agenda I could not believe: ORGanizer‘s first go live was exactly 365 days ago!

I wanted to share my love and expertise for Salesforce in one single Chrome Extension to be free for all, and after 1 year I receive cheers from my Salesforce pals because ORGanizer helps them successing in their daily tasks!

Here are some quick numbers:

  • 20 releases
  • users from 127 countries
  • 4000 active users ca.
  • 28 new features (7 suggested by you)
  • 47 enhancements (17 suggested by you)
  • 32 bug fix (9 suggested by you)
  • 81500 login actions in the last month
  • 222 daily logins in the last month

The analytics (recently introduced) say that the numbers are rapidly increasing and the adoption rate is getting higher and higher.

The most important number is the active users:

And indicates the number of users that day after day keep getting the ORGanizer on their Google Chrome browsers…and it is incresing day by day, and I cannot be happier!

The ORGanizer is more than the extension itself.

Trying to make it the most amazing Chrome Extension ever, there an ecosystem of side projects and systems to help me achieving this aim.

ORGanizer site

This is the central information repository for the extension.

FAQ page

A complete extension guide updated at every release.

Video guides

Support

Active support site where you can report a bug or suggest a new feature.

This is linked to my Salesforce CRM org where I store all the stuff.
It also uses an Heroku app to send the email used to confirm your identity.

Next Release page

This page contains all features and bugfix in development or developed, that will be release in the next release.
Also this feature is related to my personal ORGanizer CRM org.

Change Log

A list of all features delivered in all releases.

Donations and Swag Store

Donations link and a link to the Swag Store to get some cool ORGanizer swag to allow me keeping the extension free for all.

Live Messages

Live messages to get live data to users about the extension, like unexpected bugs or general info.
I use ORGanizer like you do, so I wanted to put in place a feature to communicate with my ORGanusers.

Online reviews
I received amazing reviews from Salesforce community leaders:

Who made it?
I’m the only person behind the ORGanizer but my dear friend Davide D’Annibale is helping me with all the graphics (I litteraly have not taste in graphics 🙂 ) to get it the most professional appearance it can have!

Amazing feedbacks
What’s the best way to thank all supporters? Let’s show some of the best tweets I got from the web!

[Salesforce / Lightning] Trigger automatic Lightning Quick Action popup close

Few days ago my #AwesomeAdmin buddy Tom Blamire asked me:

“Do you know if I can automatically close a Quick Action popup window after triggering an action that does not require a UI (like downloading something from a Visualforce page)?”

The flow was simple as he asked me: click on a quick action on a standard layout page (with Lightning Experience enabled), trigger something (that can be a call to a Visualforce page or simply a backend elaboration from Apex) and close automatically the popup.

This is the solution: in this case the setTimeout() call was necessary because you need to get a bit “asynchronous”, but if you make an Apex controller callback, you don’t need it.

Thanks to Salesforce Lightning framework it is easy as it seem:

[Salesforce] Mason Frank Salesforce Salary Survey: you play the game!

It’s that time of year again. The annual Salesforce Salary Survey is now open!

Mason Frank, global Salesforce recruiters, have begun collecting responses for the their annual Salesforce salary survey!

The survey is formed through collecting insights from people working with Salesforce all over the world and forms to create a crucial resource for the Salesforce industry.

How much should you be earning in your job?

How do your benefits and perks compare?

Which factors can advance your earning potential?

What is your Salesforce working culture really like?

If you work with Salesforce, helps make the survey as accurate and representative as possible by contributing your answers.

Take the survey and you’ll also be entered for a chance to win either a Nintendo Switch or Apple Watch 2!

The survey should take you no longer than 15 minutes and will close on the 29th September 2017.

Mason Frank will be launching the results at Dreamforce 2017 and your own copy of the report will be sent directly to you.

Thank you for your input and good luck!

[Salesforce] ORGanizer 0.6.2 “Birthday” Release is live!

h1.chapter-title{
font-size:20pt;
}
div.post-content a{
color: blue;
font-weight: bold;
}

Happy Birthday to me!

To party in the best way my birthday, a new ORGanizer release is live!

If you haven’t, try out the ORGanizer for Saleforce Chrome Extension, you’ll never regret!

All new features has been requested by you all guys, the best ORGanusers of all time!

This is a beta and free extension, I encourage you to help me in my effort!

What’s inside?

Login as plugin

The Quick Console shows a the new Login As plugin: it helps you log in as another internal user.

To access it use the CTRL/CMD + SHIFT + 8 shortcut.

This plugin allows you to:

  • Show the User detail page (white button)
  • Login As in a new tab (green button)
  • Login As in incognito mode (red button): only works if extension has incognito mode enabled

SOSL queries

The Quick Query plugin now supports SOSL queries as well.

Each result is handled as a separate record set:

To ease the results view, each section displays the Sobject type.

Sobject fields ID clipper

The Sobject Fields plugin now is related to a new quick action, that you can recall with the CTRL/CMD + ALT + 4 shortcut, which copy the Salesforce Object ID that is present in the url in the following forms:

  • /[SF_ID] (typical Salesforce Classic sobject page)
  • /custom_url?id=[SF_ID] (id passed on the “id” url parameter)
  • #/sObject/[SF_ID] (typical Salesforce Lightning Experiece sobject page)

Change Salesforce API level

You can now select which API version the ORGanizer works with: this allow you to use the latest API level when dealing with sandboxes or preview ORGs.

To access this configuration go to ORGanizer Options page.

Change ORGanizer button position

You can now change the ORGanizer button position on the vertical / horizontal orientation.

For example this configuration:

Leads to:

While this other configuration:

Leads to:

New default ORG icon colors

New default colors has been added to the popup’s ORG icon selection color:

Remeber to share the love and to visit the Swag Store to help me keep the ORGanizer free!

[Salesforce / Einstein] Playing around with apples and Einstein Prediction APIs

The machines are not going to rule humanity…for now.

So don’t be afraid of AI in your daily job as Awesome Developer / Admin / Adminloper.

A new revolution has come in the CRM world and Salesforce leads it as usual.

Einstein is AI brought to our beloved CRM platform, in may ways: enriches your sales decisions, marketing strategies, smartifies your communities and your social behavior.

I know what you are thinking, how can a humble Salesforce developer empower Artificial Intelligence?

Again, afraid be not!

Salesforce conveys a set of APIs for image recognition or text analysis, so you can integrate the power of AI into your application, whether inside Salesforce or not.

What can you do with Einstein APIs?

At the time of writing, you can:

  • Classify images
  • Detect number, size and position of objects inside images
  • Classify sentiment in text
  • Categorize unstructured text into user-defined labels

Read the complete documentation at metamind.readme.io.

In this post I’ll cover an example of how to classify images using Einstein Vision.

Use Case

Can you guess a business use case for this API?

A particulas piece of my fridge just broke down and it is difficult to explain by words which part should be replaced.

Just take a picture of the part and submit to the Einstein Vision engine (properly trained): the backoffice user may now be able to tell the “replacemente department” which part should be sent to the customer.

Another example, my hoven is not working and I don’t remember the model: take a pic, send to Einstein engine, the system can guess the model and execute the proper actions.

In our example we’ll just try to classify apples, not a cool business use case but it effectively shows how the library works.

First configurations

First thing to do is registering for the free Einstein Vision tier.

Go to https://api.einstein.ai/signup, register with your Developer ORG edition (use the Salesforce flow) and then download and save the provided key in the einstein_platform.pem file.

Go to your ORG and create a new Static Resource for this certificate and call it Einstein_Platform: this will be used to generate a JWT OAuth token every time it is needed.

Now create a new Remote Site Setting adding the https://api.metamind.io endpoint (this is the Einstein Vision API endpoint).

Now you are ready to use the provided package.

Before starting you should install the following Apex packages into your ORG (they are open source Einstein Vision wrappers):

Download and install into your ORG the following code from REPO: it’s just 2 pages and 2 classes.

Before starting be sure to change your Einstein APi email address in the EinsteinVisionDemoController:

public static String getAccessToken(){
    String keyContents = [Select Body From StaticResource Where Name = 'Einstein_Platform' limit 1].Body.toString();
    keyContents = keyContents.replace('-----BEGIN RSA PRIVATE KEY-----', '');
    keyContents = keyContents.replace('-----END RSA PRIVATE KEY-----', '');
    keyContents = keyContents.replace('n', '');

    // Get a new token
    JWT jwt = new JWT('RS256');
    jwt.pkcs8 = keyContents;
    jwt.iss = 'developer.force.com';
    jwt.sub = '[email protected]';
    jwt.aud = 'https://api.metamind.io/v1/oauth2/token';
    jwt.exp = '3600';
    String access_token = JWTBearerFlow.getAccessToken('https://api.metamind.io/v1/oauth2/token', jwt);
    return access_token;    
}

Configure the Dataset

This repo has a configuration page (for model training) and a prediction page (see a live demo here ).

Let’s open the administration page named EinsteinVisionDemoAdmin.

In the Dataset URL input copy the following dataset URL: https://raw.githubusercontent.com/enreeco/sf-einstein-vision-prediction-demo/master/dataset/mele.zip.

This ZIP file contains 6 folders: each folder represent a kind of apple (the folder name is the corresponding name) and it contains a list of 40/50 images of that kind of apple (I’m not an expert of apples, so some pictures may not be correct!).

Now press the Create Model Async button: there are 2 kinds of API for this porporuse, one is sync (and accepts zip files of up to 5 MB) and the other one is async (and accepts size of more than 5 MB).

This means that in this example we’ll be using only the async API: the request is taken in charge:

DATASET:

{
  "updatedAt" : "2017-07-11T14:17:33.000Z",
  "totalLabels" : null,
  "totalExamples" : 0,
  "statusMsg" : "UPLOADING",
  "name" : "mele",
  "labelSummary" : {
    "labels" : [ ]
  },
  "id" : 1006545,
  "createdAt" : "2017-07-11T14:17:33.000Z",
  "available" : false
}

Now you can press the button labelled Get All Datasets and Models to watch the upload operation complete:

Datasets: 1

{
  "updatedAt" : "2017-07-11T14:17:37.000Z",
  "totalLabels" : 6,
  "totalExamples" : 266,
  "statusMsg" : "SUCCEEDED",
  "name" : "mele",
  "labelSummary" : {
    "labels" : [ {
      "numExamples" : 38,
      "name" : "red_delicious",
      "id" : 52011,
      "datasetId" : 1006545
    }, {
      "numExamples" : 44,
      "name" : "granny_smith",
      "id" : 52012,
      "datasetId" : 1006545
    }, {
      "numExamples" : 45,
      "name" : "royal_gala",
      "id" : 52013,
      "datasetId" : 1006545
    }, {
      "numExamples" : 42,
      "name" : "golden",
      "id" : 52014,
      "datasetId" : 1006545
    }, {
      "numExamples" : 53,
      "name" : "renetta",
      "id" : 52015,
      "datasetId" : 1006545
    }, {
      "numExamples" : 44,
      "name" : "fuji",
      "id" : 52016,
      "datasetId" : 1006545
    } ]
  },
  "id" : 1006545,
  "createdAt" : "2017-07-11T14:17:33.000Z",
  "available" : true
}

Now we can train our model by copying the dataset id into the Dataset ID input box and pressing the Train Model button: Einstein analyzes the images with its deep learning algorithm to allow prediction.

MODEL:

{
  "updatedAt" : "2017-07-11T14:21:05.000Z",
  "trainStats" : null,
  "trainParams" : null,
  "status" : "QUEUED",
  "queuePosition" : 1,
  "progress" : 0.0,
  "name" : "My Model 2017-07-11 00:00:00",
  "modelType" : "image",
  "modelId" : "UOHHRLYEH2NGBPRAS64JQLPCNI",
  "learningRate" : 0.01,
  "failureMsg" : null,
  "epochs" : 3,
  "datasetVersionId" : 0,
  "datasetId" : 1006545,
  "createdAt" : "2017-07-11T14:21:05.000Z"
}

The process is asynchronous and takes some time to complete (it depends on the parameters passed to the train API, see code).

Press the Get All Datasets and Models button to see the process ending:

Datasets: 1

{
  "updatedAt" : "2017-07-11T14:17:37.000Z",
  "totalLabels" : 6,
  "totalExamples" : 266,
  "statusMsg" : "SUCCEEDED",
  "name" : "mele",
  "labelSummary" : {
    "labels" : [ {
      "numExamples" : 38,
      "name" : "red_delicious",
      "id" : 52011,
      "datasetId" : 1006545
    }, {
      "numExamples" : 44,
      "name" : "granny_smith",
      "id" : 52012,
      "datasetId" : 1006545
    }, {
      "numExamples" : 45,
      "name" : "royal_gala",
      "id" : 52013,
      "datasetId" : 1006545
    }, {
      "numExamples" : 42,
      "name" : "golden",
      "id" : 52014,
      "datasetId" : 1006545
    }, {
      "numExamples" : 53,
      "name" : "renetta",
      "id" : 52015,
      "datasetId" : 1006545
    }, {
      "numExamples" : 44,
      "name" : "fuji",
      "id" : 52016,
      "datasetId" : 1006545
    } ]
  },
  "id" : 1006545,
  "createdAt" : "2017-07-11T14:17:33.000Z",
  "available" : true
}

{
  "updatedAt" : "2017-07-11T14:22:33.000Z",
  "trainStats" : null,
  "trainParams" : null,
  "status" : "SUCCEEDED",
  "queuePosition" : null,
  "progress" : 1.0,
  "name" : "My Model 2017-07-11 00:00:00",
  "modelType" : "image",
  "modelId" : "UOHHRLYEH2NGBPRAS64JQLPCNI",
  "learningRate" : null,
  "failureMsg" : null,
  "epochs" : null,
  "datasetVersionId" : 3796,
  "datasetId" : 1006545,
  "createdAt" : "2017-07-11T14:21:05.000Z"
}

We are almost ready!

Predict!

The only thing you have to do is to open the EinsteinVisionDemo demo passing the above Model Id (e.g. /apex/EinsteinVisionDemo?model=UOHHRLYEH2NGBPRAS64JQLPCNI):

The data set used is not the best dataset out there, it’s been created with the help of Google and a little of common sense, also the number of images for folder is only 40/50, this means the algorithm does not have enough data to get the job done…but actually it does its job!

May the Force.com be with you!” [cit. Yodeinstein]

Page 15 of 24

Powered by WordPress & Theme by Anders Norén