DAML模板中的访问变量(如对象中的变量)

时间:2019-06-29 08:13:08

标签: daml

对于DAML来说还不错,并且拥有丰富的Java编程经验。现在,我有一个问题。在Java中,“ A类”具有“ B类”,这样,A可以使用“ B类”的“状态”。我也想在DAML中做类似的事情。

如果我认为模板是一个类,则“合同ID”是它的一个实例,并且当以模板形式传递时,应该可以在另一个模板中访问模板的“状态”(我们在“ with”中声明的内容)。参数,但在编写的代码中出现编译错误。

一种处理方法是发送“ party”作为参数而不是合同ID,然后尝试访问合同中的party,但我想检查一下这是什么问题!

谢谢!

第一个模板

daml 1.2
module RFP where

template RFP
with
        requestorCEO: Party
    where
        signatory requestorCEO

第二个模板

daml 1.2

module InternalComm where

import RFP

template InternalComm 
    with
        -- RFP is sent in as a parameter to this template.
        rfpContractID: ContractId RFP
    where
        -- Here with this, I'm trying to say that the CEO who would be approving 
        -- an RFP is the signatory for internal communications too. It is the
        -- below line that fails with compilation error.
        signatory rfpContractID.requestorCEO

这是我针对上述问题得到的实际错误消息。任何想法将不胜感激!

No instance for (DA.Internal.Record.HasField
                         "requestorCEO" (ContractId RFP) a0)

2 个答案:

答案 0 :(得分:1)

在DAML中,RFP模板为您提供了一种类型RFP,您可以在其上投影字段(就像Java),而类型ContractId RFP则更像是指向该合同的指针。分类帐。您可以使用功能ContractId“解除引用” RFP以获取fetch。但是,该函数在Update中运行,因此不能从signatory调用。我怀疑您需要更改InternalComm才能使用没有RFP包装器的ContractId

答案 1 :(得分:0)

这就是它的工作原理-只需从整个模板中删除ContractId。

module InternalComm where

import RFP

template InternalComm 
    with
        -- ContractId to be removed from below line, and compilation error is resolved.
        -- rfpContractID: ContractId RFP
        rfpContractID: RFP
    where
        signatory rfpContractID.requestorCEO