cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
1930
Views
0
Helpful
16
Replies

CVP and configuration migration

bilalghayad
Beginner
Beginner

Dear Geoff;

This is the output of the show flash:

VIVADRVG1#show flash:
-#- --length-- -----date/time------ path
1         2763 Nov 28 2001 08:21:16 +03:00 bootstrap.vxml
2     23589532 Feb 7 2000 09:52:06 +03:00 c5350-js_ivs-mz.124-9.T7.bin
3     35574928 Nov 20 2001 09:48:28 +03:00 c5350-jk9s-mz.124-24.T4.bin
4     35602340 Nov 26 2001 06:38:34 +03:00 c5350-js_ivs-mz.124-24.T4.bin
5         6384 Nov 28 2001 08:24:34 +03:00 CVPSelfService.tcl
6         4831 Nov 28 2001 08:24:58 +03:00 CVPSelfServiceBootstrap.vxml
7         2446 Nov 28 2001 08:25:14 +03:00 en_0.wav
8         2446 Nov 28 2001 08:25:32 +03:00 en_1.wav
9         2446 Nov 28 2001 08:25:44 +03:00 en_2.wav
10        2446 Nov 28 2001 08:26:00 +03:00 en_3.wav
11        2446 Nov 28 2001 08:26:10 +03:00 en_4.wav
12        2446 Nov 28 2001 08:26:18 +03:00 en_5.wav
13        2446 Nov 28 2001 08:26:32 +03:00 en_6.wav
14        2446 Nov 28 2001 08:26:42 +03:00 en_7.wav
15        2446 Nov 28 2001 08:26:54 +03:00 en_8.wav
16        2446 Nov 28 2001 08:27:04 +03:00 en_9.wav
17       54522 Nov 28 2001 08:27:22 +03:00 en_error.wav
18      126454 Nov 28 2001 08:27:34 +03:00 en_holdmusic.wav
19       26582 Nov 28 2001 08:27:54 +03:00 en_pleasewait.wav
20        2446 Nov 28 2001 08:28:08 +03:00 en_pound.wav
21        2446 Nov 28 2001 08:28:22 +03:00 en_star.wav
22       52062 Nov 28 2001 08:28:36 +03:00 error.wav
23       80058 Nov 28 2001 08:28:48 +03:00 fetchwait.wav
24        1186 Nov 28 2001 08:29:10 +03:00 handoff.tcl
25         557 Nov 28 2001 08:29:22 +03:00 recovery.vxml
26      371990 Nov 28 2001 08:29:40 +03:00 STC_ULAW.wav
27       92615 Nov 28 2001 08:30:00 +03:00 survivability.tcl
28       20580 Dec 21 2001 23:44:10 +03:00 bootstrap.tcl
29        3188 Dec 21 2001 23:45:58 +03:00 ringtone.tcl
30        1652 Dec 21 2001 23:46:28 +03:00 cvperror.tcl
31       32110 Dec 21 2001 23:46:54 +03:00 ringback.wav
32       58446 Dec 21 2001 23:47:24 +03:00 critical_error.wav

32940032 bytes available (95793152 bytes used)

VIVADRVG1#

Next?

Also I am posting my dial-peer (by the way, it should be service vru-leg or service bootstrap?)

dial-peer voice 81111 voip
description *** VRU Leg ***
translation-profile incoming block
service vru-leg
voice-class codec 1
incoming called-number 8111111111T
dtmf-relay rtp-nte h245-signal h245-alphanumeric
no vad

What do u advise?

Regards

Bilal

5 Accepted Solutions

Accepted Solutions

geoff
Advocate
Advocate

Why don't you post the entire "show run"?

If the application section is configured as follows:

application

service new-call flash:bootstrap.vxml

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service cvperror flash:cvperror.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service handoff flash:handoff.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service vru-leg flash:bootstrap.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

Then you need your dial-peer to call vru-leg.

After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)

Regards,

Geoff

View solution in original post

geoff
Advocate
Advocate

The syntax to load an application is something like "call voice application load APP"

Regards,

Geoff

View solution in original post

