Creación de Campos concatenados, sector y subsector en clientes potenciales.

Creación de Campos concatenados, sector y subsector en clientes potenciales.

Paso 1. Crear 2 recursos web,

Recurso 1. Fichero XML

New_SectorOptionSetConfig_lead, SectorOptionSetConfig_lead.xml

Tipo datos XML, editar y pegamos el ejemplo.
<DependentOptionSetConfig entity="lead" >
 <ParentField id="new_sector"
              label="Sector">
  <DependentField id="new_subsector"
                  label="Subsector" />
  <Option value="100000000"
          label="Actividades legislativas, gubernamentales, de impartición de justicia y de organismos internacionales y extraterritoriales">
   <ShowOption value="100000000"
               label="Actividades legislativas, gubernamentales y de impartición de justicia" />
   <ShowOption value="100000001"
               label="Organismos internacionales y extraterritoriales" />
  </Option>
  <Option value="100000001"
          label="Agricultura, cría y explotación de animales, aprovechamiento forestal, pesca y caza">
   <ShowOption value="100000002"
               label="Agricultura" />
   <ShowOption value="100000003"
               label="Aprovechamiento forestal" />
   <ShowOption value="100000004"
               label="Cría y explotación de animales" />
   <ShowOption value="100000005"
               label="Pesca, caza y captura" />
   <ShowOption value="100000006"
               label="Servicios relacionados con las actividades agropecuarias y forestales" />
  </Option>
  <Option value="100000002"
          label="Comercio al por mayor">
   <ShowOption value="100000007"
               label="Comercio al por mayor de abarrotes, alimentos, bebidas, hielo y tabaco" />
   <ShowOption value="100000008"
               label="Comercio al por mayor de camiones y de partes y refacciones nuevas para automóviles, camionetas y camiones" />
   <ShowOption value="100000009"
               label="Comercio al por mayor de maquinaria, equipo y mobiliario para actividades agropecuarias, industriales, de servicios y comerciales, y de otra maquinaria y equipo de uso general" />
   <ShowOption value="100000010"
               label="Comercio al por mayor de materias primas agropecuarias y forestales, para la industria, y materiales de desecho" />
   <ShowOption value="100000011"
               label="Comercio al por mayor de productos farmacéuticos, de perfumería, artículos para el esparcimiento, electrodomésticos menores y aparatos de línea blanca" />
   <ShowOption value="100000012"
               label="Comercio al por mayor de productos textiles y calzado" />
   <ShowOption value="100000013"
               label="Intermediación de comercio al por mayor" />
  </Option>
  <Option value="100000003"
          label="Comercio al por menor">
   <ShowOption value="100000014"
               label="Comercio al por menor de abarrotes, alimentos, bebidas, hielo y tabaco" />
   <ShowOption value="100000015"
               label="Comercio al por menor de artículos de ferretería, tlapalería y vidrios" />
   <ShowOption value="100000016"
               label="Comercio al por menor de artículos de papelería, para el esparcimiento y otros artículos de uso personal" />
   <ShowOption value="100000017"
               label="Comercio al por menor de artículos para el cuidado de la salud" />
   <ShowOption value="100000018"
               label="Comercio al por menor de enseres domésticos, computadoras, artículos para la decoración de interiores y artículos usados" />
   <ShowOption value="100000019"
               label="Comercio al por menor de productos textiles, bisutería, accesorios de vestir y calzado" />
   <ShowOption value="100000020"
               label="Comercio al por menor de vehículos de motor, refacciones, combustibles y lubricantes" />
   <ShowOption value="100000021"
               label="Comercio al por menor en tiendas de autoservicio y departamentales" />
   <ShowOption value="100000022"
               label="Comercio al por menor exclusivamente a través de Internet, y catálogos impresos, televisión y similares" />
   <ShowOption value="100000023"
               label="Intermediación de comercio al por mayor" />
  </Option>
  <Option value="100000004"
          label="Construcción">
    <ShowOption value="100000024"
                label="Construcción de obras de ingeniería civil" />
    <ShowOption value="100000025"
                label="Edificación" />
    <ShowOption value="100000026"
                label="Trabajos especializados para la construcción" />
  </Option>
  <Option value="100000005"
          label="Corporativos">
    <ShowOption value="100000027"
                label="Corporativos" />
  </Option>
  <Option value="100000006"
          label="Generación, transmisión y distribución de energía eléctrica, suministro de agua y de gas por ductos al consumidor final">
    <ShowOption value="100000028"
                label="Generación, transmisión y distribución de energía eléctrica" />
    <ShowOption value="100000029"
                label="Suministro de agua y suministro de gas por ductos al consumidor final" />
  </Option>
  <Option value="100000007"             
          label="Industrias manufactureras">
    <ShowOption value="100000030"
                label="Curtido y acabado de cuero y piel, y fabricación de productos de cuero, piel y materiales sucedáneos" />
    <ShowOption value="100000031"
                label="Fabricación de accesorios, aparatos eléctricos y equipo de generación de energía eléctrica" />
    <ShowOption value="100000032"
                label="Fabricación de equipo de computación, comunicación, medición y de otros equipos, componentes y accesorios electrónicos" />
    <ShowOption value="100000033"
                label="Fabricación de equipo de transporte" />
    <ShowOption value="100000034"
                label="Fabricación de insumos textiles y acabado de textiles" />
    <ShowOption value="100000035"
                label="Fabricación de maquinaria y equipo" />
    <ShowOption value="100000036"
                label="Fabricación de muebles, colchones y persianas" />
    <ShowOption value="100000037"
                label="Fabricación de prendas de vestir" />
    <ShowOption value="100000038"
                label="Fabricación de productos a base de minerales no metálicos" />
    <ShowOption value="100000039"
                label="Fabricación de productos derivados del petróleo y del carbón" />
    <ShowOption value="100000040"
                label="Fabricación de productos metálicos" />
    <ShowOption value="100000041"
                label="Impresión e industrias conexas" />
    <ShowOption value="100000042"
                label="Industria alimentaria" />
    <ShowOption value="100000043"
                label="Industria de la madera" />
    <ShowOption value="100000044"
                label="Industria de las bebidas y del tabaco" />
    <ShowOption value="100000045"
                label="Industria del papel" />
    <ShowOption value="100000046"
                label="Industria del plástico y del hule" />
    <ShowOption value="100000047"
                label="Industria química" />
    <ShowOption value="100000048"
                label="Industrias metálicas básicas" />
    <ShowOption value="100000049"
                label="Otras industrias manufactureras" />
  </Option>
  <Option value="100000008"             
          label="Información en medios masivos">
    <ShowOption value="100000050"
                label="Edición de periódicos, revistas, libros, software y otros materiales, y edición de estas publicaciones integrada con la impresión" />
    <ShowOption value="100000051"
                label="Industria fílmica y del video, e industria del sonido" />
    <ShowOption value="100000052"
                label="Otras telecomunicaciones" />
    <ShowOption value="100000053"
                label="Otros servicios de información" />
    <ShowOption value="100000054"
                label="Procesamiento electrónico de información, hospedaje y otros servicios relacionados" />
    <ShowOption value="100000055"
                label="Radio y televisión" />
  </Option>
  <Option value="100000009"             
          label="Minería">
    <ShowOption value="100000056"
                label="Extracción de petróleo y gas" />
    <ShowOption value="100000057"
                label="Minería de minerales metálicos y no metálicos, excepto petróleo y gas" />
    <ShowOption value="100000058"
                label="Servicios relacionados con la minería" />
  </Option>
  <Option value="100000010"             
          label="Otros servicios excepto actividades gubernamentales">
    <ShowOption value="100000059"
                label="Asociaciones y organizaciones" />
    <ShowOption value="100000060"
                label="Servicios de reparación y mantenimiento" />
    <ShowOption value="100000061"
                label="Servicios personales" />
  </Option>
  <Option value="100000011"             
          label="Servicios de alojamiento temporal y de preparación de alimentos y bebidas">
    <ShowOption value="100000062"
                label="Servicios de alojamiento temporal" />
    <ShowOption value="100000063"
                label="Servicios de preparación de alimentos y bebidas" />
  </Option>
  <Option value="100000012"             
          label="Servicios de apoyo a los negocios y manejo de desechos y servicios de remediación">
    <ShowOption value="100000064"
                label="Manejo de desechos y servicios de remediación" />
    <ShowOption value="100000065"
                label="Servicios de apoyo a los negocios" />
  </Option>
  <Option value="100000013"             
          label="Servicios de esparcimiento culturales y deportivos, y otros servicios recreativos">
    <ShowOption value="100000066"
                label="Museos, sitios históricos, zoológicos y similares" />
    <ShowOption value="100000067"
                label="Servicios artísticos, culturales y deportivos, y otros servicios relacionados" />
    <ShowOption value="100000068"
                label="Servicios de entretenimiento en instalaciones recreativas y otros servicios recreativos" />
  </Option>
  <Option value="100000014"             
          label="Servicios de salud y de asistencia social">
    <ShowOption value="100000069"
                label="Hospitales" />
    <ShowOption value="100000070"
                label="Otros servicios de asistencia social" />
    <ShowOption value="100000071"
                label="Residencias de asistencia social y para el cuidado de la salud" />
    <ShowOption value="100000072"
                label="Servicios médicos de consulta externa y servicios relacionados" />
  </Option>
  <Option value="100000015"             
          label="Servicios educativos">
    <ShowOption value="100000073"
                label="Servicios educativos" />
  </Option>
  <Option value="100000016"             
          label="Servicios financieros y de seguros">
    <ShowOption value="100000074"
                label="Actividades bursátiles, cambiarias y de inversión financiera" />
    <ShowOption value="100000075"
                label="Banca central" />
    <ShowOption value="100000076"
                label="Compañías de fianzas, seguros y pensiones" />
    <ShowOption value="100000077"
                label="Instituciones de intermediación crediticia y financiera no bursátil" />
  </Option>
  <Option value="100000017"             
          label="Servicios inmobiliarios y de alquiler de bienes muebles e intangibles">
    <ShowOption value="100000078"
                label="Servicios de alquiler de bienes muebles" />
    <ShowOption value="100000079"
                label="Servicios de alquiler de marcas registradas, patentes y franquicias" />
    <ShowOption value="100000080"
                label="Servicios inmobiliarios" />
  </Option>
  <Option value="100000018"             
          label="Servicios profesionales, científicos y técnicos">
    <ShowOption value="100000081"
                label="Servicios profesionales, científicos y técnicos" />
  </Option>
  <Option value="100000019"             
          label="Transportes, correos y almacenamiento">
    <ShowOption value="100000082"
                label="Autotransporte de carga" />
    <ShowOption value="100000083"
                label="Servicios de almacenamiento" />
    <ShowOption value="100000084"
                label="Servicios de mensajería y paquetería" />
    <ShowOption value="100000085"
                label="Servicios postales" />
    <ShowOption value="100000086"
                label="Servicios relacionados con el transporte" />
    <ShowOption value="100000087"
                label="Transporte aéreo" />
    <ShowOption value="100000088"
                label="Transporte por agua" />
    <ShowOption value="100000089"
                label="Transporte por ferrocarril" />
    <ShowOption value="100000090"
                label="Transporte terrestre de pasajeros, excepto por ferrocarril" />
    <ShowOption value="100000091"
                label="Transporte turístico" />
  </Option>
 </ParentField>  
