0
XYZManager.daml:
nonconsuming choice CallingChoice: Either Text (ContractId XYZ)
    exercise (contractIdXYZ) CalledChoice with ...

XYZ.daml:
choice CalledChoice: Either Text (ContractId XYZ)
     with ...
    if conditionFails do
        return Left "Error"
    else do
        continue execution of other lines`

在上面的代码中,如果“CalledChoice”返回 Left“Error”,那么即使我们返回 Left,XYZ 模板也会被使用。如何通过处理所需的验证来处理这个问题。

4

1 回答 1

2

选择的返回值永远不会导致该选择被视为中止。如果您想中止选择,您可以调用该abort : Text -> Update a函数,例如,在您的示例中:

choice CalledChoice : ContractId XYZ
  with …
  do if conditionFails do
       abort "Error"
     else do
       continue execution of other lines

assert如果条件不成立,还有一个函数会调用 abort。这对您的示例非常有效:

choice CalledChoice : ContractId XYZ
  with …
  do assert (not conditionFails)
     continue execution of other lines

如果要包含自定义错误消息,则可以assertMsg "Error" (not conditionFails)改用。

于 2020-01-04T16:06:00.293 回答