Absolutely - for calls from the PSTN, the first node should always be the Send To VRU. As I said, the X will go to an End node (not a Release) so that survivability is invoked on the voice gateway should Send To VRU fail.

But you will need two Send To VRU nodes for CUCM-generated calls, as you have proven. And you will need this for warm transfers from agents to the queues, or from inbound calls from IP phones to the queues (say a non-agent gets a customer call and they want to transfer them to customer service).

So what you have learnt will be useful in your contact center.

By the way, we should discuss the rest of your script. That % allocation node is not how you want to reach your two VXML servers.

Regards,

Geoff

View solution in original post

That % allocation


* Why?

I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?

There are three totally separate cases we have to deal with. Let's examine them.

1. Microapps

2. CVP VXML (Audium) applications

3. Playing WAV files from within the CVP VXML applications.

1. Microapps

The CVP Call Server has a retry mechanism built in that you want to make use of. The way this works is when the Call Server builds the VXML page for Play Media, Menu, Get Digit etc. prompts and passes this to the IOS Voice Browser for rendering, it detects a bad fetch at the voice gateway and rebuilds the page in a special way and resubmits it.

When the Call Server builds the page for the first time, it takes whatever is in the media_server ECC variable, the app or sys media_lib ECC variable depending on the config of the microapp, and the locale ECC variable and builds a URL to the WAV file. If the media_server does not start with http:// it is prepended, so don't supply this in that variable. Basically we will get for the full URL of the prompt aaa.wav

http://///aaa.wav

This goes over to the gateway. If you have the IP address in the it works just fine and dandy. So you may think this is correct. But the problem occurs if the Web server dishing up WAV files is down.

The Call Server detects the bad fetch failure at the gateway and rebuilds the URL like this:

http://-backup///aaa.wav

Lets say say locale=en-us and app_media_lib=app, which are the defaults.

If you used the IP address (say A.B.C.D) for the ECC variable, then you will get http://A.B.C.D-backup/en-us/app/aaa.wav, and that's not going anywhere good.

But remember who has to play the VXML - it's the gateway. So we could use a keyword in the ECC variable and have the "ip host" table resolve the keyword. Normally we see Cisco documentation use the keyword "media", but it could be anything. So if we set the ECC variable media_server to "media" then the URL created is

http://media/en-us/app/aaa.wav

and if the voice gateway has

ip host media A.B.C.D

then the call will resolve to the Web server A.B.C.D and all is just as before. But now examine the failure case. The Call Server does its usual trick of appending the "-backup" and turns the URL into

http://media-backup/en-us/app/aaa.wav

and if we have another entry in the "ip host" table

ip host media-backup W.X.Y.Z

we have just achieved fault tolerance on microapps.

In order to spread the load across your Web servers, configure one gateway with

ip host media A.B.C.D

ip host media-backup W.X.Y.Z

and the other gateway with

ip host media W.X.Y.Z

ip host media-backup A.B.C.D

Always do your gateways in pairs like this at the branch offices.

2. CVP VXML (Audium) applications

For CVP VXML applications, you are going to set the ECC variable media_server using a different keyword - say "cvpvxml" in the form

http://cvpvxml:7000/CVP

app_media_lib MUST be "..", the locale should not be defined (the deafult of en-us wil be used) and the microapp is GS,Server,V. Assume the ToExtVXML[0] variable is "application=MyApp". The Call Server munges this all together in exactly the same way as above

-backup//

and comes up with

http://cvpvxml:7000/CVP/en-us/../Server?application=MyApp

The ".." cancels the locale en-us, so we have

http://cvpvxml:7000/CVP/Server?application=MyApp

Now if the ip host table has an entry

ip host cvpvxml L.M.N.O

then we get http://L.M.N.O:7000/CVP/Server?application=MyApp

and we are off to the races. If for some reason the VXML server is not running, a bad fetch is returned, and the Call Server is notified and it rebuilds the URL and resubmits teh VXML page. It looks for a colon in the media_server and inserts the "-backup" before that, so it deals with this case nicely and we get

http://cvpvxml-backup:7000/CVP/Server?application=MyApp

and now a second entry in the ip host table

ip host cvpvxml-backup E.F.G.H

