是否可以使用CRM 2013软件包部署程序收集用户输入

本文关键字:程序 用户 输入 部署 软件包 可以使 CRM 2013 是否 | 更新日期: 2023-09-27 18:25:25

Packagedeployer是一个很好的工具(毫无疑问),但在某些情况下,收集用户信息会非常有帮助,使我们能够语法地应用一些配置,这些现在是手动安装后过程的一部分。

文档中提到了RootControlDispatcher:

这是一个调度器接口,用于允许控件在包部署期间呈现自己的UI。您可以使用此接口包装任何UI元素或命令。在使用此变量之前,请检查其是否为空值,这一点很重要,因为它可能被设置为值,也可能未被设置为

这是要走的路吗?这几乎就是文档中对它的描述。

是否可以使用CRM 2013软件包部署程序收集用户输入

是的,这可以在使用UI客户端进行部署时完成。但是,如果使用powershell进行部署,它将不起作用。这就是为什么您必须检查以确保RootControlDispatcher不是null。

您可以在CRM SDK的UII部分的CCA示例包中看到这方面的示例。CCA使用自定义UI来捕获非英语语言的CSR安全角色信息。

如果找不到安全角色,它会弹出一个对话框,询问用户角色
它的做法如下:

RootControlDispatcher.Invoke((Action)(() =>
{
    // Load all Roles and asks the user to choose. 
    SecurityRoleSelector selFrm = new SecurityRoleSelector();
    if (selFrm.RolesDataModel != null)
    {
        selFrm.RolesDataModel.items.Clear();
        // Get the items for the control. 
        SearchFilter.Clear();
        var sL = rslts.Values.OrderBy(w => CrmSvc.GetDataByKeyFromResultsSet<string>(w, "name"));
        foreach (var rol in sL)
        {
            selFrm.RolesDataModel.items.Add(new CrmSecurityRoles()
            {
                RoleId = CrmSvc.GetDataByKeyFromResultsSet<Guid>(rol, "roleid"),
                RoleName = CrmSvc.GetDataByKeyFromResultsSet<string>(rol, "name")
            });
        }
        if (selFrm.ShowDialog().GetValueOrDefault(false))
        {
            // user selected an item. 
            if (selFrm.RolesControl.cbSelectedItem.SelectedItem != null)
            {
                CrmSecurityRoles role = (CrmSecurityRoles)selFrm.RolesControl.cbSelectedItem.SelectedItem;
                guCSRManagerRoleId = role.RoleId;
            }
        }
    }
    selFrm.Close(); // Clean up form. 
}), DispatcherPriority.Normal , null);

securityroleselector表单是一个带有下拉列表的简单对话框。

一旦它有了数据,它就被用来更新正确的安全角色,使用这样的逻辑:

if (guCSRManagerRoleId == Guid.Empty)
{
    // Error Something wrong here.. 
    RaiseUpdateEvent(CCADemoExtension.Resources.LocalResourcesCCADemoExt.RAISEUPDATEVENT_COULDNOTFIND_CSRMGRROLEINCRM_MSG, ProgressPanelItemStatus.Failed);
    PackageLog.Log("Could not find CSR Manager Role in CRM", System.Diagnostics.TraceEventType.Error);
    PackageLog.Log("RunUiiSpecificChanges", System.Diagnostics.TraceEventType.Stop);
    return false;
}
// Check to see if they are already associated... 
if (!IsRoleAssoicatedWithTeam(EscalationTeamId, guCSRManagerRoleId))
{
    // Try to assign team. 
    CrmSvc.CreateEntityAssociation("team", guTeamId, "role", guCSRManagerRoleId, "teamroles_association");
}

希望能有所帮助。