对于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)
答案 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