La sécurité des données dans Salesforce partie 3 : accès aux enregistrements, rôles et partage

Troisième et dernière partie de notre série sur la sécurité des données dans Salesforce. Dans un premier temps, nous avons tenté de vous fournir les principaux outils pour protéger votre plate-forme d’un accès externe malveillant (lire). Ensuite, il s’agissait de contrôler l’accès en interne aux objets et aux champs (lire). Dans cet article, nous nous attarderons sur le dernier maillon de sécurité : l’enregistrement.

Continue reading

Sauvegarder ses données dans Salesforce

Ransomware, usurpation d’identité, incendie de datacenter… le risque de perdre définitivement ses données est de plus en plus important. Vous pensez que Salesforce échappe à cette réalité ? N’attendez pas d’être touché et prenez immédiatement des mesures pour mettre vos données en sécurité. Dans cette vidéo et les pas-à-pas qui s’ensuivent, nous vous donnons les clefs pour réussir au mieux vos back up.

Continue reading

La sécurité des données dans Salesforce partie 2 : le contrôle de l’accès aux objets et champs

Si, dans une première partie, nous avons tenté de vous donner quelques outils pour protéger l’accès de extérieur à votre organisation, nous nous focaliserons dans les prochains articles sur la protection des données en interne. Objets, champs, enregistrements : voici les trois niveaux sur lesquels Salesforce permet de placer le curseur de contrôle. Nous nous attarderons ici sur les deux premiers.

Continue reading

La sécurité des données dans Salesforce partie 1 : la politique de mot de passe

Une tarte à la crème pour commencer : “aujourd’hui rien ne doit être plus important dans l’entreprise que la sécurité des données”. Usurpation de login, vol d’informations par un concurrent, ransomware, incendie du datacenter (non, ça, impossible !)… la liste des risques est longue. Le CRM étant bien souvent au cœur du réacteur de la data, en tant qu’administrateur, vous devez être certains que tout est mis en œuvre pour la protéger. Vous commencez à avoir les mains moites et le cœur qui bat ? Nous allons tâcher de vous rassurer dans cette série d’articles.

Continue reading

Faire apparaître les pistes (leads) converties à vos utilisateurs ?

Si vous utilisez la Sainte Trinité “Piste – Compte – Opportunité” sur Salesforce, vous vous êtes forcément rendu compte que les pistes converties semblaient disparaitre de la base, du moins, dans les vues de liste… Cela peut parfois susciter des interrogations de la part de vos utilisateurs. De votre côté, vous pourriez encore avoir besoin d’accéder à ses enregistrements.

En fait, elles ne disparaissent pas; elles sont simplement cachées. Vous avez la possibilité de les faire de nouveau apparaître à vos utilisateurs.

Pour cela, rendez-vous dans Configuration > Profils et choisissez le profil à qui vous souhaitez donner l’accès aux pistes converties. Vous cliquez sur “Modifier” en haut de page. Ensuite, scrollez jusqu’à la partie “Autorisations administratives” et cochez “Afficher et modifier les pistes converties

Vous avez donné accès aux pistes converties.

Attention toutefois, une piste convertie modifiée a posteriori et donc décorrélée d’un contact/compte/opportunité peut entraîner des complications par la suite dans le processus de vente…

Pousser une valeur par défaut dans un champ standard Salesforce

Vous devez continuellement remplir un champ texte standard Salesforce par la même valeur et cela vous agace profondément car qui dit champ standard, dit impossibilité de lui attribuer une valeur par défaut. Avec cette page visualforce, vous avez pouvoir attribuer une valeur par défaut via le bouton “Nouveau”.

Le code à copier/coller dans votre page visualforce (1 champ):

<apex:page standardController="Lead" >
 <script>
      window.top.location.href = '/lightning/o/Lead/new?nooverride=1&defaultFieldValues=Title=Responsable Achat';
  </script>
</apex:page>

Multi-champs :
<apex:page standardController="Lead" >
 <script>
 window.top.location.href = '/lightning/o/Lead/new?defaultFieldValues=champ1=Valeur1,champ2=Valeur2';
</script>
</apex:page>

En bleu, le nom de votre objet (n’oubliez pas le __c pour un objet personnalisé), en orange le ou les champs à qui vous attribuez une valeur par défaut et en gris, la valeur par défaut.

Ajouter un bouton “générer un pdf” sur un objet Salesforce

Dès qu’on débute sur Salesforce, on se rend assez vite compte qu’une fonctionnalité manque cruellement dans l’outil : la génération de documents à partir d’un ou plusieurs objets. Bien entendu, certains éditeurs l’ont bien compris et vous aurez dans l’Appexchange un choix assez large d’outil de ce type. La plupart permettent l’édition de documents en pdf ou word que l’objet soit standard ou custom, l’envoi par mail directement de la plateforme, l’enregistrement immédiat du document en “Notes et Pièces jointes”…. Personnellement, j’ai une préférence pour un éditeur en particulier.

Mais, dans le cas de figure où vous n’avez pas forcément besoin de ces fonctionnalités, et que surtout, vous ne souhaitez payer un abonnement supplémentaire, je vous propose un tutoriel très simple à mettre en place. Il vous permettra de générer un document pdf avec des champs présélectionnés.

