Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript c#-Dynamics CRM插件-创建前自动填充数据_Javascript_C#_Plugins_Dynamics Crm_Crm - Fatal编程技术网

Javascript c#-Dynamics CRM插件-创建前自动填充数据

Javascript c#-Dynamics CRM插件-创建前自动填充数据,javascript,c#,plugins,dynamics-crm,crm,Javascript,C#,Plugins,Dynamics Crm,Crm,我想使用插件来填充案例实体表单数据。我对使用c#和插件还不熟悉,但我感觉这比使用javascript表单脚本更可靠。如果这是一个错误的假设,请告诉我 我的目标是1)获取并检查用户的安全角色,2)基于安全角色,使用通用的硬编码值自动填充“Customer”字段 案例表单上的“客户”字段是“系统必需”字段。我目前有一个插件注册在创建事件,预验证和同步。当我试图在不手动填写“Customer”字段的情况下保存时,我无法保存,UI告诉我该字段尚未填写 我是否在尝试做一些不可能的事情?或者我应该仅仅使用j

我想使用插件来填充案例实体表单数据。我对使用c#和插件还不熟悉,但我感觉这比使用javascript表单脚本更可靠。如果这是一个错误的假设,请告诉我

我的目标是1)获取并检查用户的安全角色,2)基于安全角色,使用通用的硬编码值自动填充“Customer”字段

案例表单上的“客户”字段是“系统必需”字段。我目前有一个插件注册在创建事件,预验证和同步。当我试图在不手动填写“Customer”字段的情况下保存时,我无法保存,UI告诉我该字段尚未填写