takes us to http://E.F.G.H:7000/CVP/Server?application=MyApp

Cisco say that you should catch the failure of the Run External Script on the GS,Server,V and retry, but I have not found that necessary. Again, you want to configure your gateways in pairs to distribute the load across the VXML servers. Almost always you are going to have a pair of gateways at the branch office, so it will work out for you.

If you have ONLY coresident Call Server/VXML servers you can use the trick described in the CVP 7.x SRND on page 12-2 using the Call Routing client name as the media_server and defining that on the gateway in the ip host table. Be aware of the restrictions on the characters allowed.

This only works if all Call Servers have VXML servers. But it's a nice feature that could work for you, because the Gatekeeper will only send the call to a Call Server that's on-line, so at least we know the box is up. Doesn't mean that VXML is up, but it's  a start.

3. Playing WAV files from within the CVP VXML applications.

When Playing WAV files from within the CVP VXML applications. Normally you set the default audio path in your Studio app to something like, the follwing, using an IP address of the Web server

http://S.T.U.V/en-us/app/myapp/

and then each audio element lists just a WAV file like aaa.wav

If the IIS at S.T.U.V is down, there is a failure and you cannot recover. The -backup is a feature of the CVP Call Server, and not the VXML Server.

If your Media Servers are all co-resident with your Call Servers, you can use the trick described in the SRND 12-2 to redefine the default media path with an Application Modifier using substitution.

Using a CSS

If you are using a CSS for your Web server and CVP VXML server you would adopt a slightly different strategy on the gateway, but your ICM scripting would remain as above. Say the VIP (virtual IP address) for the Web servers is J.K.L.M and the VIP for the CVP VXML Servers is R.S.T.U, then the ip host table would look like

ip host media J.K.L.M

ip host media-backup J.K.L.M

ip host cvpvxml R.S.T.U

ip host cvpvxml-backup R.S.T.U

In your Studio apps you can just define the default audio path to the VIP and fault tolerance is achieved.

The CSS is far and away the best way, as load balances as well as building fault tolerance.

Regards,
Geoff

View solution in original post

SayItSmart, by default when I am installing the CVP VXML, I am finding it under the directory common\lib and not under the classes!

I'm not referring to a Cisco provided JAR. When I said:

"reusable components including SayItSmart and dynamic configuration classes should go in common\classes"

my SayItSmart reference there was to special SayItSmart classes that you have built.

Say you want to read back alphabetic characters (not digits) to the customer that you have retrieved from the database, like a number plate string - Cisco don't provide one of those, so you will have to make one, if you need that function.

If you do, your SayItSmart class will go in VXMLServer\common\classes.

As I understand that compiling the classes on the java 1.5 is mandatory, correct?

I would be repeating myself if I said "yes". How about if I say - too right?

From the other side, what I see in the VXML Server is JRE and JDK, and this JRE is under C:\Cisco\CVP\jre as u can see below in the picture, so any advise regarding this point?

What's your question? A 1.5 JRE with a 1.5 JDK. Sounds good, doesn't it?

Another thing, any need to place any configurations (related to path or something else that java will need it)?

If you are using JNDI, Connection Pooling and the built in Database Element, your SQL jar (Microsoft, Oracle, MySQL) must go in VXMLServer\Tomcat\common\lib.

If you are using JAXB (Java XML Binding), you will find that the JAXB JARs want to be in VXMLServer\Tomcat\common\endorsed.

Be aware that using CVP VXML, Tomcat and class loaders can sometimes be tricky - very tricky indeed. Good luck.

Regards,

Geoff

View solution in original post

16 Replies 16

geoff
Advocate
Advocate

Why don't you post the entire "show run"?

If the application section is configured as follows:

application

service new-call flash:bootstrap.vxml

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service cvperror flash:cvperror.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service handoff flash:handoff.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

service vru-leg flash:bootstrap.tcl

  paramspace english index 0

  paramspace english language en

  paramspace english location flash

  paramspace english prefix en

Then you need your dial-peer to call vru-leg.

After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)

Regards,

Geoff

geoff
Advocate
Advocate

The syntax to load an application is something like "call voice application load APP"

Regards,

Geoff

