2/08/2008

Sending a message to all users.

Sometimes one user could need to send a message to all the connected users. Perhaps you have to give some announcement to the users, for example for an unplanned reboot of the system, thing that you must avoid as much as you can (see post about best practices). The biWall function covers this functionality.

From the expression test window you can try this code

{
var lMessage$:=’Hi all users’;

return biWall&(lMessage$);
}
I hope this will be useful for all of you.

Labels:

2/04/2008

Three interesting news

The first, One interest article about the price of SMS here, Why are the SMS so expensive?

The second, Martin Dawes will provide the billing systems to O2. You can see it in this article (oss news review).

And the last, eServ has had a very white, white Christmas. The company announces that with his messaging system his clients have achieved the
100% of the messages delivery for a record peak of SMS and MMS traffic over the holiday period. Across eServGlobal’s client base, end users sent over 1.5 billion messages during the 11 days over Christmas and New Year, and one client experienced a peak of 2500 messages per second at the height of activity
More information in this link...

As perhaps you know. eServ provides the SCP (service control point) that in some Singl.eView implementations are integrated with the CE (commerce engine) to achieve real time rating. Anyone knows this software? anyone has experience with this architecture?

Labels:

1/30/2008

Tuxedo error prodinst_complete.cc

Hi all again.

Recently one reader of this blog (one that it isn’t one of my colleagues, one of my friends, or one of my family) ask to me why I don’t update this blog frequently. Well, there were several reasons, but one of them was very clear; it seemed to me that no one was interested in this blog. But after this comment I understand that, at least, one person was following this blog. This entry is dedicated to this reader. THANK YOU for your comment.

What I have done today that could be interested for this blog? Today in the morning the service desk sent me the following error

“E12118> Tuxedo error 5500 occurred. Tuxedo error message, Internal error occurred in file prodinst_complete.cc at line 2394. “

This error was produced when the provisioning system was trying to create a new product instance in the system. The product instances in our system are created by an EAI (a middleware between the CRM (not Singl.eView) and the billing system (Singl.eView)). This EAI is coded in JAVA and create these instances using the JAVA API. The error appeared when the EAI was trying to “complete” a product instance after the creation of this and after the services were added to this instance. This only was happening when it was trying to create some instances of some product type.
After some tests (including creating the product instance using the Singl.eView GUI) I identified that the problem was derived for a problem in the database. The definition of the product in the database had one error. In the product_service_type table (the table that has the service types that are included in the product definition) the service_item_seqnr wasn’t consecutive. There was a hole in the sequence. One row for this product had been deleted. This was the origin of the problem.
I tested also, that the same problem it could happen if some of the service_range_seqnr was duplicated for the product.
Then, if you obtain this error remember review the service_range_seqnr field for the product type and for the companion products that you were trying to complete. It can’t be holes and it can’t be duplicated.

How to fix this? Very clear and very dangerouos. You have to fix the sequence in the service_range_seqnr…but warning ! This field is replicated in the product_instance_service table, then if you have yet several instances of this kind of product created, you can´t change the service_range_seqnr that are in this table for this instances.

I hope I had been clear in the explanation. If you have some question or comment, please post.

That’s all folks,

Labels:

3/02/2007

A new bug fixed: The service_range_serqnr field

Today I have received very good news.
In the next version of Singl.eView CB it will be fixed one of the most awkward bugs of CB application. The bug is related with the field service_range_seqnr in the product_instance_service table. This field takes inconsistent values in some conditions.
As the readers well know, this field gives the number of instances created for the same service_type defined in the same service_item_seqnr row in the product catalogue structure. When you create a new product instance and you add a service, Singl.eView store in the relation table product_instance_service the service item sequence number (the number of the “row” in the product structure definition) created to allocate the new service. If you add more services from the same service_item_seqnr then the field service_range_seqnr raises one unit for each and allows differencing one from another. Then, if you cancel a service, the field service_range_seqnr takes a negative value for this service and renumber the field for the rest of the services with service_range_seqnr greater than the service you are cancelling.
For an active service the field service_range_seqnr it has to be greater than zero. Now, due to the bug an active service can take a value equal to cero or negative. The error appears if you update a service cancelled (that it’s possible from the GUI or for the API). Whenever you update the cancelled version, the renumber process reduces one unit to the rest of the services.

If you want to reproduce the error then you can:

1) Select a product that could have several services with the same service_range_seqnr.

2) Query the database for the product_instance_id
and the service_range_seqnr selected:

SELECT PIS.SERVICE_ITEM_SEQNR,
PIS.SERVICE_RANGE_SEQNR,
PIS.EFFECTIVE_START_DATE
FROM PRODUCT_INSTANCE_SERVICE PIS
WHERE PIS.PRODUCT_INSTANCE_ID=xxxx
AND SERVICE_ITEM_SEQNR=xxxx
Order by
effective_start_date,
service_range_seqnr

3) Select a service (not the service with the greater service_range_seqnr)
4) Cancel the service
5) Query again
6) update the cancel service as times as you want
7) Query again

What happens if an active service has in the field service_range_seqnr a value equal or lower to zero? That you are going to obtain several errors if you try to cancel this service. You won’t be able to cancel until you correct the value of the field…

That’s all folks ;)

Labels:

Oracle buys hyperion

The new is in
http://www.computing.co.uk/itweek/news/2184497/oracle-expected-hyperion.