我是否在尝试做一些不可能的事情?或者我应该仅仅使用javascript和/或业务规则来实现类似的功能吗

  • 插件很贵。根据您的需要,OnLoad JavaScript函数更合适
  • 关于预验证阶段,验证实际上是检查用户权限等事项;在客户端检查现场需求水平。所以,即使是预验证插件也不能帮助用户跳过必填字段
  • 如果插件是您的首选项,您可以为此字段设置默认值,并在插件中填充正确的值

  • 为了通过插件实现这一点,您可能需要对用户可能拥有的角色使用RetrieveMultiple request,然后循环遍历结果,根据角色分配customer字段值

    例如,如果您有一个fetchxml来获取可以在插件中使用的角色(您也可以使用QueryExpression而不是fetchxml)

    string FetchXML=
    @"
    ";
    EntityCollection结果=svcClient.OrganizationServiceProxy.RetrieveMultiple(新的Microsoft.Xrm.Sdk.Query.FetchExpression(FetchXML));
    //然后循环遍历结果
    如果(结果!=null)
    {
    foreach(result.Entities中的var项){
    //…在这里做你的事
    //item.roleName只是一个想法..我还没有测试代码。。
    实体案例=新实体(“案例”);
    如果(item.roleName==“角色01”)
    contact.Attributes[“customer_field”]=“硬编码值01”;
    如果(item.roleName==“角色02”)
    contact.Attributes[“customer_field”]=“硬编码值02”;
    ...
    ...
    }
    }
    
    对于那个特定的场景,我认为您可以通过使用javascript来实现它。如果你决定走那条路,我有个主意

    将javascript函数(例如,autoFillCustomer())附加到表单的onload事件,该事件将验证角色名称,并根据结果设置硬编码的所需值

    function autoFillCustomer(){
            var roles = getAllUserRolesNames();
            var customerField = Xrm.Page.getAttribute("customer_field");
    
            for (var i = 0; i < roles.length; i++) {
                var roleName = roles[i];
    
                switch (roleName) {
                    case "Role Name 01":                
                        if ( customerField!= null )
                            customerFieldsetValue("hard-coded avlue 01");
    
                        break;
    
                    case "Role Name 021":                
                        if ( customerField!= null )
                            customerFieldsetValue("hard-coded avlue 02");
    
                        break;
    
                    default;            
                        if ( customerField!= null )
                            customerFieldsetValue("default value if needed");
                }
            }
        }
    
    函数autoFillCustomer(){
    var roles=getAllUserRolesNames();
    var customerField=Xrm.Page.getAttribute(“客户_字段”);
    对于(变量i=0;i
    然后。。另一方面,您可能有另一个js webresource,它实现了getAllUserRolesName(),并将其添加到表单中。 (这是因为您可以在未来的新场景中使用它)

    //显示名称:获取所有用户角色名称
    //描述:返回一个数组,其中包含当前分配给用户的所有角色和团队
    //这将包含名称,而不是标准getUserRoles()函数所使用的guid。
    函数getAllUserRolesNames(){
    var guid=“[A-z0-9]{8}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{12}”;
    var serverUrl=Xrm.Page.context.getClientUrl();
    var userId=Xrm.Page.context.getUserId();
    userId=userId.match(guid);
    var teamQuery=“TeamMembershipSet?$select=TeamId&$filter=SystemUserId eq guid'”+userId+“'”;
    var teamRoleQuery=“TeamRolesSet?$select=RoleId&$filter=”;
    var roleQuery=“RoleSet?$select=Name&$filter=”;
    var teams=makeRequest(serverUrl,teamQuery,0);
    teamRoleQuery=组合(teamRoleQuery,“TeamId”,teams);
    var teamRoles=makeRequest(serverUrl,teamrolequiry,1);
    userRoles=Xrm.Page.context.getUserRoles();
    if(userRoles!=null){
    for(var i=0;ifunction autoFillCustomer(){
            var roles = getAllUserRolesNames();
            var customerField = Xrm.Page.getAttribute("customer_field");
    
            for (var i = 0; i < roles.length; i++) {
                var roleName = roles[i];
    
                switch (roleName) {
                    case "Role Name 01":                
                        if ( customerField!= null )
                            customerFieldsetValue("hard-coded avlue 01");
    
                        break;
    
                    case "Role Name 021":                
                        if ( customerField!= null )
                            customerFieldsetValue("hard-coded avlue 02");
    
                        break;
    
                    default;            
                        if ( customerField!= null )
                            customerFieldsetValue("default value if needed");
                }
            }
        }
    
    // Display Name: Get All User Roles Names
    // Description:  Returns an array containing all the roles and teams currently assigned to a user
    //               This will contain the name and not the guid which is what the standard getUserRoles() function does.
    function getAllUserRolesNames() {
        var guid = "[A-z0-9]{8}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{4}-[A-z0-9]{12}";
        var serverUrl = Xrm.Page.context.getClientUrl();
        var userId = Xrm.Page.context.getUserId();
        userId = userId.match(guid);
        var teamQuery = "TeamMembershipSet?$select=TeamId&$filter=SystemUserId eq guid'" + userId + "'";
        var teamRoleQuery = "TeamRolesSet?$select=RoleId&$filter=";
        var roleQuery = "RoleSet?$select=Name&$filter=";
        var teams = makeRequest(serverUrl, teamQuery, 0);
        teamRoleQuery = composeQuery(teamRoleQuery, "TeamId", teams);
        var teamRoles = makeRequest(serverUrl, teamRoleQuery, 1);
        userRoles = Xrm.Page.context.getUserRoles();
        if (userRoles != null) {
            for (var i = 0; i < userRoles.length; i++) {
                teamRoles.push(userRoles[i].match(guid));
            }
        }
        roleQuery = composeQuery(roleQuery, "RoleId", teamRoles);
        var roles = makeRequest(serverUrl, roleQuery, 2);
        return roles;
    }
    function makeRequest(serverUrl, query, type) {
        var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";
        oDataEndpointUrl += query;
        var service = GetRequestObject();
        if (service != null) {
            service.open("GET", oDataEndpointUrl, false);
            service.setRequestHeader("X-Requested-With", "XMLHttpRequest");
            service.setRequestHeader("Accept", "application/json, text/javascript, */*");
            service.send(null);
            var retrieved = $.parseJSON(service.responseText).d;
            var results = new Array();
            switch (type) {
                case 0:
                for (var i = 0; i < retrieved.results.length; i++) {
                    results.push(retrieved.results[i].TeamId);
                }
                break;
                case 1:
                for (var i = 0; i < retrieved.results.length; i++) {
                    results.push(retrieved.results[i].RoleId);
                }
                break;
                case 2:
                for (var i = 0; i < retrieved.results.length; i++) {
                    if (results.indexOf(retrieved.results[i].Name) == -1) {
                        results.push(retrieved.results[i].Name);
                    }
                }
                break;
            }
            return results;
        }
        return null;
    }
    
    function GetRequestObject() {
        if (window.XMLHttpRequest) {
            return new window.XMLHttpRequest;
        } else {
            try {
                return new ActiveXObject("MSXML2.XMLHTTP.3.0");
            } catch (ex) {
                return null;
            }
        }
    }
    
    function composeQuery(queryBase, attribute, items) {
        if (items != null) {
            for (var i = 0; i < items.length; i++) {
                if (i == 0) {
                    queryBase += attribute + " eq (guid'" + items[i] + "')";
                } else {
                    queryBase += " or " + attribute + " eq (guid'" + items[i] + "')";
                }
            }
        }
        return queryBase;
    }