Dear Geoff;

I think maybe we reached to the problem.

Because I checked the sizes of the files in the flash and it differs than those on the Consol. Actually other colleage prepared the voice gateway and did not expect this !

Now I loaded them, but did not understand what u mean by:

After you configured the applications, did you load them individually or reboot the gateway (which willl load them all)


* What is the correct?

Also I did not get this command "call voice application load APP", when to use it? Actually did not find it in the voice gateway.

Appreciate ur kindly help.

Regards

Bilal

Because I checked the sizes of the files in the flash and it differs than those on the Consol. Actually other colleage prepared the voice gateway and did not expect this !

I was thinking about that at the coffee shop. 

I was wondering about the "isn-vxml" thing and wondered if you were perhaps using OLD .vxml and .tcl files on the gateway. Then I looked at the flash listing and see that the files are from 2001. That can't be right.

Either the time setting on the gateway is wrong (and I think it is) or you are still using files from CVP 3.x.

Let's look at one. bootstrap.vxml from CVP7 is 5044 bytes. What do you have?

2763 Nov 28 2001 08:21:16 +03:00 bootstrap.vxml

Regards,

Geoff

Dear Geoff;

I have to thanks u and ur help and the gr8 hands u put with us.

The problem was in the application files that should be loaded, i uploaded the corrected one.

But, u know: I was having a lot of wrong in my configuration and this problem pushed me to resolve it .. words are not enough to say Thanks for you.

Such person like u, he has to buy Cisco he he he

About the call application voice load app_name, really I tried and I was trying to give the name of the file complete with the extension and even without the extension, but it was giving me that script is not defined ! I do not know why.

So I did reload .. and it is working now ..

Also I removed the add ip host isn-vxml and it is working fine ...

By the way, it is working with one Send To VRU node.

Again, Thanks Geoff.

Regards

Bilal

Trust me on this - use two Send To VRU nodes. Everything is cleaner that way.

Even when you come in from the PSTN, use a Send To VRU with an End on the failure port (the X) so that survivability will kick in on the gateway if the bootstrap fails.

This is the RIGHT way to do it. Don't rely on the implicit Send to VRU - it occurs anyway, as I said. But the best design is to insert the node as the VERY FIRST node in a CVP script.

Ones that come from the CUCM should have two Send To VRU nodes. Put a comment in so others know what you are doing.

Regards,

Geoff

About the call application voice load app_name, really I tried and I was trying to give the name of the file complete with the extension and even without the extension, but it was giving me that script is not defined ! I do not know why.

Not the file name - the name of the application - the "service".

Regards,

Geoff

I can't recall the syntax exactly - it could be "call application voice load SERVICE_NAME". Anyway, reload will load them all.

Regards,

Geoff

Dear Geoff;

About having two Send to VRU:

As u know that using the extension was for testing purposes, but originally the calls should be originated by the voice gateway when the E1 will reach. If it will originate from the voice gateway, then one Send to VRU is enough, u do not think so?

Regards

Bilal

Absolutely - for calls from the PSTN, the first node should always be the Send To VRU. As I said, the X will go to an End node (not a Release) so that survivability is invoked on the voice gateway should Send To VRU fail.

But you will need two Send To VRU nodes for CUCM-generated calls, as you have proven. And you will need this for warm transfers from agents to the queues, or from inbound calls from IP phones to the queues (say a non-agent gets a customer call and they want to transfer them to customer service).

So what you have learnt will be useful in your contact center.

By the way, we should discuss the rest of your script. That % allocation node is not how you want to reach your two VXML servers.

Regards,

Geoff

Dear Geoff;

As I said, the X will go to an End node (not a Release) 

* OK this I will note it and modify.

That % allocation 


* Why?

I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?

Regards

Bilal

That % allocation


* Why?

I was need to ask about the media server (the server that we place our media on it), this server IP address: where I have to place its IP address?

There are three totally separate cases we have to deal with. Let's examine them.

1. Microapps

2. CVP VXML (Audium) applications

3. Playing WAV files from within the CVP VXML applications.

1. Microapps

The CVP Call Server has a retry mechanism built in that you want to make use of. The way this works is when the Call Server builds the VXML page for Play Media, Menu, Get Digit etc. prompts and passes this to the IOS Voice Browser for rendering, it detects a bad fetch at the voice gateway and rebuilds the page in a special way and resubmits it.

When the Call Server builds the page for the first time, it takes whatever is in the media_server ECC variable, the app or sys media_lib ECC variable depending on the config of the microapp, and the locale ECC variable and builds a URL to the WAV file. If the media_server does not start with http:// it is prepended, so don't supply this in that variable. Basically we will get for the full URL of the prompt aaa.wav

http://///aaa.wav

This goes over to the gateway. If you have the IP address in the it works just fine and dandy. So you may think this is correct. But the problem occurs if the Web server dishing up WAV files is down.

The Call Server detects the bad fetch failure at the gateway and rebuilds the URL like this:

http://-backup///aaa.wav

Lets say say locale=en-us and app_media_lib=app, which are the defaults.

If you used the IP address (say A.B.C.D) for the ECC variable, then you will get http://A.B.C.D-backup/en-us/app/aaa.wav, and that's not going anywhere good.

But remember who has to play the VXML - it's the gateway. So we could use a keyword in the ECC variable and have the "ip host" table resolve the keyword. Normally we see Cisco documentation use the keyword "media", but it could be anything. So if we set the ECC variable media_server to "media" then the URL created is

http://media/en-us/app/aaa.wav

and if the voice gateway has

ip host media A.B.C.D

then the call will resolve to the Web server A.B.C.D and all is just as before. But now examine the failure case. The Call Server does its usual trick of appending the "-backup" and turns the URL into

http://media-backup/en-us/app/aaa.wav

and if we have another entry in the "ip host" table

ip host media-backup W.X.Y.Z

we have just achieved fault tolerance on microapps.

In order to spread the load across your Web servers, configure one gateway with

ip host media A.B.C.D

ip host media-backup W.X.Y.Z

and the other gateway with

ip host media W.X.Y.Z

ip host media-backup A.B.C.D

Always do your gateways in pairs like this at the branch offices.

2. CVP VXML (Audium) applications

For CVP VXML applications, you are going to set the ECC variable media_server using a different keyword - say "cvpvxml" in the form

http://cvpvxml:7000/CVP

app_media_lib MUST be "..", the locale should not be defined (the deafult of en-us wil be used) and the microapp is GS,Server,V. Assume the ToExtVXML[0] variable is "application=MyApp". The Call Server munges this all together in exactly the same way as above

-backup//

and comes up with

http://cvpvxml:7000/CVP/en-us/../Server?application=MyApp

The ".." cancels the locale en-us, so we have

http://cvpvxml:7000/CVP/Server?application=MyApp

Now if the ip host table has an entry

ip host cvpvxml L.M.N.O

then we get http://L.M.N.O:7000/CVP/Server?application=MyApp

and we are off to the races. If for some reason the VXML server is not running, a bad fetch is returned, and the Call Server is notified and it rebuilds the URL and resubmits teh VXML page. It looks for a colon in the media_server and inserts the "-backup" before that, so it deals with this case nicely and we get

http://cvpvxml-backup:7000/CVP/Server?application=MyApp

and now a second entry in the ip host table

ip host cvpvxml-backup E.F.G.H

takes us to http://E.F.G.H:7000/CVP/Server?application=MyApp

Cisco say that you should catch the failure of the Run External Script on the GS,Server,V and retry, but I have not found that necessary. Again, you want to configure your gateways in pairs to distribute the load across the VXML servers. Almost always you are going to have a pair of gateways at the branch office, so it will work out for you.

If you have ONLY coresident Call Server/VXML servers you can use the trick described in the CVP 7.x SRND on page 12-2 using the Call Routing client name as the media_server and defining that on the gateway in the ip host table. Be aware of the restrictions on the characters allowed.

This only works if all Call Servers have VXML servers. But it's a nice feature that could work for you, because the Gatekeeper will only send the call to a Call Server that's on-line, so at least we know the box is up. Doesn't mean that VXML is up, but it's  a start.

3. Playing WAV files from within the CVP VXML applications.

When Playing WAV files from within the CVP VXML applications. Normally you set the default audio path in your Studio app to something like, the follwing, using an IP address of the Web server

http://S.T.U.V/en-us/app/myapp/

and then each audio element lists just a WAV file like aaa.wav

If the IIS at S.T.U.V is down, there is a failure and you cannot recover. The -backup is a feature of the CVP Call Server, and not the VXML Server.

If your Media Servers are all co-resident with your Call Servers, you can use the trick described in the SRND 12-2 to redefine the default media path with an Application Modifier using substitution.

Using a CSS

If you are using a CSS for your Web server and CVP VXML server you would adopt a slightly different strategy on the gateway, but your ICM scripting would remain as above. Say the VIP (virtual IP address) for the Web servers is J.K.L.M and the VIP for the CVP VXML Servers is R.S.T.U, then the ip host table would look like

ip host media J.K.L.M

ip host media-backup J.K.L.M

ip host cvpvxml R.S.T.U

ip host cvpvxml-backup R.S.T.U

In your Studio apps you can just define the default audio path to the VIP and fault tolerance is achieved.

The CSS is far and away the best way, as load balances as well as building fault tolerance.

Regards,
Geoff

Dear Geoff;

As in the both cases of:

CVP VXML (Audium) applications

Or

Playing WAV files from within the CVP VXML applications.

We are running VXML application, correct? So, what is the difference between playing the wave file in first case (from the ICM script) and in second case (by determining it through the VXML script it self)?

And why u called it Audium in first case?

I got ur point about the backup and redundancy, it is very magic and fully thanks for this gr8 notes and information that it is important to be used.

Now, from the other side: I am facing a problem with my VXML application which its name is KTCIVR. Actually it is running on the production environment which is old version environment (CVP version 3.1.2), and in this application there is java classes. In the production environment, the used java version is 1.4 and it is JDK while in the new environment it is JRE 1.5. We compiled the KTCIVR on the new studio version 7 and deployed to the VXML server, but at the server we have the following error as in the picture:

Actually some of the java classes are requesting a jar files (for example, when need to connect with the database, so ODBC driver is required, and for this thing we need a jar file), when we place these jar files in the lib directory (under the commond directory), then all the applications will stop working (including the HelloWorld application). So, I decided to place these jar files in the lib directory but under the application it self (and not under the common), in this case the other application is working, but the KTCIVR application does not work (still displaying the above error message as in the picture).

Then I tried to do compilation again for the application with these jar files (under the lib directory) on the CVP Studio 7 and deploying it, but same error !!

I feel that there should be a place to configure the path to where these jar files should be placed to be able to load it. But where I can do this?

What could be my problem?

Why when placing these jar files under the lib directory that is under the common directory, then all applications stop working?

Again, these jar files that we are placing it in the lib directory, it is used at the production which is running the old version of VXML (version 3) and it has the JDK of version 1.4. Some of these JAR files are done by our team and some of these JAR files were downloaded from the Internet.

At the same time, any application does not have Java is working fine (as HelloWorld), and if it has Java classes, then it is working as long as there is not jar files are used. When there is a jar files are used, then the above error appears.

Where the Jar should be located? What I have to configure a path for it? Any issue about versions and compilation? Any special setting is required?

Thanks for the gr8 help.

Regards

Bilal

Now you are getting into an area where you are really going to earn your pay, and you can't get much help from Cisco TAC. You have a big application with lots of custom classes and JARs and when the class loader barfs like that (as we see in your error message), you have to sort out where the problem is, and the only satisfactory way is to bring the class files and jars in one at a time until the loader fails.

However, before you start, you MUST be aware that the CVP 7 VXML server is built on the 1.5 JDK, not the 1.4.2 JDK of CVP 3.x, so all Java source code must be recompiled with a 1.5 Java compiler and JAR'd again. Any JARs downloaded from the Internet will have to be verified to see if there is a 1.5 version.

Now the right place for those JARs is VXMLServer\common\lib, reusable components including SayItSmart and dynamic configuration classes should go in common\classes, in-line code in application\KTCIVR\java\classes.

Regards,

Geoff

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community:

Recognize Your Peers