我希望在人员删除字段时触发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,则无效。
答案 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