如何知道触发器上的用户上下文

时间:2014-12-23 15:07:34

标签: sql triggers dynamics-crm-2011 dynamics-crm crm

我希望在人员删除字段时触发CRM的元数据表上的触发器。

这项工作正常,但我不知道如何让发送请求的用户删除该字段。

有什么方法可以知道这个吗?

这是触发器:

CREATE TRIGGER Trg_InsertMetadataAttributeDELETE
   ON  metadataschema.Attribute
   AFTER DELETE
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO MIGRACIONDATOS.TablaLogAtributos (Fecha, Entidad, Atributo)
    SELECT Getdate(), E.Name, A.Name
       FROM Deleted A
            INNER JOIN metadataschema.Entity E 
                ON A.EntityID = E.EntityID

END
GO

CRM组织未升级到UR12且无法升级

更新:如果累计不低于12,则无效。

2 个答案:

答案 0 :(得分:2)

Microsoft不支持以调整索引以外的任何方式操作CRM数据库。 假设您安装了UR12(如果没有,我强烈建议您尽快安装),Microsoft.Xrm.Metadata.Query提供了支持的工具。

Retrieve and Detect Changes to Metadata

  

Microsoft.Xrm.Sdk.Metadata.Query命名空间中的类以及RetrieveMetadataChangesRequest和RetrieveMetadataChangesResponse类使您可以构建有效的元数据查询,并捕获元数据随时间发生的变化。

     

[代码示例在链接的MSDN部分提供]

答案 1 :(得分:1)

See if these help you :  All executable in triggers.

-- get the user name
SELECT SUSER_SNAME();

-- get the event data. Which you can parse and retrieve the event command, scheme, objects....
DECLARE @EventData XML;
    SET @EventData  = EVENTDATA();
-- Then parse the xml. For example :
SELECT @EventData.value('(/EVENT_INSTANCE/EventType)[1]',   'NVARCHAR(100)'), 
SELECT @EventData.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'NVARCHAR(MAX)'),

-- Get connection specific data 
SELECT *
FROM sys.dm_exec_connections
    WHERE session_id = @@SPID;

-- Get session specific data on whomever executed the process that fired the trigger
SELECT *
FROM sys.dm_exec_sessions
    WHERE session_id = @@SPID;

请参阅EVENTDATA()的使用链接:http://msdn.microsoft.com/en-us/library/ms173781.aspx