我正在使用Cordite Braid服务器构建CordApp,以使我的JavaScript客户端能够连接到该节点。我不确定我在这里使用“编织”是否与问题有关,但这就是上下文。
问题已编辑,因为我发现了有关什么在工作,什么不在工作的更多信息。
部署Braid时,我将提供一项服务,以返回从Corda保管库查询的某些状态集。我发现我可以 基于StateStatus(CONSUMED
或UNCONSUMED
)进行过滤,也可以基于VaultCustomQueryCriteria
进行过滤,但不能两者在一起。
代码如下:
class TestSearchService(val serviceHub: ServiceHub) {
fun getResults(consumed: Boolean, workerID: String, businessID: String): List<StateAndRef<ContractState>> {
val results = builder {
val generalConsumedCriterion = if (consumed) QueryCriteria.VaultQueryCriteria(Vault.StateStatus.CONSUMED) else QueryCriteria.VaultQueryCriteria(Vault.StateStatus.UNCONSUMED)
val workerIndex = EventSchemaV1.PersistentEvent::workerID.equal(workerID)
val workerCriterion = QueryCriteria.VaultCustomQueryCriteria(workerIndex)
val businessIndex = EventSchemaV1.PersistentEvent::businessID.equal(businessID)
val businessCriterion = QueryCriteria.VaultCustomQueryCriteria(businessIndex)
val criteria = generalConsumedCriterion.and(workerCriterion).and(businessCriterion)
val results = serviceHub.vaultService.queryBy<EventState>(criteria).states
return results
}
}
}
如此处所述,该服务仅返回UNCONSUMED
和consumed
和workerID
过滤的businessID
状态(无论 val results = serviceHub.vaultService.queryBy<EventState>(generalConsumedCriteria).states
参数是true还是false)。如果倒数第二行替换为
CONSUMED
因此,它仅使用状态条件,而不使用自定义条件,然后按UNCONSUMED
或dog_list
状态(但显然)未按其他自定义字段进行过滤。
与我如何使用criteria.and(criterion).and(criterion)??将各种条件组合在一起有关系吗?