我的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,那么我得到的所有消耗状态都是正确的,请让我知道我是否遗漏了什么。
有一个更简单(开箱即用)的方法来查询线性状态。
QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria()
.withStatus(Vault.StateStatus.CONSUMED)
.withUuid(Collections.singletonList(linearId));
如果你手头没有linearId;但有其他自定义属性,怎么办?它只是返回UNCOSUMED状态。如果是linearState,你可能要查询两次,一次得到unconsumed状态,然后用这个linearID得到consumed状态.如果你有消耗的状态,而你想查询某些customCriteria,又没有linearID,那怎么操作?我不想查询所有的所有状态(可能有很多),并从所有检索到的记录中寻找匹配的特定状态。我以为,VaultCustomQueryCriteria应该可以做到这一点。