Dynamically loading functionality to an application

Hello, [first time post]
My goal is to find, if possible, a solution to my desire.
I have an application, called App. This application will perform certain algorithms on a test set. I would like to have a way to dynamically add new algorithms to the application without re-compiling the application. For example the main application code would look something like:
LoadAllAlgorithmsInDiry('./Algorithms');
At which point the function would:
Menu aMenu.GetAlgorithmMenu();
aMenu.add(newAlgorithmItem);
My problem lies in the fact that I don't know if RMI, is what I need, or some other API.
Should each algorithm be its own application? Or can I simply create a class with a standard API for the application?
Any help in this matter would be appreciated.

Let's clarify a bit..Minor mistakes aside, thank you for the clarification.
I stumbled upon this thread since I'm doing something similar.
My question is... Is there a "tidy" way to arrive at a list of Algorithm implementations in a given folder/directory?
ie I would like the users of my app to be able to drop various class files, java files and jar files (containing one or more java/class files) in a predetermined folder. Each giving a unique Algorithm implmentation. Then when the app is started up it would search for all the user-defined classes and add them to a menu or something like your example suggested.

Similar Messages

  • Integrate Dataworkshop Data Load functionality into an Application

    Is it possible to reuse the Data Load functionality provided by the Dataworkshop inside an application. I'm writing a batch processing app and it would be great to have reuse the load capability that already exists, perhaps by default in target tables and attributes, are there any api's available to allow this?
    Thanks in advance for your help,
    Matt

    Just a small comment on the solution provided at the link above Jari - it is feasible to have a carriage return within double quotes and it not be the end of the line. The solution above breaks if that happens.
    You could add a few lines like:
             if v_char = '"' then
                 b_insidequotes:= not b_insidequotes; -- Toggle Inside Quotes
             end if;
      IF v_char = CHR (10) and not b_insidequotes AND v_position < v_clob_len OR v_position = v_clob_len
             THENThis will handle any 'Notes' type fields you may have in your CSV file.
    Cheers,
    Matt

  • IAS 6.5 dynamic loading problem

    Hi all,
    I have a IAS 6.5 with enable dynamic loading features installed on SUN Solaris platform. This application server had deployed 2 applications. My problem is my servlet class could not be dynamic loading unless restart the application server. Here is my class path setting inside the iasenv.ksh
    CLASSPATH=:/opt/iplanet/ias6/ias/APPS/modules/icbcobs/WEB-INF/classes:/opt/iplanet/ias6/ias/APPS/modules/ess/WEB-INF/classes:/opt/iplanet/ias6/ias/APPS/modules/ess/config
    ## ORBIX configuration settings
    ## These values are to be set for ORBIX configuration
    IT_PRODUCT_DIR=/opt/iona
    IT_LICENSE_FILE_DIR=/etc/opt/iona
    ORBIX_DOMAIN_NAME=localhost
    ORBIX_CONFIG_DOMAINS_DIR=/etc/opt/iona/domains
    ORBIX_LOADBALANCING=true
    ORBIXCLASSPATH=$IT_PRODUCT_DIR/orbix_art/1.2/classes/omg.jar:$IT_PRODUCT_DIR/orbix_art/1.2/classes/orbix2000.jar:$IT_PRODUCT_DIR/orbix_art/1.2/localhost:$IT_LICENSE_FILE_DIR
    ## Visibroker configuration settings
    ## These values are to be set for Visibroker configuration
    VISIBROKER_PRODUCT_DIR=/opt/inprise/vbroker
    VBROKER_ADM=$VISIBROKER_PRODUCT_DIR/adm
    OSAGENT_PORT=14000
    export VBROKER_ADM
    export OSAGENT_PORT
    if [ "$script" = "kjs" ]
    then
    JVMARGS=
    if [ "$sun" ]
    then
    ## Internal JVM bug workaround for Solaris JDK1.2.2_05a
    ## Disable Parallel Garbage Collection to workaround the
    ## occasional JVM Crash. Needs to go once the bug is fixed
    JVMARGS=no_parallel_gc
    fi
    fi
    if [ "$script" = "beanreg" -o "$script" = "jspc" ]
    then
    JAVA_ARGS=
    [ "$sun" ] && export JAVA_ARGS="-Xms32m -Xmx64m"
    fi
    export NLSPATH=$IAS_ROOT/kdb/encina/%L/%N
    export LANG=${LANG:-C}
    PATH=$IAS_ROOT/bin:${IAS_ROOT}/APPS/bin:$JAVA_EXECS_DIR:$PATH
    IASPATHS=
    [ -n "$ORACLE_HOME" ] && IASPATHS=$IASPATHS:$ORACLE_HOME/bin
    [ -n "$SYBASE" ] && IASPATHS=$IASPATHS:$SYBASE/bin
    [ -n "$INFORMIXDIR" ] && IASPATHS=$IASPATHS:$INFORMIXDIR/bin
    [ -n "$DB2DIR" ] && IASPATHS=$IASPATHS:$DB2DIR/bin
    [ -n "$IASPATHS" ] && PATH=$IASPATHS:$PATH
    # Union of all CLASSPATHS
    If I didn't set my own classpath , since I've 2 applications inside the one server , the dynamic loading was working fine in both servlet and JSP. Due to there were some class files with same name inside the 2 applications, so I need specifiy the exact class path to avaid the mis-using. However, after I specify the classpath, the servlet dynamic loading was working failure. Any solution ?
    Thanks.

    check the dynamic reloading docs at
    http://docs.sun.com/source/816-5786-11/jpgApxReload.html#14358
    Please also check the limiations of Dynamic Reloading

  • Dynamically loading the MathScript Node

    Hi - Is it possible to dynamically load script into the Mathscript Node at Run time. I see that you can use define functions and paths and things . But being a newbie to Mathscript could all this hang together to make dynamic loading a possibility and how?
    thanks dht 

    Hi,
      unfortunately the node doesn't support run-time dynamic loading of scripts. You can load variable values with the load function, but not scripts.
    http://zone.ni.com/reference/en-XX/help/371361A-01/lvtextmath/msfunc_load/
    http://zone.ni.com/reference/en-XX/help/371361A-01/lvhowto/saving_loading_scripts/
    Depending on your application, you could use a case statement to decide between several pre-built (and possibly compiled) mathscript nodes, and acheive the functionality that way.
    Another option might be to use the formula vi's instead, although this will require a more complex architecture to parse the text file you'd generate.
    For more information on MathScript, please see the following link
    http://zone.ni.com/devzone/devzoneweb.nsf/Opendoc?openagent&568C773718B080F286257096005BD314
    Hope that helps
    Sacha Emery
    National Instruments (UK)
    // it takes almost no time to rate an answer

  • LabView 8.20 MathScript Dynamic Loading

    Does anyone know if LabView 8.20 MathScript supports dynamically loading m-files? I would like to be able to be prompted for a path to an m-file, choose the m-file and have LabView compile and run the script.
    For the sake of this question, lets say that I am adhering to some "function prototype", assuring that my loaded m-file has input and output variables that match those set up on my MathScript node.

    Your particular use case is very interesting as we have been thinking a lot about it lately.  There is no really easy way to do what you wish.  Could you describe your application a bit more?  Perhaps we can discover a better solution.
    You mention that you won't know the functions that will be used in advance.  Unfortunately, this will have some performance implications because any new script will need to be compiled before it can execute.  If you did know the functions you were going to call, you could use some if or switch logic to implement a selector to choose among the different m-files.
    It isn't possible to place the script into a MathScript node when the VI is running.  Instead, what you'll want to do is bring up the file dialog for the user to choose a file.  You can then use LabVIEW's Strip Path primitive to separate the path from the m-filename.  You will also want to remove the .m extension from the filename so you just have the function name.  You can pass the path and the function name into a MathScript Node that has all the other inputs and outputs configured per the common prototype.  Simply call the 'path' function in MathScript to set the value you passed in to be the current path.  Then, build a string by concatenating the output variables with the function name and the input parameters, e.g.
    str = ['a = ' func_name '(x, y, z)']
    With the path set, MathScript will be able to locate the function you are calling.  To execute the function, use the 'eval' command.  The 'eval' command also takes a slight performance hit in order to evaluate the string.  If you also wanted to require that all functions have the same name (so that they are only differentiated by their location on the filesystem), you could improve performance slightly.  By naming all the functions 'fname,' you could replace the string concatenation and eval call with a simple call to the function, .e.g.
    a = fname(x, y, z)
    and MathScript would use the function found in the current path.
    Please let me know if you have further questions.
    Grant M.
    Staff Software Engineer | LabVIEW Math & Signal Processing | National Instruments

  • Configuring dynamically loaded VI's search directory for both 64 and 32bit

    Background:
    I have an application that has been developed, built in LV2012 32bit.  It needs to run on a 32bit and 64bit machine (Win7, I understand the application itself will only ever be 32bit, but it needs to run in both environments).  The application dynamically loads a bunch of VI's which are raw vi's on disk (think just copy directory of files over from developer machine to the target machine that already has a exe running -- and just a copy, not a build of any sort).  All of these dyanamically loaded vi's at some point reference vi.lib, so I have a few things I need to do to the application to get it to work
    a) within the .ini file for the running exe viSearchPath=......C:\Program Files (x86)\National Instruments\LabVIEW 2012\<<bunch of directories>>\*
    b) within the VI object cache directory, I have a lvDistPath.txt file that includes C:\Program Files (x86)\National Instruments\LabVIEW 2012
    This works just fine for when I deploy these files and run the application on a 64bit version of Win7.  However, when I try to run the application on a 32bit version of Win7, it breaks -- LabVIEW is installed in C:\Program Files\.... (no (x86)).
    I am stuck with the dynamic loading architecture we have, and I can't start making changes to my code because it's not my code that is specifying where to find the files -- it's LabVIEW's internal searching algorithm.
    What can I do (short of managing two separate .ini & .txt configuration files, one set each for x86 and 64bit and managing two separate installers) to get around this problem?

    It sounds like you really don't have a problem with a 32 bit app vs. a 64 bit app.  It sounds like a problem with file paths being different on a 32 bit app on 32 bit windows vs. a 32 bit app on 64 bit windows.
    Two things you could do.
    1.  (Not sure this would work.)  Put 2 paths in the search directory, one for c:\program files path for 32 bit windows, and one for c:\program files (x86) for 64 bit windows.  One or the other will exist.  I don't know if something will hangup if it searches the other path that doesn't exist.
    2.  Since you are dynamically loading the VI's, you should specify the path when you are dynamically loading them rather than having LV search for them.  There is a function called Get System Info in the File I/O >> File Constants palette that will return the path to the Program Files folder for you environment so that you can build on that to get to your dynamic VI path.

  • Anyway to have JDeveloper dynamically load BC4J components in memory?

    We are dealing with a large BC4J based application that contains large amount of application modules. So far, 300 application modules and total 4000 BC4J objects have been created. The size of the application still keeps growing daily... may up to twenty times than what we are having right now.
    While the application size growing, some unusual problem comes out. The biggest problem is that it makes JDeveloper very sluggish. It takes 15 minutes to just open JDeveloper and may need a few minutes to open the application module editor. (FYI: in our team, most developers have 1G memory and 1.8G CPU or up.) This is probably still OK for right now, but it will become a big problem later when the project size grows.
    When we analysis the project structure, we know that most of time, developer does not need to load all the application modules. For example, we have a core package that contains about 30 application modules. This core package needs to be shared and should be loaded. But, the other nine packages contain about 30 application modules each do not need to be loaded into memory at the same time in most cases. Since BC4J is XML based, we could not find a way to just partially load those application modules, especially when there’s cross references between them.
    When we check the project.jpr file, looks like all BC4J objects are referenced there. We have 40K lines in our project.jpr file now. When open JDeveloper, we believe JDeveloper will try to load all referenced BC4J XML content into memory. This consumes 500M memory and makes the overall performance very sluggish. The situation may become even worse when the project size keeps growing. For example, we cannot have 5000M (5G) memory in a development machine for 3000 application modules.
    We do know that by checking out the "ScanSource Paths to Determins Project Contents" in the Input Paths of Project Settings, we can short the JDeveloper’s open time, but this will not give BC4J relationship information and some other useful information… Not a practical solution.
    So, any idea to make JDeveloper dynamically loaded BC4J based on need?
    We’ve tried a few ways. One is to partition the application into different project and import the core one into the other projects. Only open the project in workspace when need. But this is not officially documented by Oracle and we are not sure whether it is possible/correct or not. Another thought is to remove the NOT-CURRENTLY-USED package from the project. But JDeveloper only support file level remove.
    Any help on this dilemma will be highly appreciated.
    Thanks,
    Charles

    The package is the unit of loading in the IDE for ADF business components.
    To edit components, they must belong to the project.
    To refer to components in a read-only way, they can be imported. This allows other editable or read-only components to refer to them without allowing the imported components to be edited.
    Both editable and imported components need to be loaded in memory to use them, so you can save memory at design time by creating projects that leave out as many packages as possible.
    Is there a way we can get your existing project in house to study its design time performance?

  • Spry Tabbed panels + Progressive Enhancement and Dynamic Loading of Content With Spry

    Is there any way to combine tabbed panels together with "Progressive Enhancement and Dynamic Loading of Content With Spry"?
    Visit: http://labs.adobe.com/technologies/spry/articles/best_practices/progressive_enhancement.ht ml#updatecontent
    And click on the "Using Spry.Utils.updateContent()"
    The 3rd example shows how to use a fade transition whenever the content changes.
    I already have tabbed panels. My menu contains buttons (on tabs) and my Content div contains the panels.
    Tabs code;
    <ul class="TabbedPanelsTabGroup">
              <li class="TabbedPanelsTab">
                   <table class="Button"  >
                        <tr>
                        <td style="padding-right:0px" title ="Home">
                        <a href="javascript:TabbedPanels1.showPanel(1);" title="Home" style="background-image:url(/Buttons/Home.png);width:172px;height:75px;display:block;"><br/></a>
                        </td>
                        </tr>
                   </table>
              </li>
    etc
    etc
    etc
    and the panel code:
    <div class="TabbedPanelsContent" id="Home">
         CONTENT
    </div>
    I hoped i can use the example code from the link into my tabbed panels.
    I thought this code:
    onclick="FadeAndUpdateContent('event', 'data/AquoThonFrag.html'); return false;"
    could be added to the tab code like this:
    <a href="javascript:TabbedPanels1.showPanel(1);" onclick="FadeAndUpdateContent('event', 'data/AquoThonFrag.html'); return false;" title="Home" style="background-image:url(/Buttons/Home.png);width:172px;height:75px;display:block;"><br/></a>
    But the content doesnt fade...
    I know i need to change the header etc.
    The following is from the link:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:spry="http://ns.adobe.com/spry">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Aquo Events</title>
    <script src="../../../includes/SpryEffects.js" type="text/javascript"></script>
    <script src="../../../includes/SpryData.js" type="text/javascript"></script>
    <script type="text/javascript">
    <!--
    function FadeAndUpdateContent(ele, url)
    try {
         Spry.Effect.DoFade(ele,{ duration: 500, from: 100, to: 0, finish: function() {
              Spry.Utils.updateContent(ele, url, function() {
                        Spry.Effect.DoFade(ele,{ duration: 500, from: 0, to: 100 });
    }catch(e){ alert(e); }
    -->
    </script>
    <style type="text/css">
    /* IE HACK to prevent bad rendering when fading. */
    #event { background-color: white; }
    </style>
    </head>
    So i changed my header etc, put the SpryEffects.js and SpryData.js into position and nothing changed...
    Is there a way to keep my tabbed panel (or change as less as possible) and let
    A. The fade work
    B. The loading work.
    The problem now is that it loads all pages instead of only the home. Therefore i wanted this Progressive Enhancement.
    And the fading part is just because its nice...

    It doesnt show in the post but off course i changed this link;
    "data/AquoThonFrag.html"
    into;
    "javascript:TabbedPanels1.showPanel(1);"
    I must say i dont know if this even works...

  • How can you display a dynamically loaded vi to the Web Server?

    I am working with LabView 6.1 and the Web Server. I can call a subvi and have it display on a remote machine using a browser with no problem. But what I would like to do is dynamically load and run a vi and have it display on the remote computer using only a browser. I have tried a small example of a front panel that invokes the run vi method (and fp.open prop) on another vi when a button is pressed, but the invoked vi is displayed only on the local computer. Is there any way of viewing dynamically loaded vi's on a remote machine without having a copy of LabView running on it?

    If i understand your question correctly, you want to monitor vi that are dynamically loaded on a remote machine without having LabVIEW installed on the machine from witch you want the monitor. I don't think it's possible how ever a good reference book would be Internet applications in LabVIEW. You can find it on BARNES&NOBLE.
    Hope i could help

  • How to dynamically load jar files - limiting scope to that thread

    Dynamically loading jar files has been discussed a lot. I have read a quite a few posts, articles, and demo code for doing just that. However, I have yet to find a solution to my problem. Most people modify their system class loader and are happy. I have done that and was happy for a time. Occasionally, you will see reference to an application server or tomcat or some other large project that have successfully been able to load and unload jar files, allow for dynamic deployment of code, etc. However, I have not been able to achieve similar success; And my problem is much less complicated.
    I have an application that executes a thread to send a given file/message to a standard JMS Server Queue. Depending on the parameters selected by the user, this thread may need to communicate with one of a number of JMS Servers, ie. JBoss, WebLogic, EAServer, Glassfish, etc. All of which can be done with the same code, but each needs to load their own flavor of JMS Client Jar files. In this instance, spawning a separate JVM for each communication would work from a classloader perspective. However, I need to keep it in the family and run under the same JVM, albeit each JMS Server Connection will be created and maintained in separate Threads.
    I am close, I am doing the following...
    1. Creating a new URLClassLoader in the run() method of each thread.
    2. Set this threads contextClassLoader to the new URLClassLoader.
    3. Load the javax.jms.JMSException class with the URLClassLoader.loadClass() method.
    4. Create an initialContext object within this thread.
    Note: I read that the initialContext and subsequent conext lookup calls would use the Thread�s
    contextClassLoader for finding/loading classes.
    5. Perform context.lookup calls for a connectionFactory and Queue name.
    6. Create JMS Connection, etc. Send Message.
    Most of this seems to work. However, I am still getting a NoClassDefFoundError exception for the javax.jms.JMSException class ( Note step #3 - tried to cure unsuccessfully).
    If I include one of the JMS Client jar files ( ie wljmsclient.jar for weblogic ) in the classpath then it works for all the different JMS Servers, but I do not have confidence that each of the providers implemented these classes that now resolve the same way. It may work for now, but, I believe I am just lucky.
    Can anyone shine some light on this for me and all the others who have wanted to dynamically load classes/jar files on a per Thread basis?

    Thanks to everyone - I got it working!
    First, BenSchulz' s dumpClassLoader() method helped me to visualize the classLoader hierarchy. I am still not completely sure I understand why my initial class was always found by the systemClassLoader, but knowning that - was the step I needed to find the solution.
    Second, kdgregory suggested that I use a "glue class". I thought that I already was using a "glue class" because I did not have any JMSClient specific classes exposed to the rest of the application. They were all handled by my QueueAdmin class. However...
    The real problem turned out to be that my two isolating classes (the parent "MessageSender", and the child "QueueAdmin") were contained within the same jar file that was included in the classpath. This meant that no matter what I did the classes were loaded by the systemClassLoader. Isolating them in classes was just the first step. I had to remove them from my jar file and create another jar file just for those JMSClient specific classes. Then this jar file was only included int custom classLoader that I created when I wanted to instantiate a JMSClient session.
    I had to create an interface in the primary jar file that could be loaded by the systemClassLoader to provide the stubs for the individual methods that I needed to call in the MessageSender/QueueAdmin Classes. These JMSClient specific classes had to implement the interface so as to provide a relationship between the systemClassLoader classes and the custom classLoader classes.
    Finally, when I loaded and instantiated the JMSClient specific classes with the custom classLoader I had to cast them to the interface class in order to make the method calls necessary to send the messages to the individual JMS Servers.
    psuedu code/concept ....
    Primary Jar File   -  Included in ClassPath                                                      
    Class<?> cls = ClassLoader.loadClass( "JMSClient.MessageSender" )
    JMSClientInterface jmsClient = (JMSClientInterface) cls.newInstance()                            
    jmsClient.sendMessage()                                                                      
    JMSClient Jar File  -  Loaded by Custom ClassLoader Only
    MessageSender impliments Primary.JMSClientInterface{
        sendMessage() {
            Class<?> cls=ClassLoader.loadClass( "JMSClient.QueueAdmin" )
            QueueAdmin queueAdmin=(QueueAdmin) cls.newInstance()
            queueAdmin.JMSClientSpecificMethod()
        }

  • The value returned from the load function is not of type numeric  errors after migration to Coldfusion 11

    I am currently testing our website with CF11. It is currently working with CF8 however after migrating it to a new server running CF11 I have encountered the following error.
    The value returned from the load function is not of type numeric.
    The error occurred in
    D:/Applications/CFusion/CustomTags/nec/com/objects/address.cfc: line 263
    Called from D:/Applications/CFusion/CustomTags/nec/com/objects/contact.cfc: line 331
    Called from D:/Applications/CFusion/CustomTags/nec/com/objects/user.cfc: line 510
    Called from D:/Applications/CFusion/CustomTags/nec/com/objects/user.cfc: line 1675
    Called from D:/website/NECPhase2/action.validate.cfm: line 54
    261 : <cfif isNumeric(get.idCountry)>
    262 : <cfset rc = this.objCountry.setID(get.idCountry)>
    263 : <cfset rc = this.objCountry.load()>
    264 : </cfif>
    265 : <cfset this.sPostcode = get.sPostcode>
    Have there been any changes between CF8 and CF11 that could  cause this error?
    Does anyone have ideas?

    This is the code in file object file country.cfc (nec.com.objects.country):
    <cfcomponent displayname="Country object" hint="This is a Country object, it allows you to access and set values in the Country.">
    <!---
    // Construct this object
    --->
    <cfset this.objFunctions = CreateObject( 'component', 'nec.com.system.functions' )>
    <cfscript>
      this.idCountryID = 0;
      this.sCountryName = "";
      this.sISOCode = "";
      this.sDHLCode = "";
      this.iErrorID = "";
    </cfscript>
    <!---
    // The following functions are the setters and getters. offering us a better way to get
    // at the contents of the object
    --->
    <!---
    // Getters
    --->
    <cffunction name="getID" displayname="Get ID" returntype="numeric" output="false" hint="This returns the ID of the current item.">
      <cfreturn this.idCountryID>
    </cffunction>
    <cffunction name="getsCountryName" displayname="Get sCountryName" returntype="string" output="false" hint="This gets the sCountryName value of this item.">
      <cfreturn this.sCountryName>
    </cffunction>
    <cffunction name="getsISOCode" displayname="Get sISOCode" returntype="string" output="false" hint="This gets the sISOCode value of this item.">
      <cfreturn this.sISOCode>
    </cffunction>
    <cffunction name="getsDHLCode" displayname="Get sDHLCode" returntype="string" output="false" hint="This gets the sDHLCode value of this item.">
      <cfreturn this.sDHLCode>
    </cffunction>
    <cffunction name="iError" displayname="Get iError" returntype="numeric" output="false" hint="This returns the iError of the current item.">
      <cfreturn this.iError>
    </cffunction>
    <!---
    // Setters
    --->
    <cffunction name="setID" displayname="Set ID" returntype="boolean" output="false" hint="This sets the ID value of this item.">
      <cfargument name="idCountryID" required="true" type="numeric" displayname="ID" hint="The ID to use.">
      <cfset this.idCountryID = arguments.idCountryID>
      <cfreturn true>
    </cffunction>
    <cffunction name="setsCountryName" displayname="Set sCountryName" returntype="boolean" output="false" hint="This sets the sCountryName value of this item.">
      <cfargument name="sCountryName" required="true" type="string" displayname="sCountryName" hint="The sCountryName to use.">
      <cfset this.sCountryName = arguments.sCountryName>
      <cfreturn true>
    </cffunction>
    <cffunction name="setsISOCode" displayname="Set sISOCode" returntype="boolean" output="false" hint="This sets the sISOCode value of this item.">
      <cfargument name="sISOCode" required="true" type="string" displayname="sISOCode" hint="The sISOCode to use.">
      <cfset this.sISOCode = arguments.sISOCode>
      <cfreturn true>
    </cffunction>
    <cffunction name="setsDHLCode" displayname="Set sDHLCode" returntype="boolean" output="false" hint="This sets the sDHLCode value of this item.">
      <cfargument name="sDHLCode" required="true" type="string" displayname="sDHLCode" hint="The sDHLCode to use.">
      <cfset this.sDHLCode = arguments.sDHLCode>
      <cfreturn true>
    </cffunction>
    <!---
    // Clear, to empty out the contents of this object
    --->
    <cffunction name="clear" displayname="Clear items Details" returntype="boolean" output="false" hint="Clears out all of the items details.">
      <cfscript>
       this.sCountryName = "";
       this.sISOCode = "";
       this.sDHLCode = "";
       this.iErrorID = "";
      </cfscript>
      <cfreturn true>
    </cffunction>
    <!---
    // The following functions deal with the load, save and deleting of objects
    --->
    <!---
    // Load
    --->
    <cffunction name="load" displayname="Load items details" returntype="numeric" output="false" hint="This loads in all the information about an item.">
      <cfset rc = this.clear()>
      <!---
      // First of all we need to get the name of the data source we are going to be using
      --->
      <cfscript>
      objDS = CreateObject("component","nec.com.system.settings");
      sDatasource = objDS.getDatasource();
    </cfscript>
      <!---
      // Check to see if it exists
      --->
      <cftry>
       <cfquery name="checkID" datasource="#sDatasource#">
        SELECT idCountryID
        FROM tblCountry
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("load: checkID: '#this.idCountryID#' #cfcatch.detail#");
        </cfscript>
        <cfset this.iErrorID = iErrorID>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfif not checkID.recordCount>
       <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         if(isDefined("session.afr")){
          whichOne = "#session.afr.getsAFRNumber()#";
         } else {
          whichOne = "";
         iErrorID = objError.addError("A Country with that id doesn't exists.[#this.idCountryID#][#whichOne#]");
        </cfscript>
       <cfset this.iErrorID = iErrorID>
       <cfreturn iErrorID>
      </cfif>
      <!---
      // If we got past all then then load in the details
      --->
      <cftry>
       <cfquery name="get" datasource="#sDatasource#">
        SELECT idCountryID, RTRIM(sCountryName) as sCountryName, RTRIM(sISOCode) as sISOCode, RTRIM(sDHLCode) as sDHLCode
        FROM tblCountry
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("load: get: #cfcatch.detail#");
        </cfscript>
        <cfset this.iErrorID = iErrorID>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfset this.idCountryID = get.idCountryID>
      <cfset this.sCountryName = get.sCountryName>
      <cfset this.sISOCode = get.sISOCode>
      <cfset this.sDHLCode = get.sDHLCode>
      <cfset this.iErrorID = "">
      <cfreturn true>
    </cffunction>
    <!---
    // Save
    --->
    <cffunction name="save" displayname="Save items Details" returntype="numeric" output="false" hint="Saves (to some source) the current details for the ID of the item.">
      <!---
      // First of all we need to get the name of the data source we are going to be using
      --->
      <cfscript>
      objDS = CreateObject("component","nec.com.system.settings");
      sDatasource = objDS.getDatasource();
    </cfscript>
      <!---
      // Now check to see if ithat ID exists
      --->
      <cftry>
       <cfquery name="checkID" datasource="#sDatasource#">
        SELECT idCountryID
        FROM tblCountry
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("save: checkID: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <!---
      // If it doesn't exist, then add the record, otherwise update the record
      --->
      <cfif not checkID.recordCount>
       <cfreturn this.add()>
      <cfelse>
       <cfreturn this.update()>
      </cfif>
    </cffunction>
    <!---
    // Add
    --->
    <cffunction name="add" displayname="Add Country" returntype="numeric" output="false" hint="This adds a Country.">
      <!---
      // Check to see if that a different item isn't already using the same unique details
      --->
      <cftry>
       <cfquery name="checkUnique" datasource="#sDatasource#">
        SELECT idCountryID
        FROM tblCountry
        WHERE sCountryName = '#this.objFunctions.scrubText(this.sCountryName)#'
        OR sISOCOde = '#this.objFunctions.scrubText(this.sISOcode)#'
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("add: checkUnique: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfif checkUnique.recordCount>
       <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("A Country with that name or ISO code already exists. idCountryID=#checkUnique.idCountryID#");
        </cfscript>
       <cfreturn iErrorID>
      </cfif>
      <cftry>
       <cfquery name="add" datasource="#sDatasource#">
        SET nocount on
        INSERT INTO tblCountry(sCountryName, sISOCode, sDHLCode)
        VALUES('#this.objFunctions.scrubText(this.sCountryName)#','#this.objFunctions.scrubText(t his.sISOCode)#','#this.objFunctions.scrubText(this.sDHLCode)#')
        SELECT @@identity as autoID
        SET nocount off  
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("add: add: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfreturn add.autoID>
    </cffunction>
    <!---
    // Update
    --->
    <cffunction name="update" displayname="Update Country" returntype="numeric" output="false" hint="This updates a Country record.">
      <!---
      // Check to see if that a different item isn't already using the same unique details
      --->
      <cftry>
       <cfquery name="checkUnique" datasource="#sDatasource#">
        SELECT idCountryID
        FROM tblCountry
        WHERE (sCountryName = '#this.objFunctions.scrubText(this.sCountryName)#'
        OR sISOCOde = '#this.objFunctions.scrubText(this.sISOcode)#')
        AND idCountryID <> #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("update: checkUnique: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfif checkUnique.recordCount>
       <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("Another Country with that name already exists. idCountryID=#checkUnique.idCountryID#");
        </cfscript>
       <cfreturn iErrorID>
      </cfif>
      <!---
      // Attempt to update the record to the datasource
      // if this fails for any reason then we submit an error message
      // to the error component and return the ID of the error
      --->
      <cftry>
       <cfquery name="update" datasource="#sDatasource#">
        UPDATE tblCountry
        SET sCountryName = '#this.objFunctions.scrubText(this.sCountryName)#',
        sISOCode = '#this.objFunctions.scrubText(this.sISOCode)#',
        sDHLCode = '#this.objFunctions.scrubText(this.sDHLCode)#'
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("update: update: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfreturn this.idCountryID> 
    </cffunction>
    <!---
    // Delete
    --->
    <cffunction name="delete" displayname="Delete Country" returntype="numeric" output="false" hint="This deletes a Country record.">
      <!---
      // First of all we need to get the name of the data source we are going to be using
      --->
      <cfscript>
      objDS = CreateObject("component","nec.com.system.settings");
      sDatasource = objDS.getDatasource();
    </cfscript>
      <!---
      // Now check to see if ithat ID exists
      --->
      <cftry>
       <cfquery name="checkID" datasource="#sDatasource#">
        SELECT idCountryID
        FROM tblCountry
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("delete: checkID: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfif not checkID.recordCount>
       <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("A Country with that id doesn't exists, delete failed.");
        </cfscript>
       <cfreturn iErrorID>
      </cfif>
      <!---
      // Now check to see if there are any dependancies, if so we can't delete the item
      --->
      <cftry>
       <cfquery name="checkDependancies" datasource="#sDatasource#">
        SELECT idCountry
        FROM tblAddress
        WHERE idCountry = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("delete: checkDependancies: idCountry: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfif checkDependancies.recordCount>
       <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("That Country is being used by an address, delete failed.");
        </cfscript>
       <cfreturn iErrorID>
      </cfif>
      <!---
      // Now attempt to remove the record.
      // if this fails for any reason then we submit an error message
      // to the error component and return the ID of the error
      --->
      <cftry>
       <cfquery name="delete" datasource="#sDatasource#">
        DELETE FROM tblCountry
        WHERE idCountryID = #this.idCountryID#
       </cfquery>
       <cfcatch>
        <cfscript>
         objError = CreateObject("component","nec.com.system.errors");
         iErrorID = objError.addError("delete: delete: #cfcatch.detail#");
        </cfscript>
        <cfreturn iErrorID>
       </cfcatch>
      </cftry>
      <cfreturn this.idCountryID>
    </cffunction>
    </cfcomponent>

  • Problem displaying dynamically loaded text in Flash CS3

    I created a Flash CS3 application that does not display
    dynamically loaded text (from internal AS3 scripts) on 3/6 of my
    client's computers. All computers run IE 6 and Flash Player 9. I
    cannot replicate the problem on any computer in my department. The
    problem seems to be related to Flash Player 9 or a browser
    setting/IT restriction. Has anyone encountered this? If so, have
    you found a solution?
    If I cannot find a solution, then I will need to almost
    completely redo the application.
    One slightly insane idea I have considered is to, if
    possible, convert dynamically loaded text to an image real-time. Is
    that possible?
    Btw, I have created a font in my library. Should I try
    manually embedding the font from the Properties menu and selecting
    all characters?
    Thanks in advance.

    yes, even though you may be using a font from the library,
    you still have to specify that each text field that uses that font
    embeds the font, and you'll need to select all characters(well not
    all, unless you require all the different scripts of the world -
    upper-case, lower-case, numerals and punctuation usual suffices).
    I bet if you checked, the computers where the font did not
    appear did not have the font on their system.
    Good luck
    Craig

  • Dynamically Load Thumbnails To Horizontal Movieclip?

    I'd like to dynamically load thumbnails into a horizontal movieclip at the bottom of an image gallery to then allow me to load an image by clicking the thumbnails. I found a tutorial to help me load the thumbnails to the stage but I am not sure how to load them into the thumbs movieclip. Here is the code I am using:
    var imageLoader:Loader;
    var xml:XML;
    var xmlList:XMLList;
    var xmlLoader:URLLoader = new URLLoader();
    xmlLoader.load(new URLRequest("xml/murals.xml"));
    xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
    function xmlLoaded(event:Event):void
        xml = XML(event.target.data);
        xmlList = xml.children();
        for(var i:int = 0; i < xmlList.length(); i++)
            imageLoader = new Loader();
            imageLoader.load(new URLRequest(xmlList[i].attribute("thumb")));
            imageLoader.x = i * 175 + 25;     // <----- Also, I don't seem to understand how to space the thumbnails using this code.
            imageLoader.y = 5;
            addChild(imageLoader);
    Thanks in advance!
    -Dan

    I wasn't sure if I should make a new discussion for this or not so I'm just going to post it here.
    Alright. I finally found a tutorial that works for what I am trying to do. The thumbs load on a grid and when I click on the thumb they load in the loader. Now I am having trouble removing them. The tutorial has the remove function on the loaded large image so when you click that it removes itself. I would like so that when you click on the a thumb the current image will unload and the thumb that is clicked on will load but can't figure out how to get it to do that. I figured I'd just add a CLICK listener for the "removeFull" function to the "callFull" function but I think it cancels itself out.
    Here is the code I am using: (the code to load and unload is toward the bottom)
    stop();
    var columns:Number = 2;
    var my_x:Number = 25;
    var my_y:Number = 75;
    var my_thumb_width:Number = 65;
    var my_thumb_height:Number = 65;
    var my_images:XMLList;
    var my_total:Number;
    var container_mc:MovieClip;
    var x_counter:Number = 0;
    var y_counter:Number = 0;
    var myXMLLoader:URLLoader = new URLLoader();
    myXMLLoader.load(new URLRequest("xml/gallery.xml"));
    myXMLLoader.addEventListener(Event.COMPLETE, processXML);
    function processXML (e:Event):void{
        var myXML:XML = new XML(e.target.data);
        my_images = myXML.IMAGE;
        my_total = my_images.length();
        createContainer();
        callThumbs();
    function createContainer():void{
        container_mc = new MovieClip();
        container_mc.x = my_x;
        container_mc.y = my_y;
        addChild(container_mc);
    //The large image loads when the thumb is clicked on.
        container_mc.addEventListener(MouseEvent.CLICK, callFull);
        container_mc.buttonMode = true;
    function callThumbs():void{
        for (var i:Number = 0; i < my_total; i++){
            var thumb_url = my_images[i].@THUMB;;
            var thumb_loader = new Loader();
            thumb_loader.load(new URLRequest(thumb_url));
            thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded);
            thumb_loader.name = i;
            thumb_loader.x = (my_thumb_width+25)*x_counter;
            thumb_loader.y = (my_thumb_height+25)*y_counter;
            if (x_counter+1 < columns){
                x_counter++;
            } else {
                x_counter = 0;
                y_counter++;
    function thumbLoaded(e:Event):void{
        var my_thumb:Loader = Loader(e.target.loader);
        container_mc.addChild(my_thumb);
    //This function loads the large image.
    function callFull(e:MouseEvent):void{
        var full_loader:Loader = new Loader();
        var full_url = my_images[e.target.name].@FULL;
        full_loader.load(new URLRequest(full_url));
        full_loader.contentLoaderInfo.addEventListener(Event.INIT, fullLoaded);
    //This function centers the large image in the gallery loader.
    function fullLoaded(e:Event):void{
        var my_loader:Loader = Loader(e.target.loader);
        MovieClip(parent.parent).gallery.addChild(my_loader);
        my_loader.x = (MovieClip(parent.parent).gallery.width - my_loader.width)/2;
        my_loader.y = (MovieClip(parent.parent).gallery.height - my_loader.height)/2;
    //The large image unloads when it is clicked on.
        my_loader.addEventListener(MouseEvent.CLICK,removeFull);
    //This function removes the loaded image from the gallery loader.
    function removeFull(e:MouseEvent):void{
        var my_loader:Loader = Loader (e.currentTarget);
        my_loader.unload();
        removeChild(my_loader);

  • Loading metadata into HFM application through EPMA - Beginner

    Hello,
    I have an HFM application which was created in a classic format and then later on converted to EPMA. I would like add more metadata in it now either manually or any other way. I tried to create a few members manually through dimension library but when I see it in the actual application, the members are not seen. Is there anything else to do like deploying it or anything? It would be great help if anybody could tell me how to add members manually and in bulk.
    Thanks

    Yes. You'll need to deploy the application to see the changes outside of EPMA. Since EPMA is your metadata management tool now, you'll make the changes there, and then deploy (or load) it to the application. There are several ways to make metadata changes in EPMA:
    1) Directly in the Dimension Library as you have done
    2) Using the Grid Editor functionality in the Dimension Library (right-click any dimension label and you'll see the option)
    3) Using the EPMA File Generator (this is best for building new apps and regularly occurring changes)
    4) Using LCM (this is my preference for bulk changes)
    Shoot an email to the address in my profile and I'd be happy to get you some further info.

  • Compiling a CSS into SWF without merged SDK and dynamically loading

    I have a flex application that is built with the SDK merged in (for my own good reasons). This application dynamically loads a style SWF that was built without the SDK merged. Unfortunately, it seems that the loaded SWF fails to resolve its references with the SDK and gives me a 1014 run-time error.
    If I merge the SDK into the CSS SWF then it works. If I set both my application and the CSS SWF to use the SDK as an RSL then it works. In short the matrix is:
    CSS SWF, SDK merged?
    Application, SDK merged?
    Works?
    Yes
    Yes
    Yes
    Yes
    No
    Yes
    No
    Yes
    No
    No
    No
    Yes
    I do not want a big CSS SWF to dynamically load with all the SDK in it when I already have the SDK loaded with my application. Any help much appreciated.

    Hi,
    In you rsl project properties, go to Flex Library Build Path and go to library path tab. Here you can edit your imported library. There's no need in RSL to import the libraries merge into code but external(even the Adobe libraries should be loaded as external) cause you load it already from your application project (as rsl or merge into code).
    Bye!

Maybe you are looking for

  • How does a family share an iTunes account without sharing the master password?

    Is there any way to avoid having to give my password to my daughter? I have had the same AppleID for many years, and it also my email address, so I would prefer not to share the password with all of my family. As far as I can tell, I can not change m

  • Unable to open attached documents in emails with Adobe Reader 9

    I get emails with attachments but when i try to open,  i keep getting a warning saying .... ADOBE READER CAN NOT OPEN DOCUMENT BECAUSE IT IS EITHER NOT SUPPORTED FILE TYPE OR FILE HAS BEEN DAMAGED.....etc.    I presumed that as the attachments  were

  • Play modules for adobe premiere on mac yosemite for intel iris

    Adobe Premiere asks me to download new video display drivers for my macbook pro that runs on yosemite and has an intel iris. I can't find them anywhere. Please help.

  • How to set my own Ranges in Charts

    Hi- I've just started playing with making charts in Numbers. When I select some cells and then ask Numbers to produce a chart it does so and sets it's own values for the Y-Axis. How can I set MY OWN values for the upper and lower limits (ie. 0 at the

  • App contact is not working anymore

    Since some weeks, the Contact app is not working anymore on my MBA. Symptoms : Contact is very slow and crashes very often The contact list contains all entries, but when I select one, on the right side, the message is "Aucune fiche" (I''m French, so