Dynamics 365:如何获取表单元数据?
Dynamics 365: How to get the Form Metadata?
如何通过C#获取表单元数据?我需要通过控制台应用程序(用 C# 编写)获取有关特定表单元素的所有 OnChange
事件处理程序的信息(查看底部的屏幕)。我知道如何获取实体元数据,但我没有在其中看到有关其形式的任何信息。
这些未存储在数据库中以便于访问,因为它们存储在 formXML 中,并且不确定我们是否可以轻松访问事件。
您仍然可以查询 formXML/formJson 的实体表单元数据并解析它以供自己使用。
https://crmorg.crm.dynamics.com/api/data/v9.1/systemforms?$select=formjson,formxml&$filter=name%20eq%20%27Account%27
该博客有一个 sql 从本地数据库中提取 formXML 的查询。
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
如何通过C#获取表单元数据?我需要通过控制台应用程序(用 C# 编写)获取有关特定表单元素的所有 OnChange
事件处理程序的信息(查看底部的屏幕)。我知道如何获取实体元数据,但我没有在其中看到有关其形式的任何信息。
这些未存储在数据库中以便于访问,因为它们存储在 formXML 中,并且不确定我们是否可以轻松访问事件。
您仍然可以查询 formXML/formJson 的实体表单元数据并解析它以供自己使用。
https://crmorg.crm.dynamics.com/api/data/v9.1/systemforms?$select=formjson,formxml&$filter=name%20eq%20%27Account%27
该博客有一个 sql 从本地数据库中提取 formXML 的查询。
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