如果包括自定义标准,Vaultquerybycriteria会忽略带有statestatus的一般标准。

问题描述 投票:0回答:1

我的RPC客户端有一个功能,可以提取一个状态的消耗历史。如果我传递一个自定义标准,它似乎忽略了Vault StateStatus的一般标准。

我的一般查询是这样的。

QueryCriteria generalCriteria = new QueryCriteria.VaultQueryCriteria(Vault.StateStatus.CONSUMED);

我的自定义标准是这样的

customCriteria = generalCriteria;
if (requestJSON.containsKey("linearId")) {
    String linearId = requestJSON.get("linearId").toString();
    FieldInfo fieldInfo = getField("linearId", POSchemaV1.POSchemaPersistence.class);
    criteriaExpression = Builder.equal(fieldInfo, linearId);
    customCriteria = new QueryCriteria.VaultCustomQueryCriteria(criteriaExpression);
    customCriteria = generalCriteria.and(customCriteria);
}

Vault查询的结果如下

Vault.Page<PurchaseOrder> orderPage = proxy.vaultQueryByCriteria(customCriteria, PurchaseOrder.class);
    List<StateAndRef<PurchaseOrder>> orderStateAndRefList = orderPage.getStates();

如果我传递线性Id,结果似乎有未消耗的状态,如果我忽略线性Id,那么我得到的所有消耗状态都是正确的,请让我知道我是否遗漏了什么。

corda
1个回答
0
投票

有一个更简单(开箱即用)的方法来查询线性状态。

QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria()
                                    .withStatus(Vault.StateStatus.CONSUMED)
                                    .withUuid(Collections.singletonList(linearId));

0
投票

如果你手头没有linearId;但有其他自定义属性,怎么办?它只是返回UNCOSUMED状态。如果是linearState,你可能要查询两次,一次得到unconsumed状态,然后用这个linearID得到consumed状态.如果你有消耗的状态,而你想查询某些customCriteria,又没有linearID,那怎么操作?我不想查询所有的所有状态(可能有很多),并从所有检索到的记录中寻找匹配的特定状态。我以为,VaultCustomQueryCriteria应该可以做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.