0

我的公司正在使用 Microsoft Dynamic CRM 2011 并希望自定义一些功能。如下所述的自定义:

“有账户的密码字段(用于登录我们公司网站)。密码仅对帐户所有者、销售经理或销售管理员可见。”</p>

我该怎么做,MSCRM 2011 中的 Field Security 似乎只支持用户和团队。请告诉我该怎么做(甚至通过编程)。

4

2 回答 2

0

现场安全对于特定角色(销售经理等)非常有用,但不适用于“上下文感知”场景,例如记录所有者。

您最好的选择是为密码创建一个自定义实体,使主要字段(默认名称)不是业务必需的。

创建与 Account 的 N:1 关系,将关系设为“Parental”并将查找字段设为 Business Required。您现在将在帐户的左侧导航中看到“密码”。

编辑密码表单以查找帐户,并为密码本身添加文本字段,并使“名称”字段默认不可见,因此您可以忽略它。

创建安全角色(或编辑现有角色)以授予用户级别的密码访问权限,以获取读取、创建、更新、分配和附加权限。修改销售经理角色以允许读取所有密码记录。

父母关系意味着如果重新分配帐户,则子密码记录也将如此。但是,有人可以创建密码记录(因此他们拥有它)并将其链接到一个帐户(甚至可能是他们不拥有的帐户),而无需更改所有者以匹配父级。因此,在密码记录创建、重新父级或重新分配上创建一个工作流,这会将所有者更改为与父级帐户相同的帐户,以整理这种情况。

编辑密码的关联视图以显示密码字段。根据需要编辑其他视图。(如果您真的想直接在 Account 表单上显示密码,请使用内联网格集以使用最少的空间,没有视图选择器等。但实际上仍然占用太多。)

希望这可以帮助

于 2012-02-22T15:32:52.783 回答
0

这可以通过使用 javascript 来实现。

首先,将密码字段设置为默认不可见 - 这将阻止它最初出现,以便没有权限的用户可能会看到它(即使是短暂的)。

其次,提供一个javascript函数来查找登录用户的角色。有很多方法可以做到这一点,每种方法都有自己的优点和缺点。此链接有几种您可以使用的方法。

第三,使用此函数和一些额外的 javascript 来检查所有者字段以使该字段可见/不可见。

举个例子:

function CanUserSeePassword() {
    var loggedInUserGuid = USER_ID;//USER_ID is built in CRM constant
    if (RetrieveUserRoles(loggedInUserGuid)) {
        SetPasswordFieldVisibility(true);
    }
    else {
        var ownerGuid = Xrm.Page.getAttribute('ownerid').getValue()[0].id;
        SetPasswordFieldVisibility(ownerGuid == USER_ID);
    }
}

function SetPasswordFieldVisibility(isVisible) {
    Xrm.Page.getAttribute('new_password').setVisible(isVisible);
} 

function RetrieveUserRoles() {
    //use code from link above to return a bool, either user is in appropriate security role, or is not
}

有点粗糙'n'准备好了,但会完成这项工作。

于 2011-06-03T20:31:40.293 回答