Friday, December 14, 2018

Sneak Peek: Lightning Web Components

With latest announcement of Lightning Web Components, Salesforce development ecosystem (Lightning Platform) moves one step closer to using web standards of UI development. It is definitely quite welcome move, as it helps in learning and utilizing skills which are not confined to Salesforce ecosystem.

You must read this official Salesforce blog post to get more background details on why and what of lightning web components.

Background

User interface development has evolved drastically in past decade. With introduction of AngujarJS (2010), javascript based front end development became more modularized and then with React (2015) it became much faster, lightweight and component driven. So, front end layer is no longer confined to lightweight ui and graphics. Instead, with Single Page Applications (SPA), you can have pretty much an entire application running on browser (serverless).

Web Components

"Web Components is a suite of different technologies allowing you to create reusable custom elements — with their functionality encapsulated away from the rest of your code — and utilize them in your web apps." - Mozilla

In short, prior to web components, one had to utilize an external library/ framework (like Angular, React etc.) and build your application on top of it. So essentially, your application runs on top of the external library/ framework and which in turn runs on the browser.


With latest innovations within web development world and addition of custom elements, shadow DOM (don't confuse with virtual DOM), and content template element, browsers are now equipped to execute custom web components themselves, without needing any external library.



It can be related to running a video using HTML video component vs using Adobe Flash for running videos (not quite literally).

Lightning Web Components


Lightning web components, leverages these new web standards (or browser improvements) and allows developers to create web components which can work within Salesforce Lightning platform.

Remember, web components allow you to combine UI and processing. To create a web application, you still need security, access to server services/ data. This is where Lightning web components come into place. Salesforce Lightning web components provides these additional capabilities (security, lightning data service). With these, we can create standard web components which can interact and work with Salesforce Lightning platform.

Additionally, lightning web components can leverage lightning base components (already built on web components), enhancing overall application performance.

Lightning components vs Lightning web components

Usage

Similar to custom lightning components, lightning web components can be utilized to create standalone components which can be embedded within
  • Lightning Applications
  • Custom lightning components
  • Visualforce page (using lightning out)
  • Lightning components *
* Info: I am able to embed lightning web component within a custom lightning component and then embed this custom lightning component within lightning community page. Awaiting more details around LightningComponentBundle targets

Custom Lightning Components vs Lightning Web Components

So, what is the difference between Custom Lightning components (something that has taken a significant portion of everyone's time in past 3-4 years) and Lightning Web Components. One word answer is Framework.

Lightning components utilize Aura framework for development and execution of Lightning components. Aura framework can be placed in same stack as Angular, React, as it provides the nuts and bolts to run your lightning components.

Lightning web components, on other hand utilize browser provided features for general component scaffolding along with Salesforce Lightning web components framework (which provides features related to security, service integration and base lightning components). As a large portion of this is now native within browser, there is an obvious cost saving in terms of processing overhead.

To put it simply, in above infographic, the blue blocks represents the custom layers running on top of browser (javascript engine) to make a lightning components work. In middle-left you can see a big chunk which represents Aura framework (custom). On middle-right, the orange block, represents the web component implementation within Browsers (native).

Advantages

As lightning web components utilize more of native browser features and capabilities they are:
  1. Compliant to web standards
  2. Lightweight
  3. Memory efficient
  4. Fast
  5. Easier to learn and Transferable knowledge

Considerations

For most part, all mainstream browsers support these web standards. However, there is still come catching up to do. For e.g. Edge still do not fully support all these web standards (totally clueless about IE's support for these standards). So, if your organization still uses one of the older browsers or older versions, Lightning web components may not be useful right away.

(Update Dec 15): As pointed out by Diego Ferreiro Val, Lightning web components works on all mainstream browsers, down to IE11.

For more details on browser support of web components, refer https://developer.mozilla.org/en-US/docs/Web/Web_Components#Browser_compatibility

Open questions

There are still some unanswered questions here:
  • As we know Lightning Experience itself is built on top of Aura framework. Is Salesforce planning to re-write entire Lightning experience with newer Lightning web components? I'm sure the additional performance and memory efficiency will be more than welcome
  • Would lightning web components become latest de-facto of publishing packages on AppExchange?
  • More importantly, with server side rendering of visualforce pages and client side handling of lightning web components, can there is a mixed model to utilize best of both the worlds?
  • Most important, would it help load lightning experience home page faster? (pun intended)

Further Learning

For most part, as Lightning web components utilize HTML web components, documentation for that can be found fairly easily.

Following are few learning resources:

https://www.webcomponents.org/introduction

https://developers.google.com/web/fundamentals/web-components/customelements

Saturday, December 1, 2018

Lightning: Generate PDF within Lightning Experience with Salesforce Data

Some time back I posted a solution to generate PDF from Lightning components using in-memory data.
Post url: http://www.vermanshul.com/2017/07/lightning-generate-pdf-from-lightning.html

It was developed for a specific scenario, wherein we need to generate PDF where:
  1. User interface is Salesforce classic
  2. Initiated via Lightning Component
  3. Data doesn't exist within Salesforce and is completely in-memory
As complex and tricky this situation was, we did end up finding a stable and equally tricky solution.

However, I realize that there are still lack of solutions (or maybe my search skills are downgrading) to generate and automatically download PDF document from Lightning Experience, without using any lightning components, wherein data exists within Salesforce. You can use the earlier solution in that case, but it will be an overkill.

There are various solutions available to generate PDF from javascript. But, I still think the plain old method of converting HTML to PDF (via visualforce PDF generation utility provided by Salesforce) is a better solution, due to sheer control over the end result.

So, I ended up creating another quick solution to generate PDF documents from Salesforce.

Generate PDF within Lightning Experience with Salesforce Data


This simple solution entails adding a custom action to an object and embedding the button within object view.

 
Steps:
  1. Create a visualforce page with page attribute renderas = "pdf" (sample code below)
  2. Add a Quick Action "Generate PDF" for required object:
    • Action Type: Visualforce
    • Visualforce Page: GeneratePDF.page
  3. Go to Lightning App builder to add the action to detail view of Object

Code:

Automatically download PDF from Lightning Experience

Now, the above solution does allow you to generate PDF. However, it's not a good user experience. Wouldn't it be better, if the PDF is automatically downloaded with a defined name.


Steps:
  1. Create new page to initiate PDF page download (code below)
  2. Modify quick action "Generate PDF" created in previous step and set Visualforce page to DownloadPDF.page
That's IT!!

Code:





Thursday, November 15, 2018

SFDX Utility - Easy to use Command Line Wizard

As you would already know, SFDX is Salesforce utility for improved build management and development activities. It is definitely a big leap in terms of bringing Salesforce development practices in line with common delivery and development processes.

However, I believe non-admins, new developers and most of folks who love browser based development will be puzzled, as they now have to move to a not-so-good-looking command line screen to run their commands. Not to mention, they need to remember these commands and all their options.

Who is it for?

This utility (currently) caters to teams/ developers who are yet not using scratch org for their development. I consider you are familiar with managing package.xml to ensure you have your build manifest ready.

What is the need?


  1. Eases pain of entering common development commands (retrieve, deploy, build)
  2. With one time config, you'll be sure you are not messing up with instances
  3. Ensure you or your team follows same process


What does it do?

  1. Retrieve - it performs following steps for each retrieve cycle
    • retrieves components, as per src/package.xml file
    • unzips zip file generated by SFDX
    • copies downloaded components to src folder
    • deletes temporary files
  2. Deploy - allows user to specify username for instance
  3. Test Build - runs a quick validation deployment on a pre-defined build environment/ sandbox

Technical Details

This utility is a windows batch script and tested only on Windows 10, but should work on older windows machines as well (unless you are still using windows 95).

This is a command line utility available for:
  1. Windows machines (tested on Windows 10) - use ctksfdx.bat
  2. *Nix machines (tested on Linux Mint 18.02) - use ctksfdx.sh

Setup

Follow these instructions for each client/ project setup, and you'll not have to enter long SFDX commands again and again.

Setup

(This setup is to be repeated for each client/project)
  1. Copy utility within project folder (https://github.com/CynoteckLabs/SFUtilities/tree/master/CTKSFDX)
  2. Setup configurations within utility (explained below)

Example folder structure



Configure utility

Within configuration section of utility (batch file) setup following:
  1. DEV - define username of development sandbox (line no. 13)
    SET DEV=
  2. BUILD - define username of build test sandbox (line no. 16)
    SET BUILD=

Optional settings:
  1. Retrieve wait period - setup time interval in minutes, utility should wait for retrieve operations to complete
  2. Deploy wait period - setup time interval in minutes, utility should wait for deploy/ built test operations to complete

How to use it?

Remember, this is to reduce complexity and effort for repititive tasks, so all you have to do is fire command ctksfdx

That's it!! 

Utility will give you options to choose.

Remember, to keep it really simple and safe, deploy option needs you to provide username of the org where you want to deploy.

[Update Nov 21, 2018] Added shell script utility for *nix systems.

Friday, November 24, 2017

Quick Tips: 6 Hidden Salesforce Gems you may not be using

Salesforce is undoubtedly a leader in cloud CRM and has an immensely rich set of features and capabilities. Yet, I've come across several Salesforce customers who are not quite familiar with all the capabilities of Salesforce. As I see it, it not only shadows the value that an organization can get from its Salesforce investments, but sometimes it also leads to additional costs or delays. Not to forget, you are probably already paying for some or all of these features, but may not be using them.

So, here is a quick list of some awesome Salesforce features which are sometimes overlooked, but are worth looking into. Do keep in mind that some of these feature depend on user licenses and Salesforce instance type you are using. For more information refer to Salesforce documentation to get complete information on these features.

Force.com Sites

Do you know you can host a whole website (yes public facing) from within your Salesforce instance. It's often not marketed a lot currently. But, it is truly available with really cool features like:

  • URL Rewriter - helps you to setup readable (search engine friendly) page URLs, instead of having page URLs embedded with record id
  • Website analytics - simply provide a Google Analytics tracking code and have complete analytics out of the box
  • Seamless data access - being hosted by same salesforce instance, you have the flexibility to display your data

Salesforce1

In today's world, I don't think there would be many people in the business world who don't use a smartphone. To give it it's worth, it is a handy tool and definitely enhances productivity (unless you indulge in other wasteful activities). Salesforce allows it's users (license needed) to download and install its mobile app on your smartphone (iOS and Android). With that you can connect to your specific salesforce instance, view/ create/ update your data right from your mobile. It definitely helps to ensure that you have access to your data when you are on the move. Following are few nifty features:

  • Analytics - you do get those beautiful dashboards within mobile as well
  • Calendar - can view all your 
  • Chatter - helps you to collaborate with your teammates and ensure you don't miss out on any updates
  • Offline data access - probably the most undermined feature. This helps you to access your data, even when you don't have an internet connection. You would definitely not know it's importance until you need it

Analytics Snapshot

We often create beautiful reports within Salesforce and share meaningful data insights with business. However, one of the pain points is that all the reports we see within salesforce are transactional i.e the reports are driven by the records that exist within Salesforce.

Analytics snapshot provides us the capability to take a snapshot of a report data as per defined interval and then use it for future reporting needs. So, even if the original data is no longer within salesforce, your reports can still show those details (from data stored within analytics snapshot). It is a very handy tool when you have to deliver trend reporting or even some general reports which need data from extended time periods.

Service/ Sales cloud console

I'm sure you would have at least heard about it, if not using it already. I wanted to include this feature in here, as I consider that this is one of the most important feature for sales/ service users when it comes to enhancing user productivity. In short, it is a "rapid action screen, to access more data faster". Some of its features and hidden pearls within it are:

  • Tabs - access multiple records at same time via tabbed interface
  • Highlights - access key information at top of the record, without having to scroll down
  • Quick actions - allows you to access standard and custom functionalities like live agent, knowledge, recent items, CTI (Computer Telephony Integration) from one screen
  • Macros - pre-define most used actions with keyboard combinations. You would not realize how handy it is to close a tab by pressing "C" instead of moving a mouse to close button and click on close button
  • Sidebars - When you think you are short of screen space, you can have sliding sidebars popping in from left and right, to show that additional piece of information you may need, without having to switch a browser tab
  • Custom components - (this is one is powerful) Salesforce lets you create your custom console components and embed them within Sales/ Service cloud console. We built a nifty notification tool, equipped with push notification and highlight mechanism to mass alert entire call center in case there is some information to be broadcasted

Ideas

This is also considered as the secret sauce of Salesforce's early success. A very simple yet elegant tool to allow your customers to speak to you and let them know that they are being listened. Salesforce has really learned and implemented really cool features submitted as ideas by the community. It does its customers to use ideas for their clients as well. So, as an organization, you can enable IdeasExchange of your own wherein you can accept new ideas, evaluate them and then progress them as needed.

Omni-channel

We all want to have completely streamlined and automated processes wherein the data is flowing efficiently towards its logical closure. For instance, in Sales, we want the leads to start flowing as soon as we receive them and progress them to closure or like in Customer Service, you would like to automatically route incoming customer service requests to agents and bringing them to closure, without any delays. A few years back, such requirement was delivered via AppExchange apps or creating custom functionalities.

Recently, Salesforce launched its Omni-channel feature which provides the capability to automatically route required records (standard as well as custom) to required agents, while allowing you to specify various rules:

  • Agent selection can be done based on most available agent or 
  • Work assignment can be based on work characteristics/ nature by assigning a specific weight to a record, you can ensure that you do proper load balancing within a team
  • Prioritize work on basis of nature/ channel

Bonus, one more point, which may not be that unknown, but definitely quite underestimated. I added this additional point to emphasize it's importance in maintaining a truly stable and robust Salesforce environment.

Sandbox

Last but not the least. Most of the Salesforce developers know about sandboxes as that is where they can develop their custom functionalities. However, quite often I've seen Administrators making changes to live environment. However enticing and powerful it may seem, it is definitely not a recommended approach. Imagine, you adding a validation rule for one team, which disrupts processes for other teams. It's not impossible and happens more time than you may think.
So, as I always like to say, better safe than sorry.

Sandboxes can be considered as test instances of Salesforce. They can be created from a production org and on creation, they include all configurations, settings, and code from production. There are various types of sandboxes which serve different purposes. As a good practice, it's always recommended to make any changes to a sandbox first, test and verify them and only upon thorough verification, deploy changes to production. Following are currently available sandbox types:

  • Developer - Most basic of it all, used for code/ configuration development. Data storage limit is 200MB.
  • Developer Pro - Same as Developer but data storage limit is 1GB
  • Partial Copy - Allows you to copy some data from production instance. Data storage limit is 5GB
  • Full - Brings all production data to the sandbox. Data storage limit is same as that of your production instance

Tuesday, October 31, 2017

Quick Tips: Salesforce default Images

Well, I'm sure a lot of you still rely on using out of the box salesforce images for displaying quick icons within formula fields or even using them within your Visualforce pages. Lately, I realized that a lot of earlier resources are no longer accessible, so I tried to quickly extract all images from Salesforce CSS files and provide a quick reference here.

Please note, I've referenced all images from SF servers directly, so if anything changes, the image should stop rendering here. As these images are completely controlled by Salesforce, and in case they change anything, it might lead to image not being accessible.

Image pathImage
/img/func_icons/arrowright10.gif
/img/google/gmail_M_icon.gif
/img/func_icons/ispan12.gif
/img/func_icons/schedReport34.gif
/img/func_icons/util/dialogClose16.gif
/img/func_icons/util/rescale11.gif
/img/overlaypointer.gif
/img/msg_icons/confirm16.png
/img/msg_icons/confirm24.png
/img/msg_icons/confirm32.png
/img/msg_icons/securityconfirm48.gif
/img/msg_icons/error16.png
/img/msg_icons/error24.png
/img/msg_icons/error32.png
/img/msg_icons/securityerror48.gif
/img/sprites/master.png
/img/msg_icons/info24.png
/img/msg_icons/info32.png
/img/msg_icons/securityinfo48.gif
/img/msg_icons/warning16.png
/img/msg_icons/warning24.png
/img/msg_icons/warning32.png
/img/msg_icons/securitywarning48.gif
/img/func_icons/cal/dp_left.gif
/img/func_icons/cal/dp_left.gif
/img/func_icons/cal/dp_right.gif
/img/func_icons/cal/dp_right.gif
/img/x.gif
/img/alohaSkin/closeX.png'
/img/loading32.gif
/img/alohaSkin/info_sprite.png'
/img/oocss/box_faq_folded_corner.png
/img/sprites/callout_arrows.png
/img/sprites/callout_arrows_guided_tours.png
/img/func_icons/util/selectArrow12.gif
/img/alohaSkin/sync.png
/img/loading.gif'
/img/func_icons/util/search16.png"
/img/alohaSkin/search_clear_sprite.png'
/img/paginationArrows.gif'
/img/func_icons/util/recycle.gif
/img/func_icons/util/datePicker16.gif
/img/func_icons/util/escalation16.gif
/img/func_icons/util/print20.gif
/img/func_icons/util/alert16.gif
/img/func_icons/util/checkmark16.gif
/img/group_event.gif
/img/double_arrow_up.gif
/img/double_arrow_dwn.gif
/img/func_icons/util/colorPicker16.gif
/img/arrow_dwn.gif
/img/arrow_lt.gif
/img/arrow_rt.gif
/img/arrow_up.gif
/img/icon/unresolved16.png
/img/func_icons/util/escalation16.gif
/img/func_icons/util/escalation12.gif
/img/func_icons/util/mailCloseEnv16.gif
/img/func_icons/util/mailOpenEnv16.gif
/img/func_icons/util/mailFrontEnv16.gif
/img/func_icons/util/editLayout20.png
/img/func_icons/util/alert16.gif
/img/func_icons/util/checkmark16.gif
/img/func_icons/util/print20.gif
/img/func_icons/util/print20.gif
/img/func_icons/remove12.gif
/img/func_icons/remove12_on.gif
/img/func_icons/util/dialogClose16.gif
/img/func_icons/util/lookup20.gif
/img/func_icons/closeSprite16.gif
/img/func_icons/util/search20.gif
/img/func_icons/util/trash20.gif
/img/func_icons/util/combobox20.gif
/img/func_icons/util/customize20.gif
/img/func_icons/util/editLayout20.png
/img/func_icons/util/link20.gif
/img/func_icons/videoPlay.png
/img/dcm/menuArrow_sprite.gif
/img/alohaSkin/help_orange.png
/img/alohaSkin/info_sprite.png
/img/alohaSkin/help_blue.png
/img/alohaSkin/help_black.png
/img/func_icons/arrowright10.gif
/img/google/gmail_M_icon.gif
/img/func_icons/ispan12.gif
/img/func_icons/schedReport34.gif
/img/func_icons/util/dialogClose16.gif
/img/func_icons/util/rescale11.gif
/img/overlaypointer.gif
/img/msg_icons/securityconfirm48.gif
/img/msg_icons/error16.png
/img/msg_icons/error24.png
/img/msg_icons/error32.png
/img/msg_icons/securityerror48.gif
/img/msg_icons/securityinfo48.gif
/img/func_icons/cal/dp_daysbg.gif
/img/func_icons/cal/dp_left.gif
/img/func_icons/cal/dp_right.gif
/img/x.gif
/img/alohaSkin/help_grey.png
/img/alohaSkin/closeX.png'
/img/sort_desc_arrow.gif
/img/sort_asc_arrow.gif
/img/arrow2_picklist_left.gif
/img/arrow2_picklist_right.gif
/img/func_icons/util/checkmark16.gif
/img/move_left.gif
/img/move_right.gif
/img/move_up.gif
/img/move_down.gif
/img/move_left_off.gif
/img/move_right_off.gif
/img/move_up_off.gif
/img/move_down_off.gif
/img/analytics/reportbuilder/icons/bucket.png
/img/analytics/reportbuilder/icons/bucket.png
/img/analytics/runpage/cross_filter_icon.png
/img/analytics/runpage/multiblock_icon.png
/img/tab/blank_bg.gif
/img/tab/arrow.gif
/img/tab/arrowWhite.gif
/img/cursors/col-collapse.cur
/img/cursors/col-expand.cur
/img/sidebar/LNav_twisty_opened.gif
/img/sidebar/LNav_twisty_closed.gif
/img/sidebar/LNav_handleBG.gif
/img/bgTop.gif
/img/classic_miniheader_bg.png
/img/newStar.png
/img/bgButtonSync.png
/img/func_icons/util/lock12.gif
/img/func_icons/util/pencil12.gif
/img/func_icons/util/lock12.gif
/img/func_icons/util/pencil12.gif
/img/func_icons/util/ileUndo16.gif
/img/accountsSplashBg.gif
/img/campaignsSplashBg.gif
/img/casesSplashBg.gif
/img/contactsSplashBg.gif
/img/contractsSplashBg.gif
/img/dashboardsSplashBg.gif
/img/documentsSplashBg.gif
/img/forecastsSplashBg.gif
/img/leadsSplashBg.gif
/img/opportunitiesSplashBg.gif
/img/portalsSplashBg.gif
/img/productsSplashBg.gif
/img/reportsSplashBg.gif
/img/solutionsSplashBg.gif
/img/cal/addNew_off.gif
/img/cal/addNew_on.gif
/img/cal/icon_nodrop.gif
/img/func_icons/util/recycle.gif
/img/func_icons/util/recycle.gif
/img/func_icons/util/print20.gif
/img/func_icons/remove12.gif
/img/func_icons/remove12_on.gif
/img/func_icons/util/dialogClose16.gif
/img/func_icons/util/lookup20.gif
/img/func_icons/closeSprite16.gif
/img/func_icons/util/alert16.gif
/img/func_icons/util/checkmark16.gif
/img/func_icons/util/blog20.gif
/img/func_icons/util/blogAdd20.gif
/img/func_icons/util/dependency20.gif
/img/func_icons/util/export20.gif
/img/func_icons/util/search20.gif
/img/func_icons/util/trash20.gif
/img/group_event.gif
/img/double_arrow_up.gif
/img/double_arrow_dwn.gif
/img/func_icons/util/combobox20.gif
/img/func_icons/util/combobox20.gif
/img/func_icons/util/colorPicker16.gif
/img/arrow_dwn.gif
/img/arrow_lt.gif
/img/arrow_rt.gif
/img/arrow_up.gif
/img/func_icons/util/datePicker16.gif
/img/icon/unresolved16.png
/img/func_icons/util/escalation16.gif
/img/func_icons/util/escalation12.gif
/img/func_icons/util/mailCloseEnv16.gif
/img/func_icons/util/mailOpenEnv16.gif
/img/func_icons/util/mailFrontEnv16.gif
/img/func_icons/util/customize20.gif
/img/func_icons/util/customize20.gif
/img/func_icons/util/editLayout20.png
/img/func_icons/util/link20.gif
/img/func_icons/util/link20.gif
/img/func_icons/videoPlay.png
/img/func_icons/videoPlay.png
/img/dcm/menuArrow_sprite.gif
/img/twistySubhDown.gif
/img/twistySubhRight.gif
/img/arrowDown.gif
/img/arrowRight.gif
/img/sprites/calendar.gif
/img/cal/header_bkgd.gif
/img/func_icons/cal/leftArrow.gif
/img/func_icons/cal/rightArrow.gif
/img/chatterfiles/chatterfiles16_sprite.png
/img/alohaSkin/searchtoggle_arrow.png
/img/msg_icons/warning24.png
/img/alohaSkin/help_grey.png
/img/sprites/tree.gif
/img/search_dismiss.gif
/img/help/helpOrbs.gif
/img/staleValue.gif
/img/google/talk_resize_bar.gif
/img/func_icons/util/search16.png
/img/func_icons/closeSprite16.png
/img/msg_icons/warning16.gif
/img/chatterfiles/chatterfiles16_sprite.png
/img/sync.gif
/img/colTitle_uparrow.gif
/img/colTitle_downarrow.gif
/img/colHeader_bg.gif
/img/permissions_deny16.gif
/img/permissions_confirm16.gif
/img/paginationArrows.gif
/img/func_icons/util/selectArrow12.gif
/img/sales/forecasting/rightArrowEnabled.png
/img/sales/forecasting/leftArrowEnabled.png
/img/sales/forecasting/rightArrowDisabled.png
/img/sales/forecasting/leftArrowDisabled.png
/img/feeds/follow_sprite.png
/img/feeds/follow12.png
/img/chatter/topicIconBlue.png
/img/chatterservice/btnArrow_sprite.png'
/img/chatter/sprites/sprite_images/chattersupersprite.png?v=194-2
/img/community/setup/communitySetup_sprite.png
/img/networks/cmcsprite.png?v=194-1"
/img/networks/entityTabSemiTransGradient.png"
/img/alohaSkin/addTabs.png
/img/alohaSkin/sync.png
/img/alohaSkin/togglePill_bg.png'
/img/alohaSkin/listtoggle_icons.png'
/img/alohaSkin/sortArrows_sprite.png
/img/alohaSkin/btn_sprite.png'
/img/chatter/lookupSearchHover.png
/img/networks/cmcsprite.png?v=196-1"
/img/icon/products32.png
/img/icon/products16.png
/img/icon/products24.png
/img/icon/campaigns32.png
/img/icon/campaignmember32.png
/img/icon/campaignmember16.png
/img/icon/campaignmember24.png
/img/icon/console32.png
/img/icon/console16.png
/img/icon/console24.png
/img/icon/contracts32.png
/img/icon/custom16.png
/img/icon/dashboards16.png
/img/icon/dashboards24.png
/img/icon/documents32.png
/img/icon/documents24.png
/img/icon/forecasts32.png
/img/icon/forecasts16.png
/img/icon/forecasts24.png
/img/icon/home16.png
/img/icon/invoices32.png
/img/icon/invoices16.png
/img/icon/invoices24.png
/img/icon/custom16.png
/img/icon/custom24.png
/img/icon/quotes32.png
/img/icon/quotes16.png
/img/icon/quotes24.png
/img/icon/orderBell32.png
/img/icon/orderBell16.png
/img/icon/perAccounts32.png
/img/icon/perAccounts16.png
/img/icon/campaigns32.png
/img/icon/portals32.png
/img/icon/portals16.png
/img/icon/portals24.png
/img/icon/pricebooks32.png
/img/icon/pricebooks16.png
/img/icon/pricebooks24.png
/img/icon/products32.png
/img/icon/products16.png
/img/icon/products24.png
/img/icon/reports24.png
/img/icon/custom16.png
/img/icon/solutions32.png
/img/icon/pnet_connection32.png
/img/icon/pnet_connection16.png
/img/icon/pnet_connection24.png
/img/icon/tags32.png
/img/icon/tag16.gif
/img/icon/tag16.gif
/img/content/workspace32.png
/img/content/workspace16.png
/img/content/workspace24.png
/img/content/content32.png
/img/icon/files16.png
/img/content/content24.png
/img/icon/files32.png
/img/icon/files16.png
/img/icon/files24.png
/img/content/subscriptions32.png
/img/content/subscriptions16.png
/img/content/subscriptions24.png
/img/content/contribute32.png
/img/content/contribute16.png
/img/content/contribute24.png
/img/icon/documents32.png
/img/icon/documents24.png
/img/content/deliver32.png
/img/content/deliver16.png
/img/content/deliver24.png
/img/icon/ideabubble32.png
/img/icon/ideabubble16.png
/img/icon/ideabubble24.png
/img/icon/ideathemes32.png
/img/icon/ideathemes16.png
/img/icon/ideathemes24.png
/img/icon/csquestions32.png
/img/icon/csquestions16.png
/img/icon/csquestions24.png
/img/icon/questions32.png
/img/icon/questions16.png
/img/icon/questions24.png
/img/icon/chatteranswers24.png
/img/google/google_docs_icon_24x24.png
/img/icon/profile32.png
/img/icon/profile16.png
/img/icon/profile24.png
/img/knowledge/knowledge32.png
/img/knowledge/knowledge16.png
/img/knowledge/knowledge24.png
/img/knowledge/publishing/knowledgemanagement32.png
/img/knowledge/publishing/knowledgemanagement16.png
/img/knowledge/publishing/knowledgemanagement24.png
/img/icon/entitlements32.png
/img/icon/entitlements16.png
/img/icon/entitlements24.png
/img/icon/service_contracts32.png
/img/icon/service_contracts16.png
/img/icon/service_contracts24.png
/img/icon/contract_line_item32.png
/img/icon/contract_line_item16.png
/img/icon/contract_line_item24.png
/img/icon/workOrder32.png
/img/icon/workOrder16.png
/img/icon/workOrder24.png
/img/icon/workOrderItem32.png
/img/icon/workOrderItem16.png
/img/icon/workOrderItem24.png
/img/icon/serviceAppointment32.png
/img/icon/serviceAppointment16.png
/img/icon/serviceAppointment24.png
/img/icon/serviceResource32.png
/img/icon/serviceResource16.png
/img/icon/serviceResource24.png
/img/icon/serviceTerritory32.png
/img/icon/serviceTerritory16.png
/img/icon/serviceTerritory24.png
/img/icon/operatingHours32.png
/img/icon/operatingHours16.png
/img/icon/operatingHours24.png
/img/icon/workType32.png
/img/icon/workType16.png
/img/icon/workType24.png
/img/icon/timeSlot32.png
/img/icon/timeSlot16.png
/img/icon/timeSlot24.png
/img/icon/timesheet32.png
/img/icon/timesheet16.png
/img/icon/timesheet24.png
/img/icon/timesheetEntry32.png
/img/icon/timesheetEntry16.png
/img/icon/timesheetEntry24.png
/img/icon/assetRelationship32.png
/img/icon/assetRelationship16.png
/img/icon/assetRelationship24.png
/img/icon/resourceAbsence32.png
/img/icon/resourceAbsence16.png
/img/icon/resourceAbsence24.png
/img/icon/resourceCapacity32.png
/img/icon/resourceCapacity16.png
/img/icon/resourceCapacity24.png
/img/icon/serviceTerritoryMember32.png
/img/icon/serviceTerritoryMember16.png
/img/icon/serviceTerritoryMember24.png
/img/icon/service_report32.png
/img/icon/service_report16.png
/img/icon/service_report24.png
/img/icon/signature32.png
/img/icon/signature16.png
/img/icon/signature24.png
/img/icon/product_item32.png
/img/icon/product_item16.png
/img/icon/product_item24.png
/img/icon/product_item_transaction32.png
/img/icon/product_item_transaction16.png
/img/icon/product_item_transaction24.png
/img/icon/product_required32.png
/img/icon/product_required16.png
/img/icon/product_required24.png
/img/icon/product_consumed32.png
/img/icon/product_consumed16.png
/img/icon/product_consumed24.png
/img/icon/address32.png
/img/icon/address16.png
/img/icon/address24.png
/img/icon/location32.png
/img/icon/location16.png
/img/icon/location24.png
/img/icon/associated_location32.png
/img/icon/associated_location16.png
/img/icon/associated_location24.png
/img/icon/maintenancePlan32.png
/img/icon/maintenancePlan16.png
/img/icon/maintenancePlan24.png
/img/icon/maintenanceAsset32.png
/img/icon/maintenanceAsset16.png
/img/icon/maintenanceAsset24.png
/img/icon/product_request32.png
/img/icon/product_request16.png
/img/icon/product_request24.png
/img/icon/product_request_line_item32.png
/img/icon/product_request_line_item16.png
/img/icon/product_request_line_item24.png
/img/icon/product_transfer32.png
/img/icon/product_transfer16.png
/img/icon/product_transfer24.png
/img/icon/shipment32.png
/img/icon/shipment16.png
/img/icon/shipment24.png
/img/icon/service_territory_location32.png
/img/icon/service_territory_location16.png
/img/icon/service_territory_location24.png
/img/icon/livechat32.png
/img/icon/livechat24.png
/img/icon/livechattranscript32.png
/img/icon/livechattranscript16.png
/img/icon/livechattranscript24.png
/img/icon/livechatvisitor32.png
/img/icon/livechatvisitor16.png
/img/icon/livechatvisitor24.png
/img/icon/liveagentsession32.png
/img/icon/liveagentsession16.png
/img/icon/liveagentsession24.png
/img/icon/omni32.png
/img/icon/omni24.png
/img/icon/quicktext32.png
/img/icon/quicktext16.png
/img/icon/quicktext24.png
/img/icon/sossession32.png
/img/icon/sossession16.png
/img/icon/sossession24.png
/img/icon/sossession32.png
/img/icon/sossession16.png
/img/icon/sossession24.png
/img/icon/groups32.png
/img/icon/groups16.png
/img/icon/groups24.png
/img/icon/profileskill32.png
/img/icon/profileskill16.png
/img/icon/profileskill24.png
/img/icon/profileskillendorsement32.png
/img/icon/profileskillendorsement16.png
/img/icon/profileskillendorsement24.png
/img/icon/topics32.png
/img/icon/topics16.png
/img/icon/topics24.png
/img/icon/files32.png
/img/icon/files16.png
/img/icon/files24.png
/img/icon/chatterC32.png
/img/icon/chatterC16.png
/img/icon/chatterC24.png
/img/icon/datadotcom32.png
/img/icon/datadotcom16.png
/img/icon/datadotcom24.png
/img/icon/dandB_32.png
/img/icon/dandB_16.png
/img/icon/dandB_24.png
/img/icon/sites32.png
/img/icon/sites24.png
/img/icon/tables32.png
/img/icon/tables16.png
/img/icon/tables24.png
/img/social/SocialPersona32.png
/img/social/SocialPersona16.png
/img/social/SocialPersona24.png
/img/social/SocialPost32.png
/img/social/SocialPost16.png
/img/social/SocialPost24.png
/img/icon/wrench32.png
/img/icon/wrench16.png
/img/icon/wrench24.png
/img/icon/hub32.png
/img/icon/hub16.png
/img/icon/hub24.png
/img/rypple/32-recognition.png
/img/rypple/16-recognition.png
/img/rypple/24-recognition.png
/img/rypple/32-feedback.png
/img/rypple/16-feedback.png
/img/rypple/24-feedback.png
/img/rypple/32-coaching.png
/img/rypple/16-coaching.png
/img/rypple/24-coaching.png
/img/rypple/32-workgoals.png
/img/rypple/16-workgoals.png
/img/rypple/24-workgoals.png
/img/rypple/32-goals.png
/img/rypple/16-goals.png
/img/rypple/24-goals.png
/img/rypple/32-metrics.png
/img/rypple/16-metrics.png
/img/rypple/24-metrics.png
/img/rypple/32-performance.png
/img/rypple/16-performance.png
/img/rypple/24-performance.png
/img/identity/apps_32x32.png
/img/identity/apps_16x16.png
/img/identity/apps_24x24.png
/img/icon/wrench32.png
/img/icon/wrench16.png
/img/icon/wrench24.png
/img/icon/building32.png
/img/icon/building16.png
/img/icon/profile32.png
/img/icon/profile16.png
/img/icon/profile24.png
/img/rypple/32-calibration.png
/img/rypple/16-calibration.png
/img/rypple/24-calibration.png
/img/icon/insights24.png
/img/rypple/32-recognition.png
/img/rypple/16-recognition.png
/img/rypple/24-recognition.png
/img/icon/dupeRecordSet32.png
/img/icon/dupeRecordSet16.png
/img/icon/dupeRecordSet24.png
/img/icon/macro32.png
/img/icon/macro16.png
/img/icon/macro24.png
/img/icon/campaigns32.png
/img/icon/relationship32.png
/img/icon/relationship24.png
/img/icon/forecasts32.png
/img/icon/forecasts16.png
/img/icon/forecasts24.png
/img/icon/ddc_icon_32.png
/img/icon/ddc_icon_16.png
/img/icon/ddc_icon_24.png
/img/icon/product_item32.png
/img/icon/product_item16.png
/img/icon/product_item24.png
/img/icon/solutions32.png
/img/icon/solutions32.png
/img/icon/solutions32.png
/img/icon/product_item32.png
/img/icon/product_item16.png
/img/icon/product_item24.png
/img/icon/solutions32.png
/img/icon/ddc_icon_32.png
/img/icon/ddc_icon_16.png
/img/icon/ddc_icon_24.png
/img/icon/channelProgram32.png
/img/icon/channelProgram16.png
/img/icon/channelProgram24.png
/img/icon/channelProgramLevel32.png
/img/icon/channelProgramLevel16.png
/img/icon/channelProgramLevel24.png
/img/icon/partnerFundAllocation32.png
/img/icon/partnerFundAllocation16.png
/img/icon/partnerFundAllocation24.png
/img/icon/partnerMarketingBudget32.png
/img/icon/partnerMarketingBudget16.png
/img/icon/partnerMarketingBudget24.png
/img/icon/partnerFundClaim32.png
/img/icon/partnerFundClaim16.png
/img/icon/partnerFundClaim24.png
/img/icon/partnerFundRequest32.png
/img/icon/partnerFundRequest16.png
/img/icon/partnerFundRequest24.png
/img/icon/mail32.png
/img/icon/mail16.png
/img/icon/mail24.png
/img/icon/scorecard32.png
/img/icon/scorecard16.png
/img/icon/scorecard24.png
/img/icon/service_crew32.png
/img/icon/service_crew16.png
/img/icon/service_crew24.png
/img/icon/service_crew_member32.png
/img/icon/service_crew_member16.png
/img/icon/service_crew_member24.png
/img/icon/moon32.png
/img/icon/moon16.png
/img/icon/hands32.png
/img/icon/hands16.png
/img/icon/plane32.png
/img/icon/plane16.png
/img/icon/plane24.png
/img/icon/alarmClock32.png
/img/icon/alarmClock16.png
/img/icon/alarmClock24.png
/img/icon/cellPhone32.png
/img/icon/cellPhone16.png
/img/icon/cellPhone24.png
/img/icon/desk32.png
/img/icon/desk16.png
/img/icon/desk24.png
/img/icon/creditCard32.png
/img/icon/creditCard16.png
/img/icon/cash32.png
/img/icon/cash16.png
/img/icon/cash24.png
/img/icon/hammer32.png
/img/icon/hammer16.png
/img/icon/hammer24.png
/img/icon/custom51_100/bell32.png
/img/icon/custom51_100/bell16.png
/img/icon/custom51_100/bell24.png
/img/icon/custom51_100/books32.png
/img/icon/custom51_100/books16.png
/img/icon/custom51_100/books24.png
/img/icon/custom51_100/castle32.png
/img/icon/custom51_100/castle16.png
/img/icon/custom51_100/castle24.png
/img/icon/custom51_100/chalkboard32.png
/img/icon/custom51_100/chalkboard16.png
/img/icon/custom51_100/chip32.png
/img/icon/custom51_100/chip16.png
/img/icon/custom51_100/chip24.png
/img/icon/custom51_100/compass32.png
/img/icon/custom51_100/compass16.png
/img/icon/custom51_100/compass24.png
/img/icon/custom51_100/scales32.png
/img/icon/custom51_100/scales16.png
/img/icon/custom51_100/scales24.png
/img/icon/custom51_100/shoppingCart32.png
/img/icon/custom51_100/shoppingCart16.png
/img/icon/custom51_100/shoppingCart24.png
/img/icon/custom51_100/thermometer32.png
/img/icon/custom51_100/thermometer16.png
/img/icon/custom51_100/thermometer24.png
/img/alohaSkin/fewer_more.png
/img/alohaSkin/fewer_more.png
/img/alohaSkin/btn_quote_sprite.png
/img/alohaSkin/help_orange.png
/img/alohaSkin/help_grey.png
/img/alohaSkin/combobox_arrows_sprite.gif
/img/alohaSkin/appHeader_l.png
/img/alohaSkin/appHeader_r.png
/img/support/servicedesk/primaryTabBG_gradient.png
/img/support/servicedesk/headerBG_gradient.png
/img/alohaSkin/twisty_sprite.png
/img/alohaSkin/sortArrows_sprite.png
/img/alohaSkin/collapseExpand_arrows.png
/img/alohaSkin/nextPrevBtn_sprite.png
/img/alohaSkin/mutton_arrow_only.png
/img/icon/alohaProfile16.png
/img/icon/alohaProfile32.png
/img/icon/alohaProfile24.png

Popular Posts