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
Publicar un comentario