The Kat's Work - Blog
Main | Blog | Registration | Login
Monday
2024-04-29
5:41 PM
Welcome Guest | RSS

In IT we tend to get a lot of problems raised(Calls) where the information provided is insufficient or inappropriate for the solution of the problem. This often leads to extended resolution times due to having to fill in the background information on a problem before even starting to look for a solution. This isn’t just inefficient its poor customer service to have to contact the customer to fill in details on a problem they have raised. While we IT staff are guilty ourselves for not providing sufficient logging of errors, even the best logging of errors is only an aid to a user generated call.

Lets look at simple non-technical example (I’ll post a more detailed study later in this document.)

The Situation

"I had just been grocery shopping. I tried to open the door to the kitchen, but the handle didn’t work.”

Possible Problems Raised (Calls)

"Unable to put shopping in fridge.”
"Unable to get through door.”
"Handle broke on door to IT Kitchen.”

As you can see the quality of the calls can change wildly from being nothing to do with the actual problem, to very helpful.

If we look at the first call "Unable to put shopping in fridge.” It may look silly but from the users point of view this is the actual problem. They can’t get to the fridge to put their shopping into it. It will however lead to a highly inefficient solution process.

Firstly there is no information about which fridge the user is unable to access. So more data will have to be gathered, either by contacting the user again or checking which fridges the user has access to and checking them all. Once they know which fridge, they can than send their fridge specialist to take a look. Once on site he will find that the real problem is with the door to the kitchen. This will than be reassigned to a locksmith who in turn will have to visit the site at a later date.

When raising a call you should follow the following guidelines.

Try to be specific about the problem you had, Superfluous, non-related or demographic information will only confuse and slow the problem solving process.

Describe exactly what you were doing when the problem occurred, (but keep it task related they don’t need to know you was drinking a brew.)

Be detailed in your description of the actual problem. Every bit of information about the problem is one bit of information the problem solver doesn’t have to find or ask you about at a later date. To you it might be that you got an error while saving a record, to them it may be that the button you pressed to save didn’t work properly.

Always give reference numbers, where available.

Give a time and date for the problem, as accurately as you can.

So next I’ll give a detailed technical example to illustrate the differing levels. You will be surprised the number of calls I have received of type 1 & 2. Mostly calls fall into types 4-7 and this does tend to increase overheads to problem resolution. (I have never received a type 10 or better call and have only received a handful of 9s.

Situation


While in the company’s HR system, a user is amending absence records so that the monthly absence can be created. They are adding an occurrence of absence for employee 100001. When they save the record they get an error message. The error message reads "Exception 27 during insert of Absence Record”.

Now there is a spectrum of ways in which this problem could be raised. Each of them having impact on the efficiency of the problem resolution. Here are some examples and the problems with each.

Very low Efficiency

1.    "I got an error.”
2.    "Can’t run monthly Absence Reports.”
3.    "I was in the hr system and got an Error”
4.    "I was in the absence module of the HR system and got an error.”
5.    "I was adding an absence and got an Error.”
6.    "I had entered a new absence record. When I tried to save it I got an error.”
7.    "I had entered a new absence record. When I tried to save it I got the error Exception 27 during insert of Absence Record.”
8.    "I had entered a new absence record for employee number 1000001. When I tried to save it I got the error Exception 27 during insert of Absence Record.”
9.    "I had entered a new absence record for employee number 1000001. When I tried to save it I got the error Exception 27 during insert of Absence Record. This error occurred on the 12th July at 1pm.”
10.    "I had entered a new absence record for employee number 1000001. I put the following information in…………..When I clicked the "save” button at the top right hand corner I got the error Exception 27 during insert of Absence Record. This error occurred on the 12th July at 1pm.”

Highly Efficient


As you can see the difference a few important facts make to a call can be amazing. By providing the information that someone needs to tackle your problem straight away you are ensure your problem is fixed as soon as possible. The only problem being that the first time you log a type ten call, they’ll probably be so awed by the detail they sit and admire it for a while.
Views: 780 | Added by: The_Kat | Date: 2011-06-02 | Comments (0)


Sorry for the lack of posts. Very very busy.


Plus side is i have tons and tons of content just waiting to be posted.


e.g Lotus notes Symphony Integration.

Advanced Jax-ws

Reporting in Lotus Notes 8.5 ( A comprehensive guide.)

Birt for beginners

WebServices and BIRT a happy marriage.



Also why not check my personal blog for other The Kat related news including my 50 book challenge, Herbert's Adventures and much much more.



Views: 811 | Added by: The_Kat | Date: 2011-06-01 | Comments (0)


 
Following on from my guide to Web service in Lotus Notes, I will now discuss the ins and outs of consuming them in java. Specfically Java spring and Jax-WS.

First off a few pre-cursors in this guide I will not explain wsdl in any great detail so for some background please read the excellent guides from w3c. Also the eclipse plugin "SoapUI” is amazingly useful for working with webservices.

The JAX-WS classes are bundled in with the springframework so no need to go find them.

Firstly lets set up a very basic consumer service.

In your applicationContext-servlet.xml you’ll need to set up your JAX-WS bean. As below.



<bean id="TestNotesService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
        <property name="wsdlDocumentUrl"  value="http://<url>/TestService?wsdl" />
        <property name="namespaceUri"     value="urn:DefaultNamespace" />
        <property name="serviceName"      value="Test" />
        <property name="portName"         value="domino" />
        <property name="serviceInterface" value="testweb.webservice.TestService" />
 </bean>


As can be seen its very basic functionality. The wsdl url, default namespace, service and port names as specified in the wsdl. The only thing "java” is the definition of a service Interface.

The service interface is what it says on the tin. It is an interface in which we are telling java how to deal with the services methods.

package testweb.webservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.ParameterStyle;


@WebService(name = "Test",
        targetNamespace = "urn:DefaultNamespace")
        @SOAPBinding(parameterStyle=ParameterStyle.BARE)
public interface TestService {
   
    @WebMethod(operationName = "SAYHELLO",
            action = "http://<url>/TestService")
            public String SayHello();
   
    @WebMethod(operationName = "SAYMESSAGE",
            action = "http://<url>/TestService")
            public String SayMessage(@WebParam(name = "MESSAGE",
                    targetNamespace = "urn:DefaultNamespace")String message);   
   

}




The sample above shows the setup for simple calls to simple methods of the webservice.

·    @WebService annotataion sets simple information about the service.
·    @SOAPBinding annotation sets the parameter style of the service. In simple methods such as those above where the most being passed in the soap message is a simple string. Than use Bare.
·    @WebMethod() annotation assigns the webservice method and url.
·    @WebParam() annotation specifies a parameter to be sent to the webservice.

So in this example we have a webservice called test. It has at least two methods (SAYHELLO and SAYMESSAGE). SAYHELLO is a very basic method that is called and returns a string. SAYMESSAGE accepts a single parameter and returns a single string.

Usage.

@Controller
@Configurable
public class TestController {

    @Autowired private transient TestService testService;
   

   
    @RequestMapping("/sayHello.htm")
    public void sayHello (HttpServletRequest request, HttpServletResponse response){
try {
                       
           
            if(testService!=null) {
                monthStr = testService.SayHello();
            }
           
           
} catch (Exception e) {
            e.printStackTrace();
        }
   
       
       
    }
}




As you can see after the work to set it up the usage is simple. You may also notice we never set up a class for TestService, we don’t have to JAX-WS has done it for us.

Next up consuming complex webservices. Including creation of xml wrappers for soap messages. Exciting!!!


Views: 14360 | Added by: The_Kat | Date: 2011-03-30

« 1 2 3 4 5 6 ... 12 13 »
Login form
Adverts
Search
Calendar
«  April 2024  »
SuMoTuWeThFrSa
 123456
78910111213
14151617181920
21222324252627
282930
Entries archive
Site friends
  • Create your own site
  • Spree4.com
  • My Blog
  • Statistics

    Total online: 1
    Guests: 1
    Users: 0
    spree4
    Copyright MyCorp © 2024
    Website builderuCoz