Blog

Systems Consultant

Your new job

Our team of consultants helps clients solve their issues, create value, support capability and growth, and improve their performance. You will use your problem solving and communication skills to assist in identifying, clarifying and confirming a problem before helping create and implement a solution relevant to the client’s needs.

Why should you be interested?

Your position will see you engage with clients, focusing on their core business needs and delivering business benefits that exceed expectations. Above all, you will have the chance to build lasting relationships and see your clients flourish through the advice and support you are able to provide.

What is in it for you?

  • A dynamic team environment working with inspiring colleagues
  • Personal growth and development opportunities
  • Competitive salary
  • Occasional interstate travel
  • Free parking at our central Canberra office in Deakin

If you would like more information download the detailed position description below and submit a cover letter with your resume using the form below.

Your Name (required)

Your Email (required)

Your Introduction

Your Cover Letter

Your Resume (required)

Financial Systems Consultant

Your new job

Our team of consultants helps our clients solve their issues, create value, support capability and growth, and improve their performance. You will build your industry experience and business skills to identify, clarify and confirm a problem before helping create and implement a solution relevant to the client’s needs. In addition to providing objective advice, expertise and specialist skills in accounting and business.

Why should you be interested

Your key position will see you engage with clients, focusing on their core business needs and delivering business benefits that exceed expectations. You will be consulting in the areas of Accounting and Enterprise Resources Planning (ERP) processes ensuring business and technical objectives are met. Above all, you will have the chance to build lasting relationships and see your clients flourish through the advice and support you are able to provide.

What is in it for you?

  • A dynamic team environment working with inspiring colleagues
  • Personal growth and development opportunities
  • Occasional interstate travel
  • Free parking at our central Canberra office in Deakin

If you would like more information download the detailed Financial Systems Consultant position description and submit a cover letter with your resume using the form below.

Your Name (required)

Your Email (required)

Your Introduction

Your Cover Letter

Your Resume (required)

Sage CRM 7.2 : Shuffle that Workflow!

Workflows are an integral part of Sage CRM, and we all know how crucial they are to any business that relies on them to perform their daily processes.

In my experience as a consultant, there have been many times when users from client sites have contacted us to say that they have mistakenly progressed a workflow to an incorrect state and want to move it back to the previous state.

In today’s blog, I’ll be giving you step-by-step instructions on how you can ‘shuffle’ any workflow to the state your client user wants.

I’ll be taking an example of the Opportunity workflow and show how you can move it back from its current state to the previous one. We’ll assume a scenario where a lead is incorrectly set to “qualified” in the workflow; which means the workflow is in the ‘qualified state’, and we want to bring it back to the ‘lead state’.

So, let’s begin!

Step 1:

Let’s pick an opportunity in the Qualified state from a list of opportunities in Sage CRM. Now, when you hover your mouse on this opportunity, you will see a URL at the bottom of the screen that will tell you the Opportunity Id (Oppo_opportunityId – highlighted in green) for this particular opportunity. In this case, it is 22.

Step 2:

Having found the correct opportunity, it is time to look into the Opportunity table in your CRM database and find out its corresponding ‘workflow id’ (oppo_workflowid). In case you ever wondered what a ‘workflow instance’ was, this is it! You can find the workflow instance of an opportunity by executing the following SQL command.

SELECT  oppo_workflowid

FROM     Opportunity

WHERE  oppo_opportunityid = 22

The above SQL command returns the value of oppo_workflowid as 3165. With that information, we will now go to the WorkflowInstance table to get some more information about this workflow instance record in step 3.

Step 3:

There are two things that I always check in the WorkflowInstance table for a given workflow instance record

1. wkin_currentstateid, and

2. wkin_workflowid fields.

WkIn_currentstateid, is used to find out what current state the workflow under consideration is in, and WkIn_WorkflowId  helps me to figure out the right workflow, which in turn helps me to list down all the states for that workflow. You can find the wkin_currentstateid and wkin_workflowid by executing the following SQL command.

SELECT wkin_currentstateid, wkin_workflowid

FROM   WorkflowInstance

WHERE  WkIn_InstanceID = 3165

The above SQL command returns the values of wkin_currentstateid and wkin_workflowid as 11 and 2 respectively.

Step 4:

Now we will use the wkin_workflowid value, which is 2 in this case, from the above step, to list down all the states for this particular workflow from the WorkflowState table. You can execute the following SQL command for that.

SELECT *

FROM  WorkflowState

WHERE WkSt_WorkflowId = 2

