---
title: "Search assets and update status with ScriptRunner and AIP Java API"
canonical: "https://support.appfire.com/space/AIP/10256767/Search%20assets%20and%20update%20status%20with%20ScriptRunner%20and%20AIP%20Java%20API"
format: markdown
---
> Macro (aura-html)

This example searches for assets with asset type `Server`, asset IDs between `100` and `22500`, and memory `128 GB`, and then updates the status and substatus.

> 📝 If you would like to override security, use `aipIndexService.queryDocsForObjectOverrideSecurity`. If you want permission check with the current user, use `aipIndexService.queryDocsForObject`**.**

The script fetches 1000 assets, and you can utilize paging to process more files or increase the pageLimit 1000.

> ✅ Please inspect and configure the TODO lines in the script.

### Script

<details>
<summary>Script:</summary>

```
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import groovy.transform.Field
import inventoryplugin.dto.portable.InventoryDto
import inventoryplugin.helper.JipUtilityHelper
import inventoryplugin.service.index.AipIndexService
import inventoryplugin.service.index.search.QueryIndexParam
import inventoryplugin.service.index.search.QueryIndexResult
import inventoryplugin.service.index.search.QueryIndexSearchParam
import inventoryplugin.service.rest.dto.SystemFieldDto
import inventoryplugin.service.controller.InventoryController
import org.apache.log4j.Level
import org.apache.log4j.Logger
 
@Field Logger logger = Logger.getLogger("snapbytes.inventoryplugin.groovy.script")
logger.setLevel(Level.DEBUG)
 
@WithPlugin("plugin.jip")
 
@PluginModule
AipIndexService aipIndexService

@PluginModule
InventoryController inventoryController
 

try {
    QueryIndexParam queryIndexParam = new QueryIndexParam();
    queryIndexParam.setQuerySource(QueryIndexParam.QuerySource.GENERIC_SEARCH);
    queryIndexParam.setSortField("asset.name");
    queryIndexParam.setSortDirection("asc");
    queryIndexParam.setSortType("STRING");
    queryIndexParam.setSearchType("basic");
    queryIndexParam.setPageNumber(1);
    // TODO: Increase or do paging to process records more than 1000
    queryIndexParam.setPageSize(1000);
    queryIndexParam.setQueryIndexSearchParams(new ArrayList<>());
 
    // TODO: Adjust 3 filtering options
    // filter by asset type
    QueryIndexSearchParam query = new QueryIndexSearchParam();
    query.setField("form.name");
    query.setKeywords(new ArrayList<>());
    query.getKeywords().add("Server");
    queryIndexParam.getQueryIndexSearchParams().add(query);
 
    QueryIndexSearchParam query2 = new QueryIndexSearchParam();
    query2.setField("asset.id");
    query2.setMinNum(100);
    query2.setMaxNum(22500);
    query2.setRange(true);
    queryIndexParam.getQueryIndexSearchParams().add(query2);

    QueryIndexSearchParam query3 = new QueryIndexSearchParam();
    query3.setField("Memory");
    query3.setKeyword("128 gb");
    queryIndexParam.getQueryIndexSearchParams().add(query3);


    def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
    //QueryIndexResult queryIndexResult = aipIndexService.queryDocsForObject(queryIndexParam, user);
    QueryIndexResult queryIndexResult = aipIndexService.queryDocsForObjectOverrideSecurity(queryIndexParam, user);
    def queryIndexResultAsTxt = JipUtilityHelper.convertObjectToJsonStringSafe(queryIndexResult);
 
    List<InventoryDto> assets = JipUtilityHelper.convertJsonStringToListSafe(queryIndexResult.getAssets(), InventoryDto.class);
 
    if (assets != null) {
        logger.debug(assets.size() + ' assets found')
 
        for (InventoryDto oneAsset : assets) {
            logger.debug('----------------------------------------------------')
            logger.debug('Asset id: ' + oneAsset.id + ', Asset name: ' + oneAsset.name)

            // set status and substatus of the asset
            inventoryplugin.service.rest.dto.InventoryDto inventoryDtoToSave = new inventoryplugin.service.rest.dto.InventoryDto();
            inventoryDtoToSave.setFormId(oneAsset.formId);
            List<SystemFieldDto> systemFields = new ArrayList<>();
            // TODO: Adjust status and substatus values (1 and 3)
            systemFields.add(new SystemFieldDto("asset.status", "3"));
            systemFields.add(new SystemFieldDto("asset.substatus", "1"));
            inventoryDtoToSave.setSystemFields(systemFields);
            inventoryController.updateInventoryAssetOverrideSecurity(InventoryController.VERSION_2, "",  oneAsset.id, 
                    inventoryDtoToSave, null,
                    false, false, false, InventoryController.ReferenceAssetFetchMethod.ID_THEN_NAME);
            
        }
    }
    return assets.size;
 
} catch (Exception e) {
    logger.debug(e.getMessage())
    return e.getMessage();
}  
```
</details>

### Output

<details>
<summary>Output:</summary>

```
2022-06-23 11:11:22,087 DEBUG [groovy.script]: 5 assets found
2022-06-23 11:11:22,088 DEBUG [groovy.script]: ----------------------------------------------------
2022-06-23 11:11:22,088 DEBUG [groovy.script]: Asset id: 20741, Asset name: Confluence Server
2022-06-23 11:11:22,482 DEBUG [groovy.script]: ----------------------------------------------------
2022-06-23 11:11:22,482 DEBUG [groovy.script]: Asset id: 20742, Asset name: Oracle 19c Server
2022-06-23 11:11:22,909 DEBUG [groovy.script]: ----------------------------------------------------
2022-06-23 11:11:22,910 DEBUG [groovy.script]: Asset id: 20745, Asset name: PostgreSQL Confluence Server
2022-06-23 11:11:23,284 DEBUG [groovy.script]: ----------------------------------------------------
2022-06-23 11:11:23,285 DEBUG [groovy.script]: Asset id: 21748, Asset name: test import
2022-06-23 11:11:23,612 DEBUG [groovy.script]: ----------------------------------------------------
2022-06-23 11:11:23,612 DEBUG [groovy.script]: Asset id: 21747, Asset name: test import
```
</details>