【问题标题】:Dynamics 365: How to get the Form Metadata?Dynamics 365:如何获取表单元数据?
【发布时间】:2020-04-29 16:08:59
【问题描述】:

如何通过 C# 获取表单元数据?我需要通过控制台应用程序(用 C# 编写)获取有关特定表单元素的所有 OnChange 事件处理程序的信息(查看底部的屏幕)。我知道如何获取实体元数据,但我没有看到任何有关其内部形式的信息。

【问题讨论】:

    标签: c# dynamics-crm microsoft-dynamics


    【解决方案1】:

    这些没有存储在数据库中以便于访问,因为它们存储在 formXML 中,并且不确定我们是否可以轻松访问这些事件。

    您仍然可以查询 formXML/formJson 的实体表单元数据并解析它以供自己使用。

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

    Referred below from this blog

    该博客有一个 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
    

    【讨论】:

    • 我使用 v8.2,但出现错误:在类型“Microsoft.Dynamics.CRM.systemform”上找不到名为“formjson”的属性。是否可以对 v8.2 而不是 v9.1 做同样的事情?
    • 如果我使用您的网络请求(通过我的端点),我会收到此错误。
    • @AndreyBushman 然后使用这个请:crmorg.crm.dynamics.com/api/data/v8.2/systemforms?$select=formxml&$filter=name%20eq%20%27Account%27
    • 在这种情况下我得到空数组:{ "@odata.context":"https://crmdev.softline.com/api/data/v8.2/$metadata#systemforms(formxml)","value":[ ] }
    • 我找到了这种行为的原因:我要使用本地化名称。 IE。 Организация 而不是 Account。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 2022-12-07
    相关资源
    最近更新 更多