Compartir por


Exemplo: Estender Universal Resource Scheduling cunha restrición de idioma personalizada

Esta guía paso a paso acompaña a Nocións e personalización de recursos coincidentes en Universal Resource Scheduling

Nesta guía paso a paso, estenderemos recursos Universal Resource Scheduling cunha restrición de Language. Considere unha organización que quere filtrar recursos en función dos idiomas que falan. Tamén queren capturar no rexistro Requirement o idioma necesario para a tarefa. Esta restrición segue un padrón semellante á restrición de Territory incorporada. Unha nova entidade principal Language almacenará os idiomas diferentes que pode falar un recurso. Un rexistro de Resource pode asociarse a varios Languages mediante unha entidade de relación de varios a varios. Na entidade Requirement, modelaremos isto creando dous atributos de busca novos: Primary Language e Secondary Language. Ao buscar recursos dispoñibles para un requisito, só se mostrarán os recursos asociados ao Primary Language ou ao Secondary Language.

Crear as novas entdades e relacións

Nesta sección, crearemos o esquema novo para a entidade principal Language e actualizaremos as entidades Resource e Requirement coas relacións correspondente coa nova entidade Language.

Crear un publicador novo

  1. En Dynamics 365, en Personalizacións, cree un novo Publicador

  2. Encha o formulario do novo Publicador cos seguintes detalles:

    Campo Value
    Nome para mostrar Language
    Nome idioma
    Prefixo lang
  3. Prema Gardar e pechar

Crear unha solución nova

  1. En Dynamics 365, en Personalizacións, cree unha nova solución

  2. Encha o formulario da nova solución cos seguintes detalles:

    Campo Value
    Nome para mostrar Language
    Nome Language
    Publicador Language
    Versión 1.0.0.0
  3. Prema en Gardar

Crear a entidade de idioma

  1. Na solución Idioma, cree unha nova entidade

  2. Encha o formulario da nova entidade cos seguintes detalles:

    Campo Value
    Nome para mostrar Language
    Nome plural Idiomas
    Nome lang_language (O prefixo lang_ encherase automaticamente e será só de lectura)
  3. Prema en Gardar

Crear a relación de varios a varios desde a entidade de Recursos na entidade de Idioma

  1. Na entidade de Idioma, cree unha nova rellación de Varios a Varios

  2. Encha o formulario da nova relación cos seguintes detalles:

    Campo Value
    Entidade actual
    Opción de visualización Utilizar nome en plural
    Outra entidade
    Nome da entidade Recurso reservable
  3. Prema Gardar e pechar

  4. Pechar o formulario de entidade de Idioma

Crear as relacións desde a entidade de Requisito na entidade de Idioma

  1. Na solución Idioma, engada a entidade de Requisito de Recursos existente á solución (Se aparece co diálogo Faltan Compoñentes Necesarios, seleccione Non, non incluír compoñentes necesarios.)

  2. Crear un novo Campo na entidade de Requisito de Recursos

  3. Encha o formulario do novo campo cos seguintes detalles:

    Campo Value
    Nome para mostrar Idioma principal
    Tipo de datos Buscar
    Tipo de rexistro de destino Language
  4. Prema Gardar e pechar

  5. Crear un novo Campo na entidade de Requisito de Recursos

  6. Encha o formulario do novo campo cos seguintes detalles:

    Campo Value
    Nome para mostrar Idioma secundario
    Tipo de datos Buscar
    Tipo de rexistro de destino Language
  7. Prema Gardar e pechar

Actualizar o formulario principal de requisito

  1. Na entidade de requisito do recurso, engada o formulario de información aos subcompoñentes da entidade (Se aparece co diálogo Faltan Compoñentes Necesarios, seleccione Non, non incluír compoñentes necesarios.)
  2. No formulario de Información, utilice o Explorador de Campos para engadir os dous novos atributos, Idioma Principal e Idioma Secundario, ao formulario para que os usuarios poidan introducir esta información cando creen requisitos
  3. Prema en Gardar
  4. Prema Publicar
  5. Pode pechar o editor de formularios

Resumo

Nos pasos anteriores, creamos a nova entidade de Idioma. Despois, engadimos novas relacións coas entidades de Recurso e Requisito. Recursos pode estar relacionado con varios idiomas porque engadimos unha relación de varios a varios entre Idioma e Recurso. Requisitos poden estar relacionado con dous idiomas porque engadimos dous atributos de busca na entidade Requisito que apunta á nova entidade de Idioma.

Engadir datos

Utilicea Localización Avanzada para engadir novos rexistros á entidade de Idioma. Despois, poderá asociar rexistros de Recursos aos novos rexistros de Idioma abrindo un rexistro de Recursos e navegando á relación de Idioma na barra de navegación. Para os rexistros de Requisitos pode encher os novos campos de Idioma Principal e Idioma Secundario no formulario de Requisitos.

Personalizar o panel de programación

Para filtrar recursos no panel de Programación coa nova restrición de Idioma, actualizaremos os rexistros de configuración da consulta de Recuperar Recursos Consulta e Deseño do Filtro.

Configuración de deseño do filtro

Tipp

Para os pasos que se mostran a continuación, é útil utilizar un editor de texto que admite o realce da sintaxe XML para realizar modificacións e despois pegar os cambios no editor de Universal Resource Scheduling.

A configuración do Deseño do Filtro é unha definición de deseño XML para personalizar o deseño do panel de Filtro.

Hinweis

Para este exercicio, eliminaremos todos os filtros predefinidos enviados con Universal Resource Scheduling desde o panel de Filtro e engadiremos Idiomas como o único filtro dispoñible.

<control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />

O elemento control engade un control novo ao panel de Filtro. Esta é a descrición de cada atributo:

Nome Descrición
type Tipo de control de filtro. Un control combo representa unha lista despregable con valores para escoller
source Orixe de valores para o control despregable. Unha orixe entity mostra os rexistros de entidade do control despregable
key A clave utilizada para almacenar os valores seleccionados na bolsa de propiedades das restricións
inactive-state O statecode inactivo para esta entidade. Isto úsase para excluír rexistros inactivos desde o control despregable
label-id A etiqueta localizada que se utiliza para este control
entity Os rexistros desta entidade mostraranse no control despregable
multi Configura o control despregable para permitir a selección dun rexistro individual ou varios rexistros

Deseño do filtro:

<?xml version="1.0" encoding="utf-8" ?>
<filter>
  <controls>
    <control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
  </controls>
</filter>

Crear un novo panel de Idiomas

Para manter estas modificacións illadas, crearemos un panel de Programación independente novo e aplicaremos as modificacións, mais sempre pode realizar estas modificacións no panel de Programación predefinido para que outros paneis de Programación poidan herdar automaticamente estas modificacións.

  1. En Dynamics 365, na barra de navegación, vaia a Programación de recursos > Panel de programación
  2. Na parte superior dereita, prema o signo + para crear un novo panel
  3. Nome do novo Idioma do panel
  4. Na parte inferior do diálogo, prema Engadir. Crearase o panel novo.

Actualizar o deseño do filtro do panel de programación

A seguir, crearemos un novo rexistro de configuración, que almacena deseños de filtro e consultas utilizadas polo panel de Programación e despois ligaremos o panel de programación creado ao novo rexistro de configuración. Hai varias formas de facer isto, pero esta é a máis rápida:

  1. Na parte superior dereita, prema dúas veces o separador de Idioma
  2. Desprácese cara a abaixo até a Configuración Xeral > Outras Configuracións
  3. Localice o campo de Deseño de Filtro, prema no botón á dereita para abrir o editor
  4. Actualice o campo Valor co código de Deseño de Filtro enriba e prema Gardar Como.
  5. Introduza "Deseño do Filtro de idioma" no campo Nome e prema Gardar. Isto crea un novo rexistro de configuración e liga este panel de Programación ao rexistro.
  6. Na parte inferior do diálogo, prema Aplicar.

Volverase a cargar o panel e verá o panel de Filtro na esquerda co novo deseño; só o filtro de Idiomas estará dispoñible. A filtraxe aínda non funcionará xa que precisamos actualizar a consulta de Recuperar Recursos para aproveitar o filtro novo.

Configuración da consulta Recuperar recursos

Tipp

Para os pasos que se mostran a continuación, é útil utilizar un editor de texto que admite o realce da sintaxe XML para realizar modificacións e despois pegar os cambios no editor de Universal Resource Scheduling.

A configuración da Consulta Recuperar Recursos é unha Consulta UFX utilizada pola API Coincidencia de Recursos. Colle como entrada os valores introducidos no panel de Filtro e crea dinamicamente o FetchXML correcto para localizar os recursos correspondentes.

A continuación móstranse os fragmentos de contido novos engadidos á consulta de Recuperar Recursos para que coincidan e se ordenen en función dos Idiomas dos Recursos.

Engadir as asociacións de bookableresource a lang_language

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
  <attribute name="lang_languageid" alias="lang_primary" groupby="true" />

  <filter>
    <condition attribute="lang_languageid" operator="eq">
      <ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
    </condition>          
  </filter>
</link-entity>

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
  <attribute name="lang_languageid" alias="lang_secondary" groupby="true" />

  <filter>
    <condition attribute="lang_languageid" operator="eq">
      <ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
    </condition>          
  </filter>
</link-entity>

<link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">

  <filter>
    <condition attribute="lang_languageid" operator="in">
      <ufx:apply select="$input/Languages/bag[position() > 2]">
        <value>
          <ufx:value select="@ufx-id" />
        </value>
      </ufx:apply>
    </condition>            
  </filter>
</link-entity>        

<filter type="or">
  <condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
  <condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
  <condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />          
</filter>

Os valores seleccionado no panel de Filtro pásanse como entrada para a consulta e están dispoñibles no XPath $input variable

A Consulta de Recuperar recursos utiliza FetchXML para a consulta da entidade Resource (bookableresource). Estamos a utilizar o elemento de FetchXML link-entity para devolver só recursos asociados aos rexistros de Idioma seleccionados no panel de Filtro. Para que se mostren os idiomas coincidentes e ordenar por idioma principal ou secundario, que se describe máis adiante na sección Modelo de Cela de recurso, estamos a utilizar varias asociacións de link-entity.

Esta é a descrición de cada element e attribute:

Nome Descrición
link-entity Crear unha asociación á relación de varios a varios entre as entidades Recurso e Idioma
ufx:if Unicamente emita este elemento FetchXML (link-entity) se a expresión XPath neste atributo devolve un valor
attribute Devolver o idioma principal ou secundario que coincida
filter e condition Filtrar os rexistros de relacións de varios a varios só para están os que coincidan cos ID de idioma especificados
ufx:value e select Móstrase o resultado da expresión XPath no atributo select
ufx:apply e select Emita os elementos de FetchXML secundarios para cada resultado devolto da expresión XPath no atributo select
value Contén o ID dun rexistro de Idioma

Determinar ordenación dun Recurso

Despois de recuperar os recursos coincidentes, baseado nos idiomas atribuídos de cada recurso, atribuímos unha nova propiedade de lang_order para determinar a ordenación.

<bag>
  <lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
</bag>

Esta é a descrición de cada element e attribute:

Nome Descrición
lang_order Crear unha nova propiedade en cada Recurso devolto da consulta de FetchXML chamada lang_order
ufx:select Atribúa o resultado da expresión XPath neste atributo á propiedade lang_order. As propiedades lang_primary e lang_secondary, recuperadas antes na consulta, utilízanse xunto coa función iif de XPath para determinar a orde da coincidencia de recursos.

Ordenar os resultados

<Resources ufx:select="order(Resources, 'lang_order')" />

As Consultas UFX procésanse en orde secuencial. Despois de recuperar os recursos mediante FetchXML, os resultados atribúense á propiedade Resources. Estamos a ordenar os resultados segundo a propiedade lang_order engadidos antes e a volver atribuír os resultados ordenados para a propiedade Resources.

Esta é a descrición de cada element e attribute:

Nome Descripción
Resources Volver atribuír a propiedade Resources
ufx:select Atribúa o resultado da expresión XPath neste atributo á propiedade Resources. A función order de XPath úsase para ordenar a lista Resources na súa propiedade lang_order.

Hinweis

A Consulta de Recuperar recursos que se envía con Universal Resource Scheduling é unha consulta grande compatible con todas as restricións do recurso incluídas con Universal Resource Scheduling. Para este exercicio, utilizaremos só un subconxunto da consulta predefinida e engadiremos Idiomas como o único filtro.

<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
  <Resources ufx:source="fetch">
    <fetch mapping="logical" aggregate="true">
      <entity name="bookableresource">
        <attribute name="bookableresourceid" alias="bookableresourceid" groupby="true"/>
        <attribute name="name" alias="name" groupby="true"/>
        <attribute name="calendarid" alias="calendarid" groupby="true"/>
        <attribute name="resourcetype" alias="resourcetype" groupby="true"/>
        <attribute name="msdyn_startlocation" alias="startlocation" groupby="true"/>

        <!-- Language join -->
        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_primary" link-type="outer" ufx:if="$input/Languages/bag[1]">
          <attribute name="lang_languageid" alias="lang_primary" groupby="true" />
          
          <filter>
            <condition attribute="lang_languageid" operator="eq">
              <ufx:value select="$input/Languages/bag[1]/@ufx-id" attribute="value" />
            </condition>          
          </filter>
        </link-entity>

        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_secondary" link-type="outer" ufx:if="$input/Languages/bag[2]">
          <attribute name="lang_languageid" alias="lang_secondary" groupby="true" />
          
          <filter>
            <condition attribute="lang_languageid" operator="eq">
              <ufx:value select="$input/Languages/bag[2]/@ufx-id" attribute="value" />
            </condition>          
          </filter>
        </link-entity>
        
        <link-entity name="lang_lang_language_bookableresource" from="bookableresourceid" to="bookableresourceid" alias="lang_others" link-type="outer" ufx:if="$input/Languages/bag[position() > 2]">
          
          <filter>
            <condition attribute="lang_languageid" operator="in">
              <ufx:apply select="$input/Languages/bag[position() > 2]">
                <value>
                  <ufx:value select="@ufx-id" />
                </value>
              </ufx:apply>
            </condition>            
          </filter>
        </link-entity>        
        
        <filter type="or">
          <condition entityname="lang_primary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[1]" />
          <condition entityname="lang_secondary" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[2]" />
          <condition entityname="lang_others" attribute="lang_languageid" operator="not-null" ufx:if="$input/Languages/bag[position() > 2]" />          
        </filter>
        
        <link-entity name="systemuser" from="systemuserid" to="userid" link-type="outer">
          <attribute name="systemuserid" alias="systemuserid" groupby="true" />
          <attribute name="entityimage_url" alias="userimagepath" groupby="true"/>
        </link-entity>

        <link-entity name="contact" from="contactid" to="contactid" link-type="outer">
          <attribute name="contactid" alias="contactid" groupby="true"/>
          <attribute name="entityimage_url" alias="contactimagepath" groupby="true"/>
        </link-entity>
        
        <link-entity name="account" from="accountid" to="accountid" link-type="outer">
          <attribute name="accountid" alias="accountid" groupby="true"/>
          <attribute name="entityimage_url" alias="accountimagepath" groupby="true"/>
        </link-entity>
      </entity>
    </fetch>

    <bag>
      <imagepath ufx:select="accountimagepath | contactimagepath | userimagepath" />

      <accountimagepath ufx:select="$null" />
      <contactimagepath ufx:select="$null" />
      <userimagepath ufx:select="$null" />
      
      <lang_order ufx:select="iif(lang_primary and lang_secondary, 1, iif(lang_primary, 2, iif(lang_secondary, 3, 4)))" />
    </bag>
  </Resources>

  <Resources ufx:select="order(Resources, 'lang_order')" />
</bag>

Actualizar a consulta do panel de programación para recuperar recursos

  1. Na parte superior dereita, prema dúas veces o separador de Idioma
  2. Desprácese cara a abaixo até a Configuración Xeral > Outras Configuracións
  3. Localice o campo de consulta de recuperar recursos, prema no botón á dereita para abrir o editor
  4. Actualice o campo Valor co código de consulta de recuperar recursos enriba e prema Gardar Como
  5. Introduza "Consulta de recursos de idioma" no campo Nome e prema Gardar. Isto crea un novo rexistro de configuración e liga este panel de Programación ao rexistro.
  6. Na parte inferior do diálogo, prema Aplicar.

O panel cargarase de novo coa configuración actualizada. A filtraxe non funcionará. Se creou rexistros de Idioma e os asociou aos rexistros de Recursos, agora poderá filtrar recursos segundo os seus idiomas asociados.

Resumo

Nos pasos indicados arriba, modificamos o panel de Filtro para mostrar un control de filtro para a entidade de Idioma. Tamén modificamos a consulta de Recuperar Recursos para que os recursos asociados coincidan cos rexistros de Idioma seleccionados. Cando un usuario selecciona valores no control do filtro e preme Buscar, os valores pasanse á consulta e a consulta de FetchXML devolve só os recursos que coinciden.

Personalizar o asistente de programación

Temos que personalizar as configuracións Deseño de Filtro do asistente de Programación e Recuperar restricións para utilizar as novas restricións de Idioma no asistente de Programación.

A diferenza das personalizacións do panel de Programación, onde cada panel se pode personalizar individualmente, as personalizacións do Asistente de Programación afecta todos os paneis onde se usa o Asistente de programación. As personalizacións do Asistente de Programación poden ser específicas para un tipo programables ou para todos os tipos. Neste exemplo, personalizaremos o Asistente de programación para todos os tipos.

Configuración do deseño do filtro do asistente de programación

Tipp

Para os pasos que se mostran a continuación, é útil utilizar un editor de texto que admite o realce da sintaxe XML para realizar modificacións e despois pegar os cambios no editor de Universal Resource Scheduling.

A configuración do deseño do filtro do asistente de Programación, como deseño do filtro do panel de Programación, define o deseño dos controis no panel de Filtro. Como o asistente de Programación utiliza máis filtros que o panel de Programación, como Hora de Inicio, Hora de Fin, Duración, etc., utilízase un deseño diferente.

Hinweis

Para este exercicio, reutilizaremos só un subconxunto dos filtros predefinidos enviados en Universal Resource Scheduling desde a configuración do deseño do filtro do asistente de Programación e engadiremos a lista despregable de Idiomas como o único filtro dispoñible.

O filtro que estamos a engadir ao deseño é o mesmo que antes en Configuración do Deseño do Filtro. Os outros controis son necesarios para modificar os parámetros de busca do Asistente de Programación.

O deseño do filtro do asistente de programación completo

<?xml version="1.0" encoding="utf-8" ?>
<filter>
  <controls>
    <control type="twocolumn">
      <control type="combo" source="optionset" key="Requirement/msdyn_worklocation" label-id="ScheduleAssistant.West.settingsform.WorkLocation" entity="msdyn_resourcerequirement" attribute="msdyn_worklocation">
        <bind property="disabled" to="Requirement/InitialWorkLocation" operator="eq" value="690970002" />
        <data>
          <value id="690970000" />
          <value id="690970001" />
          <value id="690970002" />
        </data>
      </control>
      <control type="duration" key="Requirement/msdyn_remainingduration" label-id="ScheduleAssistant.West.settingsform.AvailableDuration" />
    </control>
    <control type="distance" key="Requirement/Radius" label-id="ScheduleAssistant.West.settingsform.Radius" min="1">
      <bind property="disabled" to="Requirement/msdyn_worklocation" operator="eq" value="690970002" />
    </control>
    <control type="datetime" key="Requirement/msdyn_fromdate" label-id="ScheduleAssistant.West.settingsform.StartDay">
      <bind property="disabled" to="Requirement/RealTimeMode" operator="eq" value="true" />
      <bind property="max" to="Requirement/msdyn_todate" operator="eq" />
    </control>
    <control type="datetime" key="Requirement/msdyn_todate" label-id="ScheduleAssistant.West.settingsform.EndDay">
      <bind property="min" to="Requirement/msdyn_fromdate" operator="eq" />
    </control>
    <control type="combo" source="entity" key="Languages" inactive-state="1" label-id="Languages" entity="lang_language" multi="true" />
  </controls>
</filter>

Actualizar o deseño do filtro do asistente de programación

  1. Na parte superior dereita, prema dúas veces o separador de Idioma
  2. Na parte superior dereita, prema Abrir configuración predefinida
  3. Desprácese até a sección Tipos de Programación e seleccione Ningún na lista da esquerda
  4. Localice o campo de Deseño de Filtro do asistente de programación, prema no botón á dereita para abrir o editor
  5. Actualice o campo Valor co código de Deseño do filtro do asistente de programación enriba e prema Gardar Como
  6. Introduza "Deseño do Filtro do asistente de programación" no campo Nome e prema Gardar. Isto crea un novo rexistro de configuración e liga este panel de Programación ao rexistro.
  7. Na parte inferior do diálogo, prema Aplicar.

O panel cargarase de novo A seguir, temos que cambiar a Consulta de Recuperar restricións antes de poder utilizar a o Asistente de programación coas novas restricións de Idioma, de forma que os Idiomas definidos no Requisito forman parte da busca do Asistente de Programación.

Configuración da consulta Recuperar restricións

Tipp

Para os pasos que se mostran a continuación, é útil utilizar un editor de texto que admite o realce da sintaxe XML para realizar modificacións e despois pegar os cambios no editor de Universal Resource Scheduling.

A configuración da Consulta Recuperar restricións é unha Consulta UFX utilizada pola API Recuperar restricións do requisito. Colle como entrada o ID dun rexistro de Requisito (seleccionado na IU) e devolve o rexistro de Requisito e todos os rexistros secundarios.

Hinweis

A Consulta de Recuperar restricións que se envía con Universal Resource Scheduling é unha consulta grande compatible con todas as restricións do requisito incluídas con Universal Resource Scheduling. Para este exercicio, utilizaremos só un subconxunto da consulta predefinida e engadiremos Idiomas como o único filtro.

<Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />

As Consultas UFX procésanse en orde secuencial. A Consulta de Recuperar restricións utiliza FetchXML para a consulta da entidade Requirement (msdyn_resourcerequirement) e atribúe o resultado, un rexistro de Requisito, á propiedade Requirement. Estamos a engadir á bolsa de propiedades de restricións unha propiedade nova Languages que combina ambos atributos, Idioma Principal e Idioma Secundario, nunha única lista de entidades (EntityCollection). Isto é necesario porque estamos a mostrar o control de Idiomas no panel de Filtro como unha lista de rexistros. Tamén se poden crear dous controis independentes no panel de Filtro para os dous atributos.

Esta é a descrición de cada element e attribute:

Nome Descrición
Languages Crear unha nova propiedade na bosa de propiedades das restricións chamada Languages
ufx:select Atribúa o resultado da expresión XPath neste atributo á propiedade Languages. As propiedades lang_primarylanguage e lang_secondarylanguage, recuperadas antes na consulta e dispoñibles na propiedade Requirement, pásase á función lookup-to-list de XPath, que converte varias propiedades de lookup nunha única list (EntityCollection)

Recuperar consulta de restricións:

<?xml version="1.0" encoding="utf-8" ?>
<bag xmlns:ufx="https://schemas.microsoft.com/dynamics/2017/universalfetchxml">
  <Requirement ufx:source="fetch" ufx:select="bag[1]">
    <fetch top="1">
      <entity name="msdyn_resourcerequirement">
        <all-attributes />
        
        <filter>
          <condition attribute="statecode" operator="eq" value="0" />
          <condition attribute="msdyn_resourcerequirementid" operator="eq">
            <ufx:value select="$input/@ufx-id" attribute="value" />
          </condition>
        </filter>
      </entity>
    </fetch>

    <bag>
      <InitialWorkLocation ufx:select="msdyn_worklocation" />
    </bag>
  </Requirement>
  
  <Languages ufx:select="lookup-to-list(Requirement/lang_primarylanguage, Requirement/lang_secondarylanguage)" />
</bag>

Actualizar a consulta Recuperar restricións

  1. Na parte superior dereita, prema dúas veces o separador de Idioma
  2. Na parte superior dereita, prema Abrir configuración predefinida
  3. Desprácese até a sección Tipos de Programación e seleccione Ningún na lista da esquerda
  4. Localice o campo de consulta de recuperar restricións do asistente de programación, prema no botón á dereita para abrir o editor
  5. Actualice o campo Valor co código de consulta de recuperar recursos enriba e prema Gardar Como
  6. Introduza "Consulta de restricións de idioma" no campo Nome e prema Gardar. Isto crea un novo rexistro de configuración e liga este panel de Programación ao rexistro.
  7. Localice o campo de consulta de resuperar recursos do asistente de Programación e seleccione a Consulta de Recursos de Idiomas que creamos antes para as Personalizacións do panel de Programación
  8. Na parte inferior do diálogo, prema Aplicar.

O panel cargarase de novo coa configuración actualizada. A filtraxe do asistente de programación funcionará agora. Se creou rexistros de Idioma e os asociou aos rexistros de Requisitos, agora poderá seleccionar un rexistro de Requisito na parte inferior do panel de Programación, premer Buscar Dispoñibilidade para iniciar o Asistente de programación e ver só os recursos que coinciden cos idiomas gardados no requisito.

Configuracióndo modelo de cela do recurso

Tipp

