准确查询Corda保险库?

时间:2019-03-27 11:56:47

标签: corda querying

我正在使用Cordite Braid服务器构建CordApp,以使我的JavaScript客户端能够连接到该节点。我不确定我在这里使用“编织”是否与问题有关,但这就是上下文。

问题已编辑,因为我发现了有关什么在工作,什么不在工作的更多信息。

部署Braid时,我将提供一项服务,以返回从Corda保管库查询的某些状态集。我发现我可以 基于StateStatus(CONSUMEDUNCONSUMED)进行过滤,也可以基于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
        }
    }
}

如此处所述,该服务仅返回UNCONSUMEDconsumedworkerID过滤的businessID状态(无论 val results = serviceHub.vaultService.queryBy<EventState>(generalConsumedCriteria).states 参数是true还是false)。如果倒数第二行替换为

CONSUMED

因此,它仅使用状态条件,而不使用自定义条件,然后按UNCONSUMEDdog_list状态(但显然)未按其他自定义字段进行过滤。

与我如何使用criteria.and(criterion).and(criterion)??将各种条件组合在一起有关系吗?

0 个答案:

没有答案