您的位置:首页 > 其它

用户离职后如何删除其个人视图(Personal View)?

2021-04-29 23:31 281 查看

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复440或者20210429可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

铁打的军营流水的兵,公司也是一样,人来人往,离职后将其在Dynamics 365的账号禁用,一般我们会取消其许可,减少对Dynamics 365许可的占用以便节省费用,过一会儿这个用户在Dynamics 365中就会显示为已经禁用。

我这里来操作下取消用户许可。最好是具有Global Administrator权限的账号登录 https://admin.microsoft.com/ 找到要进行处理的用户,点击出来 Manage product licenses.

取消他的所有许可(将所有许可前面的复选框取消选中),然后点击【Save chages】按钮。


过会儿我们来看这个用户,可以看到这个用户的状态已经是Disabled了。注意,如果用户是Global Aministrator,移除许可不会禁用用户。


用户不能访问了,但是他/她可能建立了一些私有视图,这些私有视图可能分享给了其他用户/团队,如何删除?有些人可能有强迫症,不想看到,特别是离职员工创建的试图包括了该员工的名字。

方法一:通过对用户执行 【Reassign Records】操作,这个如果用户负责的记录很多执行操作耗时会比较长,而且记录被重新分派的话可能触发某些插件/工作流/flow等,可能会存在潜在问题。当然这个操作也会重新分派这个用户的私人视图到指定的用户,然后新负责人是可以删除这些私有视图的。

方法二,通过执行SQL执行删除,如果是On-premise部署的话自己执行即可,若是Online版本的话则需要上Case给到微软技术支持中心来处理,执行的SQL类似这种:

delete from userquerybase where createdby='禁用用户的GUID'


可能你会有疑问,我可以用Web API的代理来做吗?实际上是不行的,我做了验证。

比如我用下面的代码来查看这个用户的私有视图,但是会报错如下:

{
    "error":{
        "code":"0x8004d24b",
        "message":"The user with SystemUserId=ccf01a1c-efa8-eb11-9442-00224816c083 in OrganizationContext=a38a904d-9ebf-43cd-9aab-92098bb67be1 is not licensed, and its SystemUserAccessMode=0 is not either of (NonInteractive=4, SetupUser=1)"
    }
}


使用的代码如下:

    var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
    var req = new XMLHttpRequest()
    req.open("GET", clientUrl + "/api/data/v9.2/userqueries?$select=name,createdon,userqueryid&$filter=_createdby_value eq 'ccf01a1c-efa8-eb11-9442-00224816c083'", true);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("MSCRMCallerID", "ccf01a1c-efa8-eb11-9442-00224816c083");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.onreadystatechange = function () {
        if (this.readyState == 4) {
            req.onreadystatechange = null;
            if (this.status == 200) {
                var responseJSON = JSON.parse(this.responseText);
                console.log(responseJSON);
            }
            else {
                var error = JSON.parse(this.responseText).error;
                Xrm.Utility.alertDialog("Error." + error.message);
            }
        }
    };
    req.send();



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: