Как преобразовать Party в Text или наоборот в DAML?

я хотел проверить условие в коде DAML, но одно значение — это party, а другое — текст, поэтому получаю ОШИБКУ:

• Не удалось сопоставить тип «Сторона» с «Текстом» из-за функциональной зависимости между: ограничением «DA.Internal.Record.HasField «владелец» AccountInfo Text», возникающим из-за использования экземпляра «DA.Internal.Record.getField». «DA.Internal.Record.HasField «владелец» AccountInfo Party» в

if( login.party == "friend" || logout.party == "friend)
   userCId <- create Users with userType= "Friendly User",..
                            return (Right  userCId)

person Shalabh Negi    schedule 11.01.2020    source источник


Ответы (2)


Как упомянул Шейн, вы можете использовать show (или partyToText) для преобразования в Text. Тем не менее, я не думаю, что это правильный подход к этому. Партии следует рассматривать как абстрактные идентификаторы, и хотя песочница DAML позволяет использовать произвольные строки, это неверно для других реестров.

Я бы посоветовал вместо того, чтобы жестко запрограммировать проверку на конкретный литерал партии, вы расширили шаблон дополнительным полем friend : Party, а затем сравнили с ним. Затем, когда вы создаете шаблон, вы можете установить friend в "friend" в песочнице, но вы также можете установить что-то еще.

Итак, в конце концов, вы в конечном итоге заменяете

template C with
  …
  choice C : ()
    controller …
    do if login.party == "friend"
       …

со следующим

template C with
  …
  friend : Party
  choice C : ()
    controller …
    do if login.party == friend
       …
person cocreature    schedule 12.01.2020

Вызов show для вашего значения Party должен помочь.

if show login.party == "friend" ...
person Shayne Fletcher    schedule 12.01.2020
comment
Как сказал cocreate, использование show на вечеринках, как правило, не лучшая идея. - person Martin Huschenbett; 13.01.2020