Best way to add many messages to a UAR file?

Author: mmontealegre@commandalkon.com (mmontealegre)

I am trying to get a huge number of messages into a UAR file.  The deployment archive editor seems to have an issue when adding more than 100,000 messages at the same time.  When retrieving all those messages in the editor it pegs out the memory and Uniface crashes.  I am currently going through the editor and just retrieving one language at a time (about 16,000 messages) and adding just that set to the archive.  This process gets slower and slower as I add each language, I am on my 3rd language now and it's taking 2 hours to add just it with 10 more to go.  Is there a command line that can be used for this?  I tried this statement urm copy $mss_rep:* NewArchive.uar:* but I just get an error that says "Cannot compile component definition".  I am working in a database repository that started with brand new and just imported my messages via the xml import.  There is really nothing else in this repository (no forms, services, global procs, menus) just messages.  I am just looking to get a UAR file that has all my application messages in it. 

5 Comments

  1. You need to copy the compiled messages (and not the sources from the repository database). When using the Standardized approach then the messages will be located in the directory specified by $RESOURCE_OUTPUT (or more specifically in the sub-directory msg). And using the following statement should give the desired results:

    urm copy $rso:msg\* NewArchive.uar:\msg\* The $RSO path setting is hereby pointing to the directory specified by $RESOURCE_OUTPUT. There are probably smarter ways to do this, but this should do the trick - I hope. Hope this helps. Daniel


    Author: diseli (daniel.iseli@uniface.com)
  2. I guess I'm stating the obvious here, but the above will of course only work after you've compiled all messages. When you are dealing with so many messages then it might be better to map $RESOURCE_OUTPUT to the UAR file you want to create.

    $RESOURCE_OUTPUT = NewArchive.uar Now when you compile the messages (using e.g. the IDF command line switch /mes) they are directly written to the specified UAR file. This will save you a lot of time, since you don't need to compile 100,000 messages first and then copy them to the UAR file. After you've done this you can restore $RESOURCE_OUTPUT to it's original value. Hope this helps. Daniel


    Author: diseli (daniel.iseli@uniface.com)
  3. Every time I run that statement I get 1107 - Cannot compile; cannot access component definition Help file just says The compiler cannot find the requested component definition. Check the name of the component. If it is correct, check the system and hardware configuration. I am not sure what component it would be referring to.  I can do a "/all" and everything compiles just fine.  Of course it's just some uniface default forms and a bunch of messages.


    Author: mmontealegre (mmontealegre@commandalkon.com)
  4. mmontealegre said Every time I run that statement I get 1107 - Cannot compile; cannot access component definition Help file just says The compiler cannot find the requested component definition. Check the name of the component. If it is correct, check the system and hardware configuration. I am not sure what component it would be referring to.  I can do a "/all" and everything compiles just fine.  Of course it's just some uniface default forms and a bunch of messages.

    Never mind I think I'm an idiot.  I was trying to run this as a command line argument to the uniface.exe.  I see that this is actually a seperate executable and needs to be run from command line.


    Author: mmontealegre (mmontealegre@commandalkon.com)
  5. mmontealegre said Never mind I think I'm an idiot.  

    Don't be too harsh on yourself. Wink It probably would have been more clear if had written urm.exe instead of just urm. I'll try to keep that in mind for next time. Smile Daniel


    Author: diseli (daniel.iseli@uniface.com)