<apex:page standardController="Order" 
renderAs="pdf"
    applyBodyTag="false"
    sidebar="false">
    <head>
                <style type="text/css" media="print" height="2cm">
                       @page {
                                 @top-center {
                                       content: element(header);
                               }
                               @bottom-left {
                                     content: element(footer);
                               }
                            }
                                     div.header {
                                      padding: 5px;
                                      position: running(header);
                           }
                       div.footer {
                                display: block;
                             padding: 2px;
                               position: running(footer);
                      }
                                     .pagenumber:before {
                                        content: counter(page);
                       }
                                   .pagecount:before {
                             content: counter(pages);
                        }
                                             </style>
                    
              </head>


<!-- Ref de commande en en-tête et numéro de page en pied-->
           <div class="header">
              <div>Ref {!Order.OrderNumber} </div>
           </div>
           <div class="footer">
                <div><span class="pagenumber"/> / <span class="pagecount"/></div>
          </div>
          <div class="content">
               <p></p>
          </div>
          
<!-- Références de la commande-->
          <table>
          
          <!-- Infos Raison Sociale-->
            <tr><TD width="50%">
                    Temps Additionnel Voyages
                    <br />195 Chemin de Neyron 
                    <br />69140 Rillieux La Pape
                 </td>
                 <TD width="30%">
                 </td>
                                            
          <!-- Infos Client -->
                <TD width="20%">
                <apex:outputText value="{!Order.Account.Name}"/>
                <br /><apex:outputText value="{!Order.Account.BillingStreet}"/>
                <br /><apex:outputText value="{!Order.Account.BillingPostalCode} {!Order.Account.BillingCity}"/>
                <br /><apex:outputText value="{!Order.Account.Mail__c}"/>
                        
                    </td></TR>
                 <tr>                
                <td>&nbsp;</td>
            </tr><tr>                
                <td>&nbsp;</td>
            </tr><tr>                
                <td>&nbsp;</td>
            </tr>
                    
         <!-- Numéro et Date de commande -->
                 <tr><td colspan="3"><CENTER>
                                               <h2> Commande N° {!Order.OrderNumber} </h2>
                                             Date de commande :&nbsp;
                        <apex:outputText value="{0,date,dd'/'MM'/'yyyy}">
                            <apex:param value="{!order.EffectiveDate}" />
                        </apex:outputText>
                                      </center> </td></tr>
            </table>
            
            <br />
            <br />
            
<!-- Commentaire - n'apparait que si le champs Description est rempli-->
            <tr>                
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td class="vtop borderOff" style="width:80%"> 
                <apex:outputPanel rendered="{!NOT(ISBLANK(Order.Description))}" layout="none"><b>Commentaires : </b><apex:outputText value="{!Order.Description}"/></apex:outputPanel>
   </td></tr>
   <tr>
   
            
<!-- Lignes de commande -->
               <td class="vtop" colspan="2">
                    <br />
                    
               <table width="650px" border="1" cellspacing="0" style = "fontweight:bold"> 
              
                     <tr>
                            <th align="center">
                                Nom du produit
                            </tH>
                           <th align="center">
                               {!$ObjectType.OrderItem.Fields.Quantity.Label}
                            </tH>
                            <th align="center">
                                {!$ObjectType.OrderItem.Fields.Unitprice.Label}
                            </tH>
                            <th align="center">
                                {!$ObjectType.OrderItem.Fields.Totalprice.Label}
                            </tH>
                           
                        </tr>
                        
                         
            <!-- Pour chaque ligne de commande -->
                    <apex:repeat value="{!Order.OrderItems}"
                                var="ligne" >
                          <tr>                         
                                    <td align="left">
                                        <apex:outputField value="{!ligne.Nom__c}"/>
                                        </td>
                                    <td align="center">
                                        <apex:outputField value="{!ligne.Quantity}"/>
                                    </td>
                                    <td align="center">
                                        <apex:outputField value="{!ligne.UnitPrice}"/>
                                    </td>
                                    <td align="center">
                                        <apex:outputField value="{!ligne.TotalPrice}"/>
                                    </td>
                          </tr>
                     </apex:repeat>
                             
           
           <!-- total -->
                         <tr>
                            <td class="borderOff" ></td>
                            <td colspan="2">
                                          
                            {!$ObjectType.Order.Fields.TotalAmount.Label}
                            </td>
                            <td align="center"  >
                            <apex:outputField value="{!Order.TotalAmount}"/>
                             </td>  
                        </tr>
                        </table>
                        </td>
            </tr>
            
            <!-- signature -->
            
            <br />
            <br />
            Nom et signature
            
             
</apex:page>

Cette page Visualforce est adaptée à l’objet “Commande”. Si vous souhaitez la mettre en place pour un autre objet, il vous suffit de remplacer tous les termes en bleu par le nom API de l’objet en question et de l’objet enfant/parent (OrderItem dans l’exemple) et ceux en orange par les champs que vous désirez faire remonter (Attention, si ce sont des champs custom, ne pas oubliez de rajouter __c à la fin).

Modèle de fichier pdf obtenu :