Динамика 365: как получить метаданные формы? - PullRequest
0 голосов
/ 29 апреля 2020

Как получить метаданные формы через C#? Мне нужно получить информацию обо всех OnChange обработчиках событий элементов спецификации c Form (посмотрите на экран внизу) через консольное приложение (написано на C#). Я знаю, как получить метаданные сущности, но не вижу никакой информации о ее формах внутри.

enter image description here

1 Ответ

1 голос
/ 30 апреля 2020

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

Тем не менее, вы можете запросить метаданные формы Entity для formXML / form Json и проанализировать их для собственного использования.

https://crmorg.crm.dynamics.com/api/data/v9.1/systemforms?$select=formjson,formxml&$filter=name%20eq%20%27Account%27

См. Ниже в этом блоге

enter image description here

В этом блоге есть запрос sql, извлекающий форму XML из предварительной базы данных.

WITH x AS 
(
       SELECT FormId, e.Name, CAST(FormXml AS Xml) FormXml 
       FROM SystemForm sf
       JOIN Entity e ON sf.ObjectTypeCode = e.ObjectTypeCode AND e.OverwriteTime = '1900-01-01 00:00:00.000'
       WHERE e.Name = 'Account'
)
, y AS 
(
       SELECT 
              x.FormId,
              x.Name Entity, 
              x.FormXml, -- Uncomment to see the full form xml
              t.c.value('@name', 'varchar(max)') HandlerName,
              t.c.value('@attribute', 'varchar(max)') AttributeName,
              a.b.value('@libraryName', 'varchar(max)') Library,
              a.b.value('@functionName', 'varchar(max)') FunctionName,
              a.b.value('@enabled', 'varchar(16)') [Enabled],
              t.c.query('.') [t.c.query], 
              a.b.query('.') [a.b.query]
       FROM  x
       CROSS APPLY x.FormXml.nodes('/form/events/event') T(c)
       OUTER APPLY t.c.nodes('Handlers/Handler') a(b)
       WHERE t.c.value('count(Handlers/Handler)', 'int') > 0
)

SELECT 
       *
FROM y 
-- WHERE Enabled = 'true' -- This will exclude non-attribute related rows
ORDER BY y.Entity, y.HandlerName, y.Library, y.FunctionName
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...