Blog item

Creating UARs using ProcScript

Oct 2, 2020

With the patch 10.3.02.038 in Uniface, we’ve introduced two new $ude ProcScript functions for looking up runtime resources and copying them to an archive (UAR) file. These are:

By combining these two $ude functions, you can package runtime resources into one or more deployment archive files, which enables you to improve your development and deployment workflow. You can:

  • Build your own archiving mechanism, in combination with the IDE custom menu/worksheet plug-ins, that might be very useful to maintain application and/or patch distributions.
  • Script your build environments to automatically generate deployment archives.

$ude("lookup")

Use $ude("lookup") function to check whether a compiled runtime object, symbol table, or script listing exists. This is similar to $ude("exist"), but $ude("lookup") returns a Uniface list of existing resources, symbol tables, or script listings. Sub-lists specify the resources in this format:

"TYPE=ObjectType!;NAME=ObjectName!;LIBRARY=LibraryName!;LANGUAGE=Language!;CLASS=Class"

For example:

vResultList = $ude("lookup", "resources_output;form", "MYFORM*")

List returned in vResultList:

"TYPE=Form!;NAME=MYFORM1!;LIBRARY=!;LANGUAGE=!;CLASS=;TYPE=Form!;NAME=MYFORM2!;LIBRARY=!;LANGUAGE=!;CLASS="

$ude("archive")

You can use $ude("archive") to copy the compiled runtime objects to a Uniface Archive (UAR) using the list returned by $ude("lookup").

There are two ways to do this:

1. One object at a time

One way to copy objects to a Uniface archive is by resource type:

$ude("archive",ResourceType, ResourceName, ArchiveFile {, OptionList})

For example (using the value of vResultList from the $ude("lookup") example):

vArchive = "myarchive.uar"
forlist vObject in vResultList
 vType = $valuepart($itemnr(1, vObject)) ; TYPE
 vName = $valuepart($itemnr(2, vObject)) ; NAME
 putitem/id vOptions, "LIBRARY", $valuepart($itemnr(3, vObject))
 putitem/id vOptions, "LANGUAGE", $valuepart($itemnr(4, vObject))
 putitem/id vOptions, "CLASS", $valuepart($itemnr(5, vObject))
 vReturn = $ude("archive", vType, vName, vArchive, vOptions)
endfor
lflush $concat(vArchive, ":")

The archive file is kept open so each call to $ude("archive") adds an object to the file. To close the file and complete the transaction, use flush or flush.

2. Using a list of objects

The other way to copy objects to a Uniface archive is by using the list option. Hereby the list of objects can be used that is returned by $ude("lookup"). In addition, a description can be added to the archive file.

For example (again with the value of vResultList from the previous example):

vArchive = "myarchive.uar"
putitem/id vOptions, "description", "My Form Archive"
vReturn = $ude("archive", "list", vResultList, vArchive, vOptions)

The description of the archive is (e.g.) shown in the output of the /who command line switch.

It is important to note that an existing archive file is overwritten with no prompt unless the option "append=true" is specified. Here’s an example of how to add several lists of runtime objects to a Uniface archive:

vResultList = $ude("lookup", "resources_output;form", "*")
vArchive = "components.uar"
putitem/id vOptions, "description", "Archive with components"
vReturn = $ude("archive", "list", vResultList, vArchive, vOptions)
vOptions = "append=true"
vResultList = $ude("lookup", "resources_output;service", "*")
vReturn = $ude("archive", "list", vResultList, vArchive, vOptions)
vResultList = $ude("lookup", "resources_output;report", "*")
vReturn = $ude("archive", "list", vResultList, vArchive, vOptions)
; ...

Do you want to know more about coding in Uniface? Check out our eLearning environment.

Do you want to stay updated on the latest Uniface news? Please subscribe to our quarterly newsletter.