是否可以通过CRM 2013 Package Deployer收集用户输入?

时间:2014-10-01 17:36:34

标签: c# dynamics-crm-2011 dynamics-crm dynamics-crm-2013

软件包部署程序是一个很好的工具(毫无疑问),但有些情况下,收集用户信息会非常有用,这样我们就可以在语法上应用一些配置,现在这些都是手动安装后过程的一部分。

文档提到RootControlDispatcher

  

这是一个调度程序接口,用于允许控件在程序包部署期间呈现自己的UI。您可以利用此接口来包装任何UI元素或命令。在使用之前检查此变量的空值非常重要,因为它可能会也可能不会设置为值。

这是要走的路吗?这几乎就是文档所说的内容。

1 个答案:

答案 0 :(得分:0)

是的,这可以在使用UI客户端进行部署时完成。但是,如果使用PowerShell进行部署,则无法正常工作。这就是为什么你必须检查以确保RootControlDispatcher不为空。

您可以在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");
}

希望有所帮助。