Para os pasos que se mostran a continuación, é útil utilizar un editor de texto que admite o realce da sintaxe HTML para realizar modificacións e despois pegar os cambios no editor de Universal Resource Scheduling.

A configuración do Modelo de Cela do recurso é un modelo Barra de agarradoira usado para procesar o contido na cela do recurso. O resultado da consulta Recuperar Recursos está dispoñible para o modelo.

Estamos a modificar o modelo de recurso predefinido para mostrar un indicador ✔✱ verde se o recurso concide cos idiomas principal e secundario, un indicador ✔ verde se o recurso coincide só co idioma primario e un indicador ✔ amarelo se o recurso coincide só co idioma secundario.

{{#if lang_primary}}
<span style='color:green;'>&#10004;{{#if lang_secondary}} &#10033;{{/if}}</span>
{{else if lang_secondary}}
<span style='color:#ffe700;'>&#10004;</span>
{{/if}} 

As propiedades lang_primary e lang_secondary devólvense desde a Consulta Recuperar recursos personalizada que configuramos antes. Consulte o sitio web Barras de agarradoira para ver a documentación sobre a sintaxe dos modelos.

Modelo de cela do recurso:

<div class='resource-card-wrapper {{iif ResourceCellSelected "resource-cell-selected" ""}} {{iif ResourceUnavailable "resource-unavailable" ""}} {{iif IsMatchingAvailability "availability-match" ""}}'>
  {{#if imagepath}}
  <img class='resource-image' src='{{client-url}}{{imagepath}}' />
  {{else}}
  <div class='resource-image unknown-resource'></div>
  {{/if}}
  <div class='resource-info'>
    <div class='resource-name primary-text ellipsis' title='{{name}}'>{{name}}</div>
    <div class='secondary-text ellipsis'>
      {{#if (eq (is-sa-grid-view) false) }}
      <div class='booked-duration'>{{BookedDuration}}</div>
      <div class='booked-percentage'>
        {{BookedPercentage}}%
        
        {{#if lang_primary}}
        <span style='color:green;'>&#10004;{{#if lang_secondary}} &#10033;{{/if}}</span>
        {{else if lang_secondary}}
        <span style='color:#ffe700;'>&#10004;</span>
        {{/if}}            
      </div>
      {{/if}}
    </div>
    {{#if (eq (is-sa-grid-view) false) }}
    <div class='matching-indicator'></div>
    {{/if}}
  </div>
  {{#if (eq (is-sa-grid-view) false) }}
  {{> resource-map-pin-template this }}
  {{/if}}
</div>

Actualizar o modelo de cela do recurso

  1. Na parte superior dereita, prema dúas veces o separador de Idioma
  2. Na parte superior dereita, prema Abrir configuración predefinida
  3. Desprácese até a sección Tipos de Programación e seleccione Ningún na lista da esquerda
  4. Localice o campo do modelo de cela do recurso do asistente de programación, prema no botón á dereita para abrir o editor
  5. Actualice o campo Valor co código do modelo de cela do recurso enriba e prema Gardar Como
  6. Introduza "modelo de cela do recurso de idioma" no campo Nome e prema Gardar. Isto crea un novo rexistro de configuración e liga este panel de Programación ao rexistro.
  7. Na parte inferior do diálogo, prema Aplicar.

O panel cargarase de novo coa configuración actualizada. A cela do recurso agora indicará como un recurso coincide coa restrición de idioma no panel de Filtro.

Resumo

Nos pasos indicados arriba, modificamos o panel de Filtro no asistente de programación para mostrar un control de filtro para a entidade de Idioma. Tamén cambiamos a consulta de Recuperar Restricións para consultar os novos atributos de Idioma relacionados coa entidade Requisito e creamos unha lista. Cando un usuario selecciona localizar a dispoñibilidade dun rexistro de Requisito, o panel de Filtro mostrará as restricións do Idioma capturado. Os valores do panel de Filtro pásanse á consulta Recuperar Recursos e a consulta FetchXML devolve só os recursos que coinciden.

Consulte tamén

Universal Fetch XML

Notas da versión de extensibilidade de Universal Resource Scheduling

Hinweis

Pode indicarnos as súas preferencias para o idioma da documentación? Realice unha enquisa breve. (teña en conta que esa enquisa está en inglés)

Esta enquisa durará sete minutos aproximadamente. Non se recompilarán datos persoais (declaración de privacidade).