Polarion API: How to update multiple work items in the same action

795 Views Asked by At

I created a script which updates work items in a polarion document. However, right now each workitem update is a single save. But my script updates all work items in the document, which results in a large number of save actions in the api and thus a large set of clutter in the history. If you edit a polarion document yourself, it will update all workitems. Is it possible to do this same thing with the polarion API?

I tried

  • Using the tracker service to update work items. This only allows a single work item to be updated.
  • Using the web development tools to try and get information from the API. This seems to use a UniversalService for which no documentation is available at the API site https://almdemo.polarion.com/polarion/sdk/index.html

Update 1:

I am using the python polarion package to update the workitems.Python polarion Based on the answer by @boaz I tried the following code:

project = client.getProject(project_name)
doc = project.getDocument(document_location)
workitems = doc.getWorkitems()

session_service = client.getService("Session")
tracker_service = client.getService("Tracker")
session_service.beginTransaction()

for workitem in workitems:
    workitem.description = workitem._polarion.TextType(
            content=str(datetime.datetime.now()), type='text/html', contentLossy=False)
    update_list = {
        "uri": workitem.uri,
        "description": workitem.description
    }
    tracker_service.updateWorkItem(update_list)

session_service.endTransaction(False)

The login step that @boaz indicated is done in the backend (See: https://github.com/jesper-raemaekers/python-polarion/blob/3e61527cf0f1f3c8614a30289a0a3409d2d8712d/polarion/polarion.py#L103)

However, this gives the following Java exception:

java.lang.RuntimeException: java.lang.NullPointerException

Update 2

There seems to be an issue with the session. If I call the following code:

session_service.logIn(user, password)
print(session_service.hasSubject())

it prints False.

The same thing happens when using the transaction:

session_service.beginTransaction()
print(session_service.transactionExists())

also prints False

1

There are 1 best solutions below

2
On

Try wrapping your changes in a SessionWebService transaction, see JavaDoc:

    sessionService = factory.getSessionService();
    sessionService.logIn(prop.getProperty("user"), 
        prop.getProperty("passwd"));
    sessionService.beginTransaction();

    // ...
    // your changes
    // ...

    sessionService.endTransaction(false);
    sessionService.endSession();

As shown in the example in Polarion/polarion/SDK/examples/com.polarion.example.importer.

This will commit all your changes in one single SVN commit.