Version1.31
OVERVIEW
ThisfreeappallowsAdminsandDeveloperstoaddlogmessagesanddebugvariablevaluesin
SalesforceFlows.
WiththeFlowLoggingapp,youcancustomizeyourmessagesandseespecificvalueswithout
compromisingtheintegrityofyourFlow.Noforcederrorsornon-autolaunch-capablescreensto
debugaFlow.Asabonus,youcanhavetheFlowLoggingonlycapturewhentheFlowgoes
sidewaysorwhenadatabasefaultoccurs.
FlowLoggingbyAzimuthDSisamanagedpackageprovidedtoenhanceyourexperiencewith
SalesforceFlow.
INSTALLATION
InstallationoftheFlowLoggingappisatwopackageinstallationprocess:FlowLoggingandFlow
LoggingTemplate.TheFlowLoggingmanagedpackagewillbefoundontheAppExchangeorby
followingthislink:
FlowLoggingbyAzimuthDS
Installtheappforallusers.ThisallowsyourorguserstocreatethenecessaryFlowLogrecords.
Themanagedpackagehas2ProfilesthatcanbeusedtoimplementwheninstallingtoSpecific
Users: AzimuthDSCustomerCommunityLoginUser,AzimuthDSSysAdmin
Next,installtheFlowLoggingTemplateunmanagedpackage(foundbyfollowingthislink:Flow
LoggingTemplatebyAzimuthDS.Thispackageisunmanagedtoallowyoutoopenthe
templateandsaveitasanewFlow(keepreading).
TheonlyotheritemthatmustbeconfiguredistheincludedCustomMetadataTyperecord.In
SalesforceClassicUI,navigatetoSetup-Develop-CustomMetadataTypes.ClickontheManage
RecordslinkforFlowLoggingControlandthenclicktheEditLinkfortheAzimuthDS record.
Twovaluesareimportanthere.
ToturnonFlowLoggingforALLconfiguredFlows,placeacheckintheEnableFlowLogging
field.(NOTE:thisdoesNOTbeginthelogging,itisonlyheretoallowyoutoturnonandoffthe
loggingasyouneedit.TheFlowsmuststillbeconfiguredproperlytoobtainthelogs.)
ToturnonFlowLoggingforONESPECIFICFlow,enterthenameoftheFlowthatyouwishto
debug.TheformatofthenameissimilartoaFlowsUniqueName(iethenameofF-TEMPLATE
-FlowLoggingisF_TEMPLATE_FLOW_LOGGING)whichyouspecifywhenconfiguringaFlowfor
logging({!FlowName}).
CONFIGURINGYOURFLOWSTOLOG(Template)
Oncetheinstallationstepsarecompleted,configuringyourFlowsareprettystraightforward.
TheeasiestwaytoconfigureaFlowforloggingistoopenF-TEMPLATE-FlowLoggingand
IMMEDIATELYSaveAsaNewFlow
Thiswillbeimportantbecause:
A. TheverynextstepsaretodeleteitemsfromthenewFlow.
B. TheonlywaytogetacleanTEMPLATEbackistoreinstallthepackage
NowthatyouhavesavedthenewFlow,letslookattheincludedelements.
InitializeFlowLogUpdateString
Atfirstthisactionwasthoughttobeneededto
initializethestringfortheflow.Thatisnotthecase
andwasremovedfromtheflowpath.Itcanbedeleted.
Thisintroducesthemaininteractivevariableforlogging--FlowLogUpdateString.Thistext
variableiswhatispassedtotheFlowLoggingelementandisrecordedasthelogordebug
string.AlwaysusetheADDoperatorwhenbuildingtheloggingstring.UsingtheEQUALS
operatorwillessentiallyclearFlowLogUpdateString.
Thiselementshowsexamplesofinitializing(clearing)thevariableandhowaplaintextmessage
canbeaddedtothestring.
Itshouldbenotedherethatthisisastring.Assuch,besuretoaddseparatorstopreventyour
messagesfromrunningtogether.Spacesattheendofthestringaretrimmed.(Ourroadmap
includessettingthisupusingTextTemplates).
DELETEORREUSETHISELEMENT.
DELETEDTHIS-DataAccessExample
(OK,itshouldreadDELETETHIS.)
Thiselementisincluded(andshouldbe
deleted)toprovideanexampleofhowa
databaseelementFAULTcanbeconfiguredto
providelogging.
DELETETHISELEMENT.
DELETETHIS-ProcessSteps
Thiselementisincludedtorepresentthevast
numberofotherelementsinyourFlow.
DELETETHISELEMENT.
UpdatetheFlowLogString
Thisexampleshowshow
FlowLogUpdateStringismanipulatedto
provideinformationabouttheFlowatits
currentstate.
FlowLogUpdateStringisbuiltandmaintained
throughouttheFlow.The[[]]charactersare
optional.
Thefirstthreelinesareanexamplebuildup.Thelastlineisanexampleofsinglelineentryofthe
sameinformation.
Itisworthnotingherethatthereareseveralwaystobuildthelogging/debugstring.These
Assignmentelementsprovideacoupleofwaystodoit.
DELETETHISELEMENT.
SetaValue
Thiselementprovidesanotherexampleof
buildingtheloggingstring.Notethelastline
oftheAssignmentswherethevariableis
includedwithtext.Infact,thesecondand
thirdlinescouldhavebeencombinedinto
one:
ThevalueofExampleFlowVariableis
{!ExampleFlowVariable}[[]]
Oreven:
ExampleFlowVariable={!ExampleFlowVariable}[[]]
DELETETHISELEMENT.
SetFlowLogError
ThiselementcapturesanyFAULTand
reportsittotheFlowLogrecord.Settingthe
IsFaultvariabletoTrueallowsFAULTStobe
loggedregardlessofthecontrolrecord
status(assetintheINSTALLATION
process).
DONOTDELETETHISELEMENT.
FlowLoggingDeveloperConsoleDebug
LoggerCall
Thiselementisafuturefeaturetoallow
FlowLoggingstringstobepassedtothe
DeveloperConsoleLog.
Weareworkingonit..
OPTIONALLYDELETETHISELEMENT.
UpdateFlowLogRecord
Thiselementistherealworking
elementofthepackage.Theelementis
actuallyF-FlowLogRecord
ManagementandupdatestheFlow
LogrecordwithFlowLogUpdateString.
Usefultoplaceinstrategicplacesin
yourflowandparticularlyattheend.
(bestpracticeistoonlycallthiselement
onetimeattheendofyourFlow,butit
canbemovedaroundifyouarehaving
troublegettingyourFlowtocomplete.
ThisActionsendsalloftheinformationneededtocreatetheFlowLogrecord.Thevariables
neededforinputtotheelementareconfiguredas:
FlowLogUpdateString-theconstructedlogging/debugstring
FlowName-thenameoftheFlow.Thisshouldbeenteredasthedefaultvalueforthe
variableandshouldtaketheformatoftheUniqueNameusingallcapitalletters(ie
F_TEMPLATE_FLOW_LOGGING)
IsFault-aBooleanvariableusedtoindicatewhethertheloggingistriggeredbyan
elementFAULT
ThecorrespondingInputvariablesonthereferencedFloware
LogModificationString-thestringtobepassedtotheFlowLogrecord
OriginatingFlowName-stringcontainingareferenceusedtotriggerexceptionlogging
whenthegloballoggingfeatureisdisabled.
IsFault-BooleanindicatingwhetheranerroroccurredinthemasterFlowandoverrides
thegloballoggingsetting.
FlowLogRecordID-StringcontainingtheIDoftheFlowLogrecord.Thisispassedas
InputONLYonsecondorsubsequentusesoftheF-FlowLogRecordManagement
element.DONOTUSEONTHEFIRSTORONLYinstanceoftheelement.
ThereferencedFlowreturnsthefollowingavailableOutputs:
FlowLogRecordID-StringcontainingtheIDoftheFlowLogrecord.Thisvariableisused
tomaintaintheintegrityoftheFlowLogrecordonsubsequentcallsoftheelement.
LogResultString-StringcontainingthereturnedfullstringthatwaswrittentotheFlow
Logrecord.
Prettysurethisisntnecessary,butitishereforcompleteness:
DONOTDELETETHISELEMENT.CONNECTSetFlowLogELEMENTTOTHISELEMENTIFYOU
DELETEDFlowLoggingDeveloperConsoleDebugLoggerCall
CONFIGURINGYOURFLOWSTOLOG(ExistingFlows)
IfyouhaveexistingFlowsthatyouwanttoretrofitwithlogging,startbycreatingthefollowing
variables:
FlowLogUpdateString(Text/Private/Default=EmptyString)-theconstructed
logging/debugstring
FlowName(Text/Private/Default=nameoftheFlow)-thenameoftheFlow.Thisshould
beenteredasthedefaultvalueforthevariableandshouldtaketheformatoftheUnique
Nameusingallcapitalletters(ieF_TEMPLATE_FLOW_LOGGING)
IsFault(Boolean/Private/Default=False)-aBooleanvariableusedtoindicatewhether
theloggingistriggeredbyanelementFAULT
FlowLogRecordID(Text/Private/Default=EmptyString)-StringcontainingtheIDofthe
FlowLogrecord.ThisvariableisusedtomaintaintheintegrityoftheFlowLogrecordon
subsequentcallsoftheelement.
FlowLogString(Text/Private/Default=EmptyString)-Stringcontainingthereturnedfull
stringthatwaswrittentotheFlowLogrecord.(optional)
Afteryouhavecreatedthesevariables,addAssignmentelementsintheappropriateplacesto
buildtheloggingstring(FlowLogUpdateString).
AddanAssignmentelementtohandlethefaultmessagesfromelementsintheFlow.
Finally,addtheF-FlowLogRecordManagementelementandconfiguretheInputsandOutputs
asdetailedintheprevioussectionforUpdateFlowLogRecord.
CONFIGURINGYOURPROCESSESTOLOG
HereisanexampleofloggingavalueinaProcessusingthistool:
AnewProcessiscreatednamedP-NewProcesswhichstartswhenarecordchanges.
TheObjectselectedisAccountandtheProcessstartswhenarecordiscreatedor
edited.
AnActionGroupiscreatedwithCheckforNameChangecriteriadefined
AnImmediateActionisdefinedthatupdatestherecordthatstartedtheProcess.
Hereiswhereitgetsinteresting
AnImmediateActionisdefinedtolaunchF-FlowLogRecordManagement
TworowsareaddedtotheActiondefinitiontosettheFlowVariables
OriginatingFlowName-ThisisanyString.IfFlowLoggingExceptionisset,this
stringmustmatch.ThisstringisusedtolabelthenewFlowLogrecord.
LogModificationString-Thebestmethodforpassinginformationtothisvariable
isbyconstructingaStringFormula
NotethattheloggingstringcannotbebuiltinProcessBuilderasitcaninFlow.Duetothis
limitation,anewFlowLogrecordwillbecreatedforeachstringpassedtotheFlowAction.
VIEWINGYOURLOGRECORDS
AnewAppwasinstalledinyourorgtoprovidequickaccesstotheAzimuthDStoolset.Select
theAzimuthDSUtilitiesappandclicktheFlowLogsTab.
SelectingtheAllviewshowsthedefaultListViewfortheFlowLogrecords.Fromhereyoucan
viewandmanageyourFlowLogs.(Wehaveaddedthemulti-select/multi-deletefunctionalityto
theListViewforyourconvenience).
ClickingonaFlowLogrecordrevealsthedebuglogfortheflowinstance.NotetheDate/Time
stampinthenameoftherecordcomparedtotheCreatedByDate/Timestamp.
Alsoworthnoting:becauseyouinstalledthepackageforallusers,younowhavearecordofwho
createdtheFlowLogrecord.Thiscanbeusefulindetermininguserdataentryerrorsorprocess
issues.
DELETINGYOURLOGRECORDS
Asstatedintheprevioussection,youcanmanageyourrecordseasilyfromtheListViewforthe
FlowLogs.
Butwhathappensifyouforgettodisabletheloggingfeature?Neverfear!Azimuthishere!
(Yeahcorny)
TohelpyoumanagetheinevitablebuildupofFlowLogrecords,aprocessandflowareincluded
inthepackagethatwilldeletetheFlowLogrecordsin7days.YoucanseethependingFlowLog
recorddeletionsbynavigatingtoSetup-Create-Workflow&Approvals-Flows.InthePaused
andWaitingInterviewssection,youwillseethelonglistofrecordspendingdeletion.
HELPUSMAKEITBETTER
AzimuthDSwouldlikeyourfeedbackonthistool.Weintendforittobethefirstofmanytoolsto
come,thoughtheyprobablywontallbefreelikethisone.
IfyouhaveissueswithFlowLoggingbyAzimuthDSorwouldlikesomeguidancewithyour
Flows,sendanemailtoflowlogging@azimuthds.com
Ifyoufindthetooluseful,giveusaplugontheAppExchangeandashoutoutintheSalesforce
WorkflowAutomationSuccessCommunity.