</DependentOptionSetConfig>


Recurso 2. Fichero JavaScript


DependentOptionSetSample.js

Tipo JavaScript. Código:
// =====================================================================
//  This file is part of the Microsoft Dynamics CRM SDK code samples.
//
//  Copyright (C) Microsoft Corporation.  All rights reserved.
//
//  This source code is intended only as a supplement to Microsoft
//  Development Tools and/or on-line documentation.  See these other
//  materials for detailed information regarding Microsoft code samples.
//
//  THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
//  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
//  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//  PARTICULAR PURPOSE.
// =====================================================================
// <snippetSDK.DependentOptionSet.js>

//If the SDK namespace object is not defined, create it.
if (typeof (SDK) == "undefined")
{ SDK = {}; }
// Create Namespace container for functions in this library;
SDK.DependentOptionSet = {};
SDK.DependentOptionSet.init = function (webResourceName) {
 //Retrieve the XML Web Resource specified by the parameter passed
 var clientURL = Xrm.Page.context.getClientUrl();

 var pathToWR = clientURL + "/WebResources/" + webResourceName;
 var xhr = new XMLHttpRequest();
 xhr.open("GET", pathToWR, true);
 xhr.setRequestHeader("Content-Type", "text/xml");
 xhr.onreadystatechange = function () { SDK.DependentOptionSet.completeInitialization(xhr); };
 xhr.send();
};
SDK.DependentOptionSet.completeInitialization = function (xhr) {
 if (xhr.readyState == 4 /* complete */) {
     if (xhr.status == 200) {
         xhr.onreadystatechange = null; //avoids memory leaks
   var JSConfig = [];
   var ParentFields = xhr.responseXML.documentElement.getElementsByTagName("ParentField");
   for (var i = 0; i < ParentFields.length; i++) {
    var ParentField = ParentFields[i];
    var mapping = {};
    mapping.parent = ParentField.getAttribute("id");
    mapping.dependent = SDK.Util.selectSingleNode(ParentField, "DependentField").getAttribute("id");
    mapping.options = [];
    var options = SDK.Util.selectNodes(ParentField, "Option");
    for (var a = 0; a < options.length; a++) {
     var option = {};
     option.value = options[a].getAttribute("value");
     option.showOptions = [];
     var optionsToShow = SDK.Util.selectNodes(options[a], "ShowOption");
     for (var b = 0; b < optionsToShow.length; b++) {
      var optionToShow = {};
      optionToShow.value = optionsToShow[b].getAttribute("value");
      optionToShow.text = optionsToShow[b].getAttribute("label");
      option.showOptions.push(optionToShow);
     }
     mapping.options.push(option);
    }
    JSConfig.push(mapping);
   }
   //Attach the configuration object to DependentOptionSet
   //so it will be available for the OnChange events
   SDK.DependentOptionSet.config = JSConfig;
   //Fire the onchange event for the mapped optionset fields
   // so that the dependent fields are filtered for the current values.
   for (var depOptionSet in SDK.DependentOptionSet.config) {
    var parent = SDK.DependentOptionSet.config[depOptionSet].parent;
    Xrm.Page.data.entity.attributes.get(parent).fireOnChange();
   }
  }
 }
};
 // This is the function set on the onchange event for
 // parent fields
SDK.DependentOptionSet.filterDependentField = function (parentField, childField) {
 for (var depOptionSet in SDK.DependentOptionSet.config) {
  var DependentOptionSet = SDK.DependentOptionSet.config[depOptionSet];
  /* Match the parameters to the correct dependent optionset mapping*/
  if ((DependentOptionSet.parent == parentField) && (DependentOptionSet.dependent == childField)) {
   /* Get references to the related fields*/
   var ParentField = Xrm.Page.data.entity.attributes.get(parentField);
   var ChildField = Xrm.Page.data.entity.attributes.get(childField);
   /* Capture the current value of the child field*/
   var CurrentChildFieldValue = ChildField.getValue();
   /* If the parent field is null the Child field can be set to null */
   if (ParentField.getValue() == null) {
    ChildField.setValue(null);
    ChildField.setSubmitMode("always");
    ChildField.fireOnChange();

    // Any attribute may have any number of controls
    // So disable each instance
    var controls = ChildField.controls.get()

    for (var ctrl in controls) {
     controls[ctrl].setDisabled(true);
    }
    return;
   }

   for (var os in DependentOptionSet.options) {
    var Options = DependentOptionSet.options[os];
    var optionsToShow = Options.showOptions;
    /* Find the Options that corresponds to the value of the parent field. */
    if (ParentField.getValue() == Options.value) {
     var controls = ChildField.controls.get();
     /*Enable the field and set the options*/
     for (var ctrl in controls) {
      controls[ctrl].setDisabled(false);
      controls[ctrl].clearOptions();

      for (var option in optionsToShow) {
       controls[ctrl].addOption(optionsToShow[option]);
      }

     }
     /*Check whether the current value is valid*/
     var bCurrentValueIsValid = false;
     var ChildFieldOptions = optionsToShow;

     for (var validOptionIndex in ChildFieldOptions) {
      var OptionDataValue = ChildFieldOptions[validOptionIndex].value;

      if (CurrentChildFieldValue == OptionDataValue) {
       bCurrentValueIsValid = true;
       break;
      }
     }
     /*
     If the value is valid, set it.
     If not, set the child field to null
     */
     if (bCurrentValueIsValid) {
      ChildField.setValue(CurrentChildFieldValue);
     }
     else {
      ChildField.setValue(null);
     }
     ChildField.setSubmitMode("always");
     ChildField.fireOnChange();
     break;
    }
   }
  }
 }
};

SDK.Util = {};
//Helper methods to merge differences between browsers for this sample
 SDK.Util.selectSingleNode = function (node, elementName) {
  if (typeof (node.selectSingleNode) != "undefined") {
   return node.selectSingleNode(elementName);
  }
  else {
   return node.getElementsByTagName(elementName)[0];
  }
 };
 SDK.Util.selectNodes = function (node, elementName) {
  if (typeof (node.selectNodes) != "undefined") {
   return node.selectNodes(elementName);
  }
  else {
   return node.getElementsByTagName(elementName);
  }
 };

// </snippetSDK.DependentOptionSet.js>

Paso 2. Configuración necesaria para que el sistema use el código en el formulario deseado


1º En el formulario de Clientes Potenciales Principal, Propiedades del formulario :

a) Sacamos en biblioteca el fichero javascript de código que hemos cargado.
b)  Creamos un control de eventos de tipo “onload” que será cuando se use el código.


Al crear el evento usamos la función “SDK.DependentOptionSet.init” y pasamos como parámetro el nombre del ficher xml se incluyen las comillas en el parámetro: "new_SectorOptionSetConfig_lead".
Aceptamos y guardamos los cambios.


Paso 3. Modificacion de propiedades de los campos “Sector”  

3.1 Sector, dentro del formulario hacemos doble click en el campo Sector y vamos a la pestaña Eventos.
No aparecerá por defecto la librería asociada al formulario por lo que solo crearemos el evento usando la función “SDK.DependentOptionSet.filterDependentField” y pasaremos como parámetros con comillas:
"new_sector","new_subsector"



en el campo subsector no hace falta identificar ningún tipo de evento

Ver otro ejemplo en:
http://msdn.microsoft.com/en-us/library/gg594433.aspx






Comentarios

Entradas populares de este blog

How to Improve Microsoft Dynamics 365 CRM Performance

How to Add a Record Wall to a Form

Dynamics CRM Quick Tip: Creating Custom Activity Feed Posts