Labels:

2/24/2007

Is it possible to have a product active with all the services cancelled?

The answer it must be no, and if this happen this is an error, but yes it’s possible. How? Try this. Suppose that you have a product with two services . Suppose that from the GUI you cancel one of these services. No problem, there are one service active, and then the product remains active. If now you want to cancel the other with the same date that the first before you obtain one error saying that the service can’t be cancelled. This is ok. You can´t cancel the service because is the last active service in the product. You have to cancel the whole product. But what happens if you cancel the service the day before you have cancelled the first? This day the service isn’t the last service active in the product, and then you can cancel it. The system don’t gives you any error message, but this have a collateral damage, the next day now you have all the services cancelled and the product active.

This error was found using the version 6.0.12.01

Labels:

The print and debug function.

These days I was coding and reviewing some functions developed in EPM in our project. Generally I used to use the print function to print comments in the middle of my function to see what the function was doing. These comments was written in the stdout file ($ATA_DATA_SERVER_LOG\stdout). To use the print function to debug is very poor because you have to write the messages, see it in the file and once you have finished your job, delete or comment all the prints. But Singl.eView offers a better solution to do this. The “debug” function. This function takes the message you put in the argument of the function and write it directly in the stdout or in the expression test window. But the debug function only works if you are working in debug mode otherwise the parser don’t parse the function. This is very good. You can forget your debug messages and you can send it to production environments, knowing that only in debug mode they are going to do something. Have you ever find out a message in the stout file due to a forgotten print in some function?

If you are testing the function in the expression test you can click the debug check and debug your function.

Also exist the debug_on and the debug_off functions. With this you can activate / deactivate the debug mode in the middle of the code of some function.

And if you have a very big stdout file…you can use the switch file to create a new one.

Labels:

12/06/2006

New features on version 6.01

In the European User group conference Intec has announced some new functionalities in Singl.eView 6.01. These are some of them:

o CM – The enhancements in the CM (customer management) module in Singl.eView reduce the cost of order entry and customer care; improve the way in which the csr´s work and diminish the time to create a new product to a customer node. They have improved the screen layouts to becoming also more users friendly.

o Scheduler enhancements – The scheduler add interesting new functionalities. First the Singl.eView developers have added a graphic view to see how all the pending tasks are “scheduled” in time. They had also added a Gant view giving to the scheduler an interesting “flavour” of Microsoft Project. The new layout allows the possibility to have, in a look, an idea of how the system will be working in the next days. It will help to find the days and hours in which the system can be overloaded and when our system is working under its possibilities.

o In the 6.01 version also exists the possibility to add dependencies between tasks, in a way that one task can be waiting for another task until this finish. The tasks can be based in different task types.

o Sub day granularity. Sure this is one of the most relevant new functionality. Now, it exist the possibility to activate, cancel and update products and services using day and hours. This change also has associate the modification of how the prorated tariffs work. Up the version 6.01 the minimum unit to prorate is the day. From the version 6.01 you can pro rate until the second. It exist the possibility to round the duration of an event for backward compatibility.

Labels:

11/26/2006

Top Ten Best Operational Practices

The second day of the conference Shaun Whalon from Intec gave the guidelines to the Top Ten Operational Best Practices.
In this post I show you the notes I have taken, completed with some comments and opinion.

1. To have an operations plan

The plan must include a schedule with all the operational tasks in the system.
For each task the plan must include the following information:

* Name of the task

* Start date
* Duration (estimated)
* Resources (estimation of the resources that can be consumed during the execution).
* Precedence

To programme the tasks It must be take into account the precedence between the tasks, the incompatibilities and the resources consumed by the tasks.

2. Housekeeping

Run periodically housekeeping tools and have our system “clean”
For example:

- Purge Old Data
- Keep directories clean
- Analyze the database

3. Manage performance

- Separate residential and corporate customers in different bill cycles.
- Take the unbilled customers into account
- Remove “dormant” customers from active bill cycles
- Monitor growth
- Study and learn about the performance in the system

4. Change management

- Establish a policy about change management, for example, to change the tariffs.

I think that this point (the change management in Singl.eView) it could be an interesting point to open a discussion forum. Specially talking about how to transfer configuration from one evironment to another or how to manage the versions or changes in the configuration. What do you think about the Archive tool? Are you using any system of Concurrent Versions to control the code of your functions (cvs,vss)? How do you manage the Id´s of the entities between the development environment (and other dev environments), the preproduction environment and the production environment?

5. Minimize Delays

Usually the systems are down more time that they must be down.

- Monitor Log Files

- Learn how and when the system must be bounce.

- Bounce only the some servers if it´s possible

- After each update of the configuration study if a bounce is needed or not

6. Partition Manteinance

Perform regularly the tasks related with the partitions

- Rotate partitions

- Verify and close partitions

- Sort partitions

7. Checklists

Create checklists in a way to document or to procedure common tasks, for example, from the way to find an error to the way to update the configuration, etc, etc.

8. Manage DVP errors

Prevention it´s better than cure.

9. Audit the database

Audit in the database the update of de data, what user and when made changes in the data.

10. Keep current

Like other software vendors Intec only gives support to the recent versions, and the patches and bugs are fixed over the latest versions.

If you has a Support Manteinace contract with Intec, you must review this point to avoid become your system unsupported.

Labels: ,