Below is a snapshot of the result generated by the query above. As you can see, the table in the snapshot has got all the standard opportunity workflow states that comes with the vanilla Sage CRM install.

Step 5:

So as we know, this lead was incorrectly progressed to the qualified state, as you can see in the image below. We now have to bring it back to the lead state.

We can do so, by updating the current state field (wkin_currentstateid) for workflow instance 3165, which is 11 (Qualified state) at the moment, to 10 (Lead state). If you see in step 4, the state id (WkSt_StateId) for Lead is 10. Let’s write this in SQL

UPDATE WorkflowInstance

SET    WkIn_CurrentStateId = 10

WHERE  WkIn_InstanceID = 3165

Warning : It is extremely important to be certain of the workflow instance you will updating as a final step in the process, as updating the current state id of an incorrect workflow instance will progress another workflow created by someone else!

Now just right click on your browser and reload the frame, and you will see that this opportunity workflow is brought back one step to Lead state again as seen in the image below.

Similarly, you can ‘shuffle’ any workflow to any state you want by simply following the above 5 steps. I recommend you try this out on a test environment first to get a firm conceptual grasp of the steps above.

Let me know how you go. Questions, welcome!

Until next time…happy consulting!  🙂

Project Infinity – CRM Just Got Better

I have been working with Sage CRM for many years with a multitude of clients across various industries. One thing that all of them have in common is the requirement to provide a user interface that helps achieve business objectives. It makes perfect sense, that if the user interface is easy to use and has intuitive controls, then it will lead to increased user acceptance and data quality.

The new buzz word for this is UX, or user experience.

I believe that the keys to creating a good user experience are:

  • Simplicity – Give the user the information they need and nothing they don’t (e.g. do users need to see the reports section?)
  • Responsiveness – Both in speed and user feedback (e.g. clicking a button provides obvious feedback to indicate that it was clicked)
  • Timeliness – Provide functionality only where it is useful (e.g. pre-populate an address form, based on a selected suburb)

Customisation of Sage CRM
It is possible to create customised pages for CRM, which allows for the display and editing of multiple records from multiple tables. It takes a bit of coding, but it is completely doable with plenty of examples available on the web.

Over the years we’ve developed many custom pages, some very simple and some very complicated. There was some pretty cool code written, a lot of which was designed to be re-used over and over. We wanted to create a method that would allow our consultants to quickly develop new CRM pages, using the code that had already been written. This was the beginning of the Accsys Framework (which has recently been renamed Project Infinity).

Over time, this has evolved into something bigger than we ever imagined. We now have a fully working User Interface along with a Webservices Application to facilitate communication between the end user and the database. We are now focusing entirely on providing an unparalleled user experience with little or no training required for the end user. I’m not going to get into how it all works at the moment, other than to say that is built on AngularJS along with a custom built WebService. There will be more details on this in the coming months, but for the time being, just assume that it is all really cool stuff.

Building around a search engine
First and foremost is the search function. It is something people do every day and it has become a natural way to get things done. It goes without saying that CRM systems are a huge repository of data, but this is all but useless if it can’t be found easily and in a format that is useful to the end user.

So we replaced the search screens in CRM with one simple screen.




Wizards for Creating Records
Most processes in a business where data is being created involve multiple processes. For example, booking in a meeting with a new prospect can include:

  • Creating the organisation
  • Creating the key contact
  • Creating the Opportunity
  • Creating the Meeting

This can be reasonably straight forward in Sage CRM, all the user has to do is go through a few screens, then the workflow takes over and guides them.
What we have done by focusing on the end user, is to come up with a wizard driven process that is not only quicker but is also aimed at improving data quality / collection at the same time.




Dashboards
The current dashboards in CRM are useful, particularly the dynamic dashboards. We have recreated this mainly to keep it inline with our new UI. We are basing on Kendo reports and it allows some really cool reporting features.



Try it out
So after the big spiel above we would welcome you to take a look at what we have to offer. This is only the first cut of the new UX and was recently used as a demo for a potential client. We are very excited about what we have achieved to date, but even more so with what we plan to do with this project in the future.

If you would like a login please email me at josh.leighton@accsysconsulting.com.au and I’ll set it up for you.

Accsys Consulting – Project Infinity

You can also view the framework in a separate window, by clicking here “Sage CRM Infinity“.

 

Sage CRM 7.2 Client-Side API

Recently I was asked to hide the continue button on the ‘Case’ summary screen for one of our clients. As you can see in the image below, it is located on the top right corner of the screen.

'Continue' button on the top right corner of the screen.

Case summary screen with ‘Continue’ button

Since it was a client side customization, I was aware that it could be achieved by one of the many easy to use APIs released with the launch of Sage CRM 7.2. These new APIs can be accessed from http://help.sagecrm.com/js-api/classes/index.html

Sage CRM 7.2 client-side API

Sage CRM 7.2 client-side API

Coming back to our client’s requirement, I went to the above link, and found the ‘hideButton’ API to achieve the goal.

Having found the right API, following are the steps to plug it in Sage CRM 7.2

1.  Go to Administration -> Customisation -> Cases -> Screens

2. Select the correct screen you want the API to trigger for when it loads. Remember you can enable ‘inline customisation’ to find out the right screen.

3. Once you are sure of the screen name, select it from the list of screens in the Case entity (in my case it was ‘CaseWebPicker’). This will give you an access to the ‘Custom Content’ area where in you can type the following javascript code that uses the above API.

4. Code:

     <script>

                crm.ready(function()

                {

                                crm.hideButton(“Continue.gif”);

                })

   </script>

Click update and save the changes.

And voila! The continue button has disappeared!

Case summary screen without the 'Continue' button.

Case summary screen without the ‘Continue’ button.

Similarly, you can use many of the client side APIs with Sage CRM 7.2 to achieve your customisation requirements. The other benefit of using the new APIs is that they are browser independent, and you can use them across IE, Chrome or Firefox without any issues.

I would like to hear about you’ve leveraged Sage CRM 7.2 client side API. Feel free to drop in a line or two about your experience.

Happy Customising!

How to install Nagios XI ?

It’s time to check your IT infrastructure’s performance again!

Today’s blog is the second blog post in the infrastructure performance monitoring series. To recap, in my first blog we looked in brief about how businesses can harness the capabilities of a cool open-source performance monitoring tool – Nagios XI. For those who haven’t read my first blog post in this series can find it here.

In this blog, I’ll be walking you through the installation of Nagios XI step-by-step.  Nagios XI is available under GNU license. A lot of plugins are available and its sizeable community makes Nagios XI the biggest open source performance monitoring tool.

Before we dive into the installation process, it is mandatory you have the latest version of the Linux distribution, CentOS, running on your machine. For those who don’t, you will have to download it from here, and then set it up on your machine before following the steps to install Nagios XI. Setting up CentOS on your machine is beyond the scope of this blog and demands a little space of its own. You can find a detailed instruction manual on installing CentOS server here.

After you have CentOS up and running on your machine, you can start working your way through the steps below to install Nagios XI. So, let’s get going!

If you follow the instructions correctly, you will end up with the following information.

  • Nagios XI and its plugins will be installed under /usr/local/nagios directory.
  • Nagios XI will be configured to monitor a few services of your local machine (Disk usage, CPU load etc)
  • Nagios web interface will be available at http://localhost/nagios

To start with, we need to install required dependencies like Apache, PHP, and libraries like gcc, glibc, glibc-common, GD and its development libraries before installing Nagios XI 4.0.6. To do so, we can use yum package installer.

# yum install httpd gd gd-devel php gcc glibc glibc-common

Create a directory

# mkdir /root/nagios

Navigate to the ‘nagios’ directory you created above

# cd /root/nagios

Download nagios-core & plugin

# wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.6.tar.gz

# wget http://nagios-plugins.org/download/nagios-plugins-2.0.tar.gz

Untar Nagios core

tar xvf nagios-4.0.6.tar.gz

Go to the nagios-4.0.6 directory

# cd nagios-4.0.6

Check all your Nagios XI core configuration settings

# ./configure

If the above configuration settings are as desired, then compile and install all necessary binary files for Nagios XI

# make all

Install all needed libraries in your machine

# make install

Install init scripts for Nagios XI

# make install-init

Install Nagios XI command line. This will enable you to operate Nagios XI from the command prompt.

# make install-commandmode

Install sample Nagios XI files

# make install-config

Install the cool web interface for Nagios XI. The following command will also create a web admin user- “nagiosadmin”

# make install-webconf

After this, we will create a new password for the newly created web admin user. You need to enter the admin password twice and also store it securely in a place for future reference as you will need it to login to the Nagios XI web interface.

# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Start the service and start it on boot

# chkconfig nagios on

# service nagios start

Now, compile and install Nagios XI plugins. We downloaded Nagios XI plugins in /root/nagios, so we will go to that location and install and configure it as below.

# cd /root/nagios

# cd nagios-plugins-2.0

# ./configure

# make

# make install

Start apache service and enable it on boot

# chkconfig httpd on

# service httpd start

That’s it! Now open your new Nagios XI web interface by typing http://localhost/nagios and provide the username “nagiosadmin” along with the password you created earlier in this process.

In my next blog, I’ll show you how you can use ‘bash-shell’ scripting to automate the rotation of performance logs from the CentOS server to your file server. Until then you can explore Nagios XI further and understand its basic configuration settings for start.

Let me know how you go with the Nagios XI installation. See you in my next blog!

 

 

 

 

 

 

Sage CRM and SSRS

In my last post I spoke about being able to use Crystal Reports through browsers other than IE. That got me thinking about the reporting options that are available in Sage CRM and the reasons that each of the different reporting options would be used. As I see it there are 3 different options:

  1. Standard CRM Reporting
  2. Crystal Reports
  3. Other reporting application

Today I will be discussing point 3 as not everyone has experience or access to develop Crystal Reports. The first reporting application that came to mind is SQL Server Reporting Services, or SSRS. The reason I will demonstrate how to use this one is because it is available for most installations utilising MS-SQL as the database engine. The advantages of using SSRS over other application reporting tools are as follows:

  1. Easy to deploy
  2. Easy export to various formats
  3. Reports can be run using report subscriptions
  4. Interactive sorting
  5. Drill down reporting
  6. Browser Based Interface

A lot of these functions are already available through the standard CRM reports or through Crystal Reports, however the decision to use SSRS over other reporting tools will be based on the end user requirements. To generate the report I will make use of the ability of Sage CRM to run ASP pages when they are stored in the reports directory. Jeff Richards wrote about this back in 2009, see here. This is done by saving the file in {CRM Install Director}/wwwroot/reports/{Report Category Name}.

To generate a report, I only need to create one asp page, which will contain 1 line which simply redirects to the report server. I won’t be going into how to create the SSRS report in the first place as there are plenty of resources on the web on how to do this and I would only be wasting my time trying to replicate what other users have already written. Microsoft has a useful guide on how to create the SSRS reports, so if you are new to SSRS then this may be a good place to start. This blog post also assumes that you have SSRS installed and working correctly. For this example I will simply be using the localhost installation.

To get started with a report you only need to create an asp page. This bit is actually really straight forward and can be done with 1 line of code. In this example I created an asp page called Sample Report.asp. The file contains the following:

<% Response.Redirect("http://localhost/ReportServer/Pages/ReportViewer.aspx?%2fOpportunity+Summary&rs:Command=Render") %>

This simply redirects to the report server making and displays the report. You should see something like this:

Step 1 - Sample Report

This report is based on the same report that I did in Crystal in a previous post, although that one was formatted a little bit better than this one. This sample works fine when there are no parameters, if I were to add parameters to the report the following would be displayed first.

Step 1 - Sample Report With Param

Then you can view the report by clicking on the View Report field. Using this reporting method adds a lot of functionality over the standard reporting in CRM, such as:

  1. Ability to sort the data
  2. Export the data into a variety of formats including
    1. XML
    2. CSV
    3. PDF
    4. MHTML (Web Archive)
    5. Excel
    6. Tiff
    7. Word
  3. Refresh the data
  4. Change the parameters used to run the report

So this bit is straight forward, however this is only the tip of the iceberg on what can be done. The next example will show a method on how to replace the Company Summary report that is generated out of CRM. The steps I went through were as follows:

  1. Create my SSRS report to mimic what is currently generated out of CRM. In this case I have done a very limited version of what can be done in SSRS, however it will illustrate the purpose.
  2. Create an asp page as follows:
<!-- #include file ="../eWare.js" --> 
<% var Id = new String(Request.Querystring("Key1")); 
Response.Redirect("http://localhost/ReportServer?%2fCompany+Summary&rs:Command=Render&
rc:Parameters=Collapsed&rc:Toolbar=true&comp_companyid="+Id) 
%>
  1. I saved the asp page in wwwroot\custompages\reports.
  2. Created a button group for the Company summary screen
  3. Added a link to the custom asp page that I created in step 2

As you can see it is quite a straight forward exercise adding in additional reports into CRM, regardless of the reporting tool that is being used.

Crystal Reports and Sage CRM

With Sage CRM now supporting browsers other than Internet Explorer, then can be issues when trying to run Crystal Reports. The issues stems from the fact that Sage CRM uses an ActiveX component to display the report. This ActiveX component is quite powerful giving you access to export the report to multiple formats, search for text, change the display, etc. Only problem is that it is limited to Internet Explorer only.

I personally have a problem with using IE and use Chrome on a daily basis. My main issue with IE is with the limited support for HTML5, particularly in older version of IE. I will concede that there has been an improvement in the latest version and I probably could use it without any problems, but I’ve now moved to Chrome and haven’t come up with a good reason to not to use it. There is a cool little website at html5readiness.com which outlines which features of HTML5 and CSS3 have been implemented in the main stream browsers. Speed is also another consideration and I think the image below sums it up perfectly.

Browsers

Now that I have had my little rant, I will move on to what can be done with Crystal and Sage CRM. In this blog post I will show how to generate a Crystal Report while using Chrome. Unfortunately we do have to forgo some of the functionality that is available through the ActiveX control, however I believe that being able to generate the report in the first place is a real plus.

When trying to run the report in Chrome you should see something like this appear.

Image 1
This is not really all that useful. As I mentioned before this is a problem with Chrome not being able to use the ActiveX components, or at least cannot use it when using a vanilla installation. There are a couple of options available here to get it working:

  1. Use an add in to allow ActiveX components to run, for example you can use IE Tab or ActiveX for Chrome
  2. You can change the way the report is generated and presented to screen.

Both options are valid solutions to the problem; however point 1 requires that software is installed on the workstations for it to work correctly. This blog post will go through point 2 and the changes that are required for a system wide solution.
To make this work you will need to edit the standard Crystal Report asp files that are provided with an installation of Sage CRM. These files will be found in {installation directory}\crm\wwwroot\reports\CrystalReportViewer. In this directory you will see the following files:

  1. Cleanup.asp
  2. RDCrptserver11.asp
  3. RunReport.asp

The only file that needs to be modified to work is the RunReport.asp. The modifications are reasonably straight forward and are documented below.

  1. Backup the RunReport.asp
  2. Find the linesession("oRpt").EnableParameterPrompting = False

    Add the following code:dim CrystalExportOptions
    set CrystalExportOptions = session("oRpt").ExportOptions
    FileNameExport = year(date())&"-"&month(date()) & "-" & day(Date()) & "-" & hour(Time()) & "-" & minute(Time()) & "-" & second(Time())
    FileName = Server.MapPath("../../") + "\Temp\" + FileNameExport + ".pdf"
    CrystalExportOptions.DiskFileName = Server.MapPath("../../") + "\Temp\" + FileNameExport + ".pdf"
    CrystalExportOptions.FormatType = CInt(31)
    CrystalExportOptions.DestinationType = CInt(1)
    session("oRpt").Export False
  3. Find the linesset session("oPageEngine") = session("oRpt").PageEngine
    End If
  4. Add the following code at the endResponse.Redirect("../../Temp/" + FileNameExport + ".pdf")

    dim fs
    Set fs=Server.CreateObject("Scripting.FileSystemObject")
    if fs.FileExists(FileName) then
    fs.DeleteFile(FileName)
    end if
    set fs=nothing
  5. This step is optional as it will run with the code still there, however it is no longer needed. To clean it up remove the script:<script language="javascript">
    function getQueryParam( name )

    </script>
    Leave the script that contains the function CallDestroy()

This will now produce a report below.

Image 2

Now because coding can be loads of fun, I have provided the modified file RunReport available for download. Feel free to use it at your own site(s), the only thing I ask is that if you come up with any cool features let me know so I can share it around.

This method does make use of the Temp directory that is within the Sage CRM website, however the files are immediately deleted after they are returned to the client. This method means that the reports are never stored in the CRM library, however the method for producing reports that are stored against the company or other entities will be investigated in future blog posts.

Some things that I have noticed when doing this is that you don’t need to have the Crystal Report Server on the CRM server itself, it will run using the Crystal Runtime files. This works really well in the situation where you have Sage CRM integrated with Sage ERP 300 as they are provided as part of the workstation installation. One other benefit that I have noticed is the speed at which the report is generated, it is surprisingly quick. I wish I could say that this was by design, but unfortunately it was just one of those items that was just plain good luck.

Please note that the change to these files won’t be supported by Sage, however we do have this running live at a lot of our sites with no issues. These files have been tested with Sage 7.1 and 7.2.

The next post will concentrate on how to generate a Crystal Report from the various screens within Sage CRM. This will concentrate mainly on using button groups for the standard entities and using the CRM.AddButton function for asp pages.