NJX:OBJECTS

#### Search Results

Search

# NJX:OBJECTS

The NJX:OBJECTS control is used to make assets that are contained in Natural binary variables (BLOBs) available to controls on the web page. Examples are images in arbitrary controls such ICON, IMAGEOUT, CLIENTTREE or MENU.

The following topics are covered below:

- General Information

- Example

- Adapter Interface

## General Information

In the Natural program, the NJX:OBJECTS control is represented with the following data structure:

    1 XCIOBJECTS (1:*)
    2 CONTENT (B) DYNAMIC
    2 CONTENTID (A) DYNAMIC
    2 CONTENTTYPE (A) DYNAMIC

With this data structure, images and other binary content can be transported from the Natural program to the application server or web container.

For each entry in the data structure, the following must be specified: the binary content itself, an identifier and (optionally) the content type. In your Natural program, you only add the binary content once, with a specific name. The binary content is then automatically cached in the application server or web container until the Natural application completes its execution. During a server roundtrip from Natural to the application server or web container, all binary content that is found for this data structure is added to the cache and the data structure is cleared. After a server roundtrip, the data structure is always empty.

When referencing binary content such as an image from within a control of your page layout, you usually specify an URL. For Natural binary content, the URL starts with the prefix "nat:" followed by a name. To reference binary content from within a design-time property such `image` in a control of your page layout, you specify this URL directly in your page layout. For example:

    ...
    <icon image="nat:icon01">
    </icon>
    ...

When referencing binary content using a dynamic property such as `imageprop`, you can use automatically generated names.

In both cases (when you apply the URLs to properties statically at design-time and when you apply the URLs dynamically at runtime), you do not have to work directly on the `XCIOBJECTS` structure. Instead, you can use the helper subprogram `MAKEURL` which can be found in the Natural for Ajax demos. You can use your own names or you can leave it to the helper subprogram `MAKEURL` to generate the names. The `MAKEURL` subprogram adds a corresponding entry to the `XCIOBJECTS` data structure and returns an URL for this binary content. When the `CALLNAT` statement in the example below has been executed, the `MYURL` field contains a valid URL which you can apply to dynamic image properties (for example, in a grid or other dynamic controls).

    DEFINE DATA LOCAL
    1 MYURL (A) DYNAMIC
    1 XCIOBJECTS (1:*)
    2 CONTENT (B) DYNAMIC
    2 CONTENTID (A) DYNAMIC
    2 CONTENTTYPE (A) DYNAMIC
    ...
    LOCAL
    1 MYBLOB (B) DYNAMIC
    ...
    END-DEFINE

    CALLNAT "MAKEURL" XCIOBJECTS(*) MYBLOB MYURL

If you want to use your own name (for example, "icon01"), you have to specify the `CALLNAT` statement as follows:

    CALLNAT "MAKEURL" XCIOBJECTS(*) MYBLOB MYURL "icon01"

Optionally, you can explicitly specify the content type. This is required for content types which are not automatically recognized by the browser. Example:

    CALLNAT "MAKEURL" XCIOBJECTS(*) MYBLOB MYURL "icon01" "gif"

Note
See also Images in Some Common Rules for all Controls.

## Example

Examples which show the usage of the NJX:OBJECTS control are provided in the Natural for Ajax demos: the programs `CTROB1-P` and `CTROB2-P`.

## Adapter Interface

    1 XCIOBJECTS (1:*)
    2 CONTENT (B) DYNAMIC
    2 CONTENTID (A) DYNAMIC
    2 CONTENTTYPE (A) DYNAMIC

Element | Description
--- | ---
`CONTENT` | The binary content as contained in a Natural binary variable.
`CONTENTID` | A name used for caching in the application server or web container and for referencing the content from within an URL.
`CONTENTTYPE` | The content type as understood by a browser. For content types which are not automatically recognized by a browser, the content type has to be specified.

### On this page

- General Information
- Example
- Adapter Interface