Выполнение CRUD на регистре DA через клиента gRPC - PullRequest
0 голосов
/ 04 марта 2019

Я нахожусь в процессе написания клиентского приложения DA Ledger.Это идет медленно, потому что документация API не объясняет, как объединить предоставленные сервисы для простого создания, чтения, обновления и удаления в Главной книге.
Например, нет простого сервиса, который позволяет клиенту читать все контакты изданная партия напрямую.Сначала клиент должен получить идентификатор бухгалтерской книги, а затем (я думаю) идентификатор пакета.и т.д. Есть сервис для чтения активных контрактов, но как насчет неактивных контрактов?Было бы полезно иметь некоторую документацию, которая объясняет и демонстрирует, как объединить вызовы к различным услугам (например):

  • Прочитать все контракты для данной стороны
  • Выполнитьвыбор по данному контракту
  • Создать новый контракт

Моя заявка пишется на php.Мне не обязательно нужны примеры в php, но я просто хочу знать, как использовать предоставляемые сервисы для выполнения простых задач.

1 Ответ

0 голосов
/ 05 марта 2019

Прочитать все контракты для данной стороны

DAML Ledger - это система, изначально управляемая событиями.Как таковой он не обеспечивает доступ к запросам, как традиционная база данных.Вместо этого ваше приложение подписывается на TransactionService , используя GetTransactionsRequest и указывая LEDGER_BEGIN в качестве смещения begin.Это доставит вам все события Created и Archived, которые произошли с момента запуска бухгалтерской книги.В вашем приложении вы можете использовать эти события, чтобы создать представление (в памяти или постоянное хранилище) регистра, который затем можно удобно запросить.Например, вы можете заполнить словарь по типу контракта, добавив запись для каждого события Created и удалив ее снова при получении события Archived.

Создание контрактов или выбор вариантов исполнения

Это можно сделать двумя способами:

  • Отправьте команду создания или упражнения с помощью Submit в CommandSubmissionService и дождитесьсообщение об успехе или ошибке на CommandCompletionService .Обратите внимание, что получение такого сообщения о завершении команды только подтверждает, что команда может быть успешно принята бухгалтерской книгой.Он не будет содержать никаких эффектов (создание и архивирование событий) от этой команды.Их вы снова получите на TransactionService, упомянутом выше.

  • Отправьте команду создания или упражнения с помощью SubmitAndWait на CommandService .Эта служба объединяет отправку и завершение команды в синхронном вызове на стороне сервера и поэтому будет возвращаться только после того, как команда была принята или отклонена сервером.Обычно такой способ подачи команд удобнее, поскольку он учитывает некоторую асинхронную обработку событий, требуемую в предыдущем методе.

Обратите внимание, что вы можете получить требуемый идентификатор контрактаосуществлять выбор из представлений в вашей бухгалтерской книге, используя TransactionService, упомянутый выше.

...