|
Feature
|
Workflow
|
Process Flow
|
Visual Flow / Visual Workflow
|
|
Description
|
Workflow allow users to set up criteria and actions
|
Process Flow automates your business processes by providing a
powerful and user-friendly graphical representation of your process as you
build it.
|
Visual Workflow enables you to create flows, which are triggered by
users rather than events
|
|
UI
|
Runs in Background and take the action for ex field update
|
Runs in Background take the action for ex. Post chatter feed
|
Allows user to interact from UI and take input from user.
|
|
Initiated By
|
Triggered by events. For ex. Record save
|
Triggered by events. For ex. Record save
|
Triggered by users rather than events.
For ex. Survey button click on lead object.
|
|
Supported Actions
|
·
Create a task
·
Create an email alert
·
Field Update New
·
Outbound Message
·
New Flow Trigger
|
·
Create a record
·
Update fields on any related record—not just
the record or its parent.
·
Launch a flow—as an immediate or a scheduled
action.
·
Send an email
·
Post to Chatter
·
Submit for approval
·
Call apex methods
·
The process builder doesn’t support outbound
message
|
·
Lookup any object
·
Create Flow variables
·
Do CURD on any object
|
|
Scope
|
Limited to object in context and its master
|
Process Flow is not tied to any object
|
Visual Flow is not tied to any object
|
|
Interface
|
Point and click, multi-screen
|
Drag drop, Single Screen, easy to change & visualize
|
Drag drop, Single Screen, easy to change & visualize
|
|
Scheduling
|
Immediate and scheduled actions
|
Immediate and scheduled actions
|
Only Immediate actions
|
|
Use case
|
Send a web service callout to Inventory management system to update
stock when opportunity close successfully
|
Send a chatter feed to group of users when high value opportunity
stage is changes
|
Wizard for self-help portal if it does not resolve issue then log a
case with all the details.
|
Friday, September 11, 2015
Comparison between Workflow, Process Flow, Visual flow
Tuesday, September 8, 2015
Using NTLM authentication from Salesforce apex
We had requirement of integrating web-services that used NTML authentication from Salesforce.
The whole process of this integration was very interesting and so I thought of writing article which may help someone on how to tackle this type of integration.
Here are points we will cover:
1) What is NTML authentication and how it works
2) How we can use NTML authentication from Apex?
3) If you face any issues how to resolve them?
Ok, Lets start with point #1
1) What is NTML authentication and how it works:
In a Windows network, NT LAN Manager (NTLM) is a suite of Microsoft security protocols that provides authentication, integrity, and confidentiality to users. There are various versions of it NTLMv1, NTLMv2 & NTLM session. Full details of NTLM is out of scope of this article. you can find more details at https://en.wikipedia.org/wiki/NT_LAN_Manager
How it works:
A) The client sends an initial message to the server, advertising certain options or capabilities such as cryptographic algorithm support .
B) The server creates a challenge, c, and returns the challenge and the options or capabilities that it can support to the client .
C) The client computes a function on the challenge, resp = f(c, password), and sends the results to the server, along with the user's textual name and domain .
D)The server looks up the user (by the name passed) and computes the same function, f(c, user's password). If the result matches resp (that is, what the client sent in step C), the passwords are presumed to match, and the user is authenticated.
More Details: https://msdn.microsoft.com/en-us/library/cc239684.aspx
2) How we can use NTML authentication from Apex?
Well its dead simple. Nate Wallace have wrote apex classes that takes care of all over heads and you just need to deploy these classes to your org and use them.
Here is sample code on how to use these classes and give a call to NTLM SOAP service.
String body = 'XML_REQUEST_BODY_XXXXXXXXXXXXXXXXXXXX';
String ep = 'END_POINT_URL_XXXXXXXXXXXXXX';
HttpClient httpObj = new HttpClient('DOMIN_XXXX\\USERNAME_XXXXXX','PASSWORD_XXXXXXXX',True); /* Note two forward slashes between domain and username \\ */
HttpRequest req = new HttpRequest();
req.setBody(body);
req.setMethod('POST');
req.setEndpoint(ep);
req.setHeader('Content-Type','text/xml;charset=UTF-8');
HttpResponse res = httpObj.send(req);
System.debug('Response**:' + res);
System.debug('Response**:' + res.getBody());
This should give you a XML response. Well but what if you did not get valid response... this bring us to next topic
3) If you face any issues how to resolve them?
When working on integration there are generally (at least) two components. First is Server and second is client. In our case our endpoint is server and client is in apex. When we face issue it becomes difficult to identify the issue. To resolve issue we should first decide where the issue is? in client or in server?
To find that out we can use tool like SoapUi to replace our client. SoapUi is tested and trusted tool so when we use it properly we eliminate the possibility of client side issue for ex. incorrect XML.
To use SoapUI with NTLM authentication you need do following:
a) Import WSDL into SoapUI
b) Click on any service and open Request1
c) On left hand bottom side of Request1 there is authorization tab, click on it.
d) Select add new authorization and select type As NTLM and provide the credentials
e) Now you can replace the ? in your Request1 with actual values and click submit request button.
If you get positive response when you use SoapUi then it means that there is something wrong in your client:
Examples of client side issues:
1) Invalid XML
2) Incorrect parameter in XML
3) Invalid Header
4) 401 error : authentication failed due to user name/ password / domain
5) 500 Internal server error due to wrong data
If you get negative response when you use SoapUi then it means that there is something wrong in your Server:
1) 500 Internal server error due long processing time
2) 401 error: network restriction like IP restriction
Conclusion:While working on integration you need to isolation the issue whether its in client or server and then proceed further.
The whole process of this integration was very interesting and so I thought of writing article which may help someone on how to tackle this type of integration.
Here are points we will cover:
1) What is NTML authentication and how it works
2) How we can use NTML authentication from Apex?
3) If you face any issues how to resolve them?
Ok, Lets start with point #1
1) What is NTML authentication and how it works:
In a Windows network, NT LAN Manager (NTLM) is a suite of Microsoft security protocols that provides authentication, integrity, and confidentiality to users. There are various versions of it NTLMv1, NTLMv2 & NTLM session. Full details of NTLM is out of scope of this article. you can find more details at https://en.wikipedia.org/wiki/NT_LAN_Manager
How it works:
A) The client sends an initial message to the server, advertising certain options or capabilities such as cryptographic algorithm support .
B) The server creates a challenge, c, and returns the challenge and the options or capabilities that it can support to the client .
C) The client computes a function on the challenge, resp = f(c, password), and sends the results to the server, along with the user's textual name and domain .
D)The server looks up the user (by the name passed) and computes the same function, f(c, user's password). If the result matches resp (that is, what the client sent in step C), the passwords are presumed to match, and the user is authenticated.
More Details: https://msdn.microsoft.com/en-us/library/cc239684.aspx
2) How we can use NTML authentication from Apex?
Well its dead simple. Nate Wallace have wrote apex classes that takes care of all over heads and you just need to deploy these classes to your org and use them.
Here is sample code on how to use these classes and give a call to NTLM SOAP service.
String body = 'XML_REQUEST_BODY_XXXXXXXXXXXXXXXXXXXX';
String ep = 'END_POINT_URL_XXXXXXXXXXXXXX';
HttpClient httpObj = new HttpClient('DOMIN_XXXX\\USERNAME_XXXXXX','PASSWORD_XXXXXXXX',True); /* Note two forward slashes between domain and username \\ */
HttpRequest req = new HttpRequest();
req.setBody(body);
req.setMethod('POST');
req.setEndpoint(ep);
req.setHeader('Content-Type','text/xml;charset=UTF-8');
HttpResponse res = httpObj.send(req);
System.debug('Response**:' + res);
System.debug('Response**:' + res.getBody());
This should give you a XML response. Well but what if you did not get valid response... this bring us to next topic
3) If you face any issues how to resolve them?
When working on integration there are generally (at least) two components. First is Server and second is client. In our case our endpoint is server and client is in apex. When we face issue it becomes difficult to identify the issue. To resolve issue we should first decide where the issue is? in client or in server?
To find that out we can use tool like SoapUi to replace our client. SoapUi is tested and trusted tool so when we use it properly we eliminate the possibility of client side issue for ex. incorrect XML.
To use SoapUI with NTLM authentication you need do following:
a) Import WSDL into SoapUI
b) Click on any service and open Request1
c) On left hand bottom side of Request1 there is authorization tab, click on it.
d) Select add new authorization and select type As NTLM and provide the credentials
e) Now you can replace the ? in your Request1 with actual values and click submit request button.
If you get positive response when you use SoapUi then it means that there is something wrong in your client:
Examples of client side issues:
1) Invalid XML
2) Incorrect parameter in XML
3) Invalid Header
4) 401 error : authentication failed due to user name/ password / domain
5) 500 Internal server error due to wrong data
If you get negative response when you use SoapUi then it means that there is something wrong in your Server:
1) 500 Internal server error due long processing time
2) 401 error: network restriction like IP restriction
Conclusion:While working on integration you need to isolation the issue whether its in client or server and then proceed further.
Monday, June 1, 2015
Difference between ActionFuction And ActionSupport
Difference between ActionFuction And ActionSupport
Visualforce provides three great components to call
controller methods they are ActionPoller, ActionFuction & ActionSupport. Among
these three components ActionFuction & ActionSupport are very similar and
in most of cases can be used interchangeably. Following is example of same.
VF1– Action Function
=================================
<apex:page controller="exampleCon">
<p><apex:outputText
value="Clicked? {!state}" id="showstate"
/></p>
<apex:outputPanel
onclick="methodOneInJavascript()" styleClass="btn">
Click Me </apex:outputPanel>
<apex:form
>
<apex:actionFunction
action="{!methodOne}" name="methodOneInJavascript"
rerender="showstate">
<apex:param
name="firstParam" assignTo="{!state}" value=""
/>
</apex:actionFunction>
</apex:form>
</apex:page>
VF2 – Action Support
=================================
<apex:page controller="exampleCon">
<apex:form>
<p><apex:outputText
value="Clicked? {!state}" id="showstate"
/></p>
<apex:outputPanel
styleClass="btn"> Click Me
<apex:actionSupport
event="onclick" action="{!method2}"
rerender="showstate">
<apex:param
name="firstParam" value="Yes" />
</apex:actionSupport>
</apex:outputPanel>
</apex:form>
</apex:page>
Controller
=================================
public class exampleCon {
private String state = 'no';
public void setState(String n)
{
state = n;
}
public String getState() {
return state;
}
public PageReference methodOne() {
return null;
}
public PageReference method2() {
state =
ApexPages.CurrentPage().getParameters().get('firstParam');
return null;
}
}
As you can see I can use both
Action fiction and Action support to archive the same functionality. So the question is they truly interchange?
Well the answer is No!
When should I use Action Function
and when to use Action support?
When you want to add ACTION to any
(single) apex component then you should use Action support
When there multiple components
which needs to call controller action then you should use Action Function.
Why?
The reason lies in the
background implementation. When you define Action Support in your VF it generates
AJAX code with function name that call controller method. If you use this in loop
(repeat) this defines multiple JS function with same name which throws error in
JS and your page do not work properly.
In Case of Action Function it is
defined at one place and can be called from many places. So if you have loop (repeat)
in your code then calling code can be repeated in loop and that is why Action Function
should be used with Repeat.
Salesforce Static Code Analysis using codescan.villagechief.com
Salesforce Static Code Analysis .
Like many other sophisticated programming language there is Static Code Analysis tool available by codescan.villagechief.com. This code review tool can give us lots of benefits. I have listed some of them bellow.
• Warning on some governor limits - for ex SOQL in loops
• Coding standards: naming conventions, fields at top of file, etc
• Redundant code
• Code simplification suggestions
• Clean code, less mistakes less bugs
So, now the question is hot to set up Static Code Analysis tool?
There are 2 ways you can use a) Eclips IDE 2) Set up SonarQube Server
Setting SonarQube Server is little tricky and it need licence from codescan.villagechief.com so for now lets focus on how to set up Eclips IDE
Steps to install CodeScan Apex PMD Eclipse Plugin:
1.In Eclipse go to Help -> Install new Software-> use http://codescan.villagechief.com/eclipse/ link to install plugin
2) Select the plugin and click next next...
3) After successful installation of plugin, Go to project Explorer -> Right click on your sales-force project -> ApexPDM -> run ApexPDM
4) To view Codescan result, goto ApexPDM view
5) You can run ApexPDM on specific class also
You can scan your code online.Goto http://codescan.villagechief.com/report/index Paste your class for code analysis
5)
Salesforce oAuth Username Password Flow is security risk?
When user login from the UI, SFDC checks if its first successful login attempt from that machine. If it is true then it asks for addition security code which is sent to your email address. The only exception to this is made when that machine’s IP is in trusted IP range.
Similar additional check is implemented for SOAP API login call. It requires User name, password & security token to get access to any data.
If you consider above security measures then Salesforce oAuth Username Password flow seems vulnerable because you do not need any additional information to call Username Password flow.
I mean you defiantly need client_id & client_secret but anyone can create connected app in developer org and they can bypass the security if they just have user name & password.
Am I missing something?
Subscribe to:
Posts (Atom)




