All Downloads are FREE. Search and download functionalities are using the official Maven repository.

webapp.api-extender-admin.html.about.html Maven / Gradle / Ivy

API extension for Polarion ALM

This Polarion extension provides additional functionality which is not implemented in standard Polarion API for some reason.

Custom field for project

Polarion project does not support setting custom fields out of the box.
This API extension can be used to solve this problem.

This API can be called using REST API and in Velocity Context.

Polarion configuration

REST API

Get version:

curl --location 'https://<HOST>:<PORT>/polarion/api-extender/rest/api/version' \
    --header 'Authorization: Bearer <TOKEN_GOES_HERE>'

Response example:

{
  "bundleName":"API Extension for Polarion ALM",
  "bundleVendor":"SBB AG",
  "automaticModuleName":"ch.sbb.polarion.extension.api_extender",
  "bundleVersion":"1.0.0",
  "bundleBuildTimestamp":"2023-06-27 12:43",
  "bundleBuildTimestampDigitsOnly":"202306271243"
}

Get custom field value:

curl --location 'https://<HOST>:<PORT>/polarion/api-extender/rest/api/projects/<PROJECT_ID>/keys/<CUSTOM_FIELD>' \
    --header 'Authorization: Bearer <TOKEN_GOES_HERE>'

Get global record value:

curl --location 'https://<HOST>:<PORT>/polarion/api-extender/rest/api/records/<RECORD>' \
    --header 'Authorization: Bearer <TOKEN_GOES_HERE>'

Response example:

{
  "value": "custom_value"
}

Set custom field value:

curl --location 'https://<HOST>:<PORT>/polarion/api-extender/rest/api/projects/<PROJECT_ID>/keys/<CUSTOM_FIELD>' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer <TOKEN_GOES_HERE>' \
    --data '{
      "value": "<VALUE>"
    }'

Set global record value:

curl --location 'https://<HOST>:<PORT>/polarion/api-extender/rest/api/records/<RECORD>' \
    --header 'Content-Type: application/json' \
    --header 'Authorization: Bearer <TOKEN_GOES_HERE>' \
    --data '{
      "value": "<VALUE>"
    }'

Live Report Page

Get version:

#set ($version = $customFieldsProject.getVersion())
#if ($version)
    API Extender version = $version
#end

or

#set ($version = $globalRecords.getVersion())
#if ($version)
    API Extender version = $version
#end

Get custom field value:

#set ($field = $customFieldsProject.getCustomField('elibrary', 'custom_field'))
#if ($field)
    $field.getValue()
    <br>
#end

Get global record value:

#set ($field = $globalRecords.getRecord('record_name'))
#if ($field)
    $field.getValue()
    <br>
#end

Due to Polarion limitations we are not able to save custom fields in Live Report Page using Velocity, but we can use JavaScript for this.

Set custom field value:

<input id='cfp_project' type='text' value='elibrary' name='project'/>
<input id='cfp_key' type='text' value='custom_field' name='key'/>
<input id='cfp_value' type='text' value='custom_value' name='value'/>
<script>
    function save_project_custom_field() {
        const project = document.getElementById('cfp_project').value;
        const key = document.getElementById('cfp_key').value;
        const value = document.getElementById('cfp_value').value;
        const requestBody = (value === null || value === "") ? "" : JSON.stringify({'value': value});

        fetch('/polarion/api-extender/rest/internal/projects/' + project + '/keys/' + key, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: requestBody
        })
        .then(response => {
            if (response.ok) {
                return "Saved!"
            } else {
                return response.text()
            }
        })
        .then(text => {
             alert(text)
        });
    }
</script>
<button onclick='save_project_custom_field()'>Save</button>

Set global record value:

<input id='record_key' type='text' value='record_name' name='record_name'/>
<input id='record_value' type='text' value='record_value' name='record_value'/>
<script>
    function save_record() {
        const key = document.getElementById('record_key').value;
        const value = document.getElementById('record_value').value;
        const requestBody = (value === null || value === "") ? "" : JSON.stringify({'value': value});

        fetch('/polarion/api-extender/rest/internal/records/' + key, {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: requestBody
        })
            .then(response => {
                if (response.ok) {
                    return "Saved!"
                } else {
                    return response.text()
                }
            })
            .then(text => {
                alert(text)
            });
    }
</script>
<button onclick='save_record()'>Save</button>

Note that internal API in URL should be used.

Classic Wiki Page

Get custom field value:

#set($projects = $projectService.searchProjects("","id"))

#foreach($project in $projects)
    #set($projectId = $project.id)
    #set($field = $customFieldsProject.getCustomField($projectId, 'custom_field'))
    #if ($field)
        $projectId custom_field = $field.getValue()
        <br>
        #set($field = false)
    #end
#end

Get global record value:

$globalRecords.getRecord('record_name')

Set custom field value:

$customFieldsProject.setCustomField('elibrary', 'custom_field', 'new_value')

Set global record value:

$globalRecords.setRecord('record_name', 'record_value')




© 2015 - 2025 Weber Informatics LLC | Privacy Policy