Aracılığıyla paylaş


Örnek: Universal Resource Scheduling'i özel dil kısıtlamasıyla genişletme

Bu adım adım kılavuz, Universal Resource Scheduling'de kaynak eşleştirmeyi anlama ve özelleştirme için bir tamamlayıcıdır

Bu adım adım kılavuzda bir Language kısıtlaması ile Universal Resource Scheduling kaynaklarını genişleteceğiz. Konuştukları dile göre kaynakları filtrelemek isteyen bir kuruluşu düşünün. İş için gerekli dili Requirement kaydında da yakalamak istiyorlar. Bu kısıtlama, yerleşik Territory kısıtlamasına benzer bir düzen izler. Yeni bir Language ana varlığı, bir kaynağın konuşabildiği farklı dilleri saklar. Resource kaydı, bir çok-çok ilişkisi varlığı üzerinden birçok Languages ile ilişkilendirilebilir. Requirement varlığında bunu bu iki yeni arama özniteliğini oluşturarak modelleyeceğiz: Primary Language ve Secondary Language. Gereksinim için kullanılabilir kaynakları bulurken yalnızca Primary Language veya Secondary Language ile ilişkili kaynaklar gösterilir.

Yeni varlıklar ve ilişkiler oluşturma

Bu bölümde, Language ana varlığı için yeni şema oluşturacağız ve karşılık gelen ilişkiye sahip Resource ve Requirement varlıklarını yeni Language varlığıyla güncelleştireceğiz.

Yeni bir Yayımcı oluşturma

  1. Dynamics 365'te, Özelleştirmeler altında yeni bir Yayımcı oluşturma

  2. Yeni Yayımcı formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Görünen Ad Language
    Ad dil
    Önek dil
  3. Kaydet ve Kapat'a tıklayın

Yeni bir Çözüm oluşturma

  1. Dynamics 365'te, Özelleştirmeler altında yeni bir Çözüm oluşturma

  2. Yeni Çözüm formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Görünen Ad Language
    Ad Language
    Yayımcı Language
    Sürüm 1.0.0.0
  3. Kaydet'e tıklayın

Dil varlığı oluşturma

  1. Dil çözümünde yeni bir Varlık oluşturun

  2. Yeni Varlık formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Görünen Ad Language
    Çoğul Ad Diller
    Adı lang_language (lang_ ön eki otomatik olarak doldurulur ve salt okunurdur)
  3. Kaydet'e tıklayın

Kaynak varlığından Dil varlığına çok-çok ilişkisi oluşturma

  1. Dil varlığında yeni bir Çok-Çok İlişkisi oluşturun

  2. Yeni İlişki formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Geçerli Varlık
    Seçeneği Görüntüle Çoğul Adı Kullan
    Diğer Varlık
    Varlık Adı Ayrılabilir Kaynak
  3. Kaydet ve Kapat'a tıklayın

  4. Dil varlığı formunu kapatın

Gereksinim varlığından Dil varlığına ilişkiler oluşturma

  1. Dil çözümünde, var olan Kaynak Gereksinimi varlığını çözüme ekleyin (Gerekli Bileşenler Eksik iletişim kutusu gösterilirse Hayır'ı seçin, gerekli bileşenleri eklemeyin.)

  2. Kaynak Gereksinimi varlığında yeni bir Alan oluşturun

  3. Yeni Alan formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Görünen Ad Birincil Dil
    Veri Türü Ara
    Hedef Kayıt Türü Language
  4. Kaydet ve Kapat'a tıklayın

  5. Kaynak Gereksinimi varlığında yeni bir Alan oluşturun

  6. Yeni Alan formunu aşağıdaki ayrıntılarla doldurun:

    Alan Value
    Görünen Ad İkincil Dil
    Veri Türü Ara
    Hedef Kayıt Türü Language
  7. Kaydet ve Kapat'a tıklayın

Gereksinim ana formunu güncelleştirme

  1. Kaynak Gereksinimi varlığında, var olan Bilgi formunu varlığın alt bileşenlerine ekleyin (Gerekli Bileşenler Eksik iletişim kutusu gösterilirse Hayır'ı seçin, gerekli bileşenleri eklemeyin.)
  2. Bilgi formunda, kullanıcıların gereksinimleri oluştururken bu bilgileri girebilmesi için iki yeni öznitelik olan Birincil Dil ve İkincil Dil'i eklemek üzere Alan Gezgini'ni kullanın
  3. Kaydet'e tıklayın
  4. Yayımla'ya tıklayın
  5. Form düzenleyicisini kapatabilirsiniz

Özet

Yukarıdaki adımlarda, yeni Dil varlığı oluşturduk. Daha sonra Kaynak ve Gereksinim varlıklarına sahip yeni ilişkiler ekledik. Dil ve Kaynak arasına bir çok-çok ilişkisi eklediğimizden kaynaklar birden fazla dil ile ilişkilendirilebilir. Gereksinim varlığına yeni Dil varlığını işaret eden iki arama özniteliği eklediğimizden gereksinimler, iki Dil ile ilişkilendirilebilir.

Veri ekleme

Dil varlığına yeni kayıtlar eklemek için Gelişmiş Bul'u kullanın. Daha sonra bir Kaynak kaydı açarak ve gezinti çubuğunda Dil ilişkisine giderek Kaynak kayıtlarını yeni Dil kayıtları ile ilişkilendirebilirsiniz. Gereksinim kayıtları için Gereksinim formunda yeni Birincil Dil ve İkincil Dil alanlarını doldurabilirsiniz.

Zamanlama Panosu'nu özelleştirme

Zamanlama Panosu'nda kaynakları yeni Dil kısıtlamasıyla filtrelemek için Kaynakları Al Sorgusu ile Filtre Düzeni yapılandırma kayıtlarını güncelleştireceğiz.

Filtre Düzeni Yapılandırması

Bahşiş

Aşağıdaki adımlar için değişikliklerinizi yapmak üzere XML söz dizimi vurgulamasını destekleyen bir metin düzenleyicisi kullanmak ve ardından değişikliklerinizi Universal Resource Scheduling düzenleyicisine geri yapıştırmak yararlıdır.

Filtre Düzeni yapılandırması, Filtre paneli düzenini özelleştirmek için bir XML düzen tanımıdır.

Not

Bu alıştırmada, Filtre panelinden Universal Resource Scheduling ile gelen tüm varsayılan filtreleri kaldıracağız ve kullanılabilir tek filtre olarak Diller'i ekleyeceğiz.

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

control öğesi, Filtre paneline yeni bir denetim ekler. Her özniteliğin açıklaması burada verilmiştir:

Ad Açıklama
type Filtre denetiminin türü. combo denetimi, seçim yapabileceğiniz değerlerin bulunduğu bir açılan menüyü işler
source Açılan menü denetimi için değerlerin kaynağı. entity kaynağı, açılan menüdeki varlık kayıtlarını gösterir
key Seçili değerleri kısıtlamalar özellik paketinde depolamak için kullanılan anahtar
inactive-state Bu varlık için etkin olmayan statecode. Bu, etkin olmayan kayıtları açılan menünün dışında tutmak için kullanılır
label-id Bu denetim için kullanılacak yerelleştirilmiş etiket
entity Bu varlığın kayıtları, açılan menüde gösterilir
multi Açılan menüyü tek bir kaydı veya birden çok kaydı seçmeye izin verecek şekilde yapılandırır

Filtre Düzeni:

<?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>

Yeni bir Diller panosu oluşturma

Bu değişiklikleri yalıtılmış tutmak için tamamen yeni ve ayrı bir Zamanlama Panosu oluşturacak ve değişiklikleri uygulayacağız ancak diğer Zamanlama Panolarının değişiklikleri otomatik olarak devralabilmesi için her zaman varsayılan Zamanlama Panosu'nda bu değişiklikleri yapabilirsiniz.

  1. Dynamics 365'te, üst gezinti çubuğunda Kaynak Zamanlaması > Zamanlama Panosu'na gidin
  2. Yeni bir pano oluşturmak için sağ üstteki + işaretine tıklayın
  3. Yeni pano Dilini adlandırın
  4. İletişim kutusunun alt kısmında Ekle'ye tıklayın. Yeni pano oluşturulur.

Zamanlama Panosu Filtre Düzeni'ni güncelleştirme

Daha sonra, Zamanlama Panosu tarafından kullanılan filtre düzenlerini ve sorgularını depolayan yeni bir yapılandırma kaydı oluşturacağız ve yeni oluşturulan Zamanlama Panosu'nu yeni yapılandırma kaydına bağlayacağız. Bunu yapmanın birden çok yolu vardır ancak bunlardan en hızlısı şudur:

  1. Sağ üstte, Dil sekmesine çift tıklayın
  2. Genel Ayarlar > Diğer Ayarlar'a kadar aşağı kaydırın
  3. Filtre Düzeni alanını bulun, düzenleyiciyi açmak için sağdaki düğmeye tıklayın
  4. Değer alanını yukarıdaki Filtre Düzeni koduyla güncelleştirin ve Farklı Kaydet'e tıklayın.
  5. Ad alanına "Dil Filtre Düzeni" girin ve Kaydet'e tıklayın. Bu, yeni bir yapılandırma kaydı oluşturur ve bu Zamanlama Panosu'nu kayda bağlar.
  6. İletişim kutusunun alt kısmında Uygula'ya tıklayın.

Pano yeniden yüklenir ve yeni düzen ile birlikte solda Filtre panelini görürsünüz. Yalnızca Diller filtresi kullanılabilir. Yeni filtrenin özelliklerinden yararlanmak için Kaynakları Al Sorgusu'nu güncelleştirmemiz gerektiğinden filtreleme henüz çalışmaz.

Kaynakları Al Sorgusu Yapılandırması

Bahşiş

Aşağıdaki adımlar için değişikliklerinizi yapmak üzere XML söz dizimi vurgulamasını destekleyen bir metin düzenleyicisi kullanmak ve ardından değişikliklerinizi Universal Resource Scheduling düzenleyicisine geri yapıştırmak yararlıdır.

Kaynakları Al Sorgusu yapılandırması, Kaynak Eşleştirme API'si tarafından kullanılan bir UFX Sorgusudur. Filtre paneline girilen değerleri giriş olarak alır ve eşleşen kaynaklar bulmak için doğru FetchXML'i dinamik olarak oluşturur.

Aşağıda Kaynakların Dillerine göre eşleştirmek ve sıralamak için Kaynakları Al Sorgusu'na eklenen yeni kod parçacıkları gösterilmektedir.

Katılımları bookableresource'tan lang_language'e ekleme

<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>

Filtre panelinde seçilen değerler, giriş olarak sorguya aktarılır ve XPath $input değişkeninde kullanılabilir

Kaynakları Al Sorgusu, Resource (bookableresource) varlığını sorgulamak için FetchXML'i kullanır. FetchXML link-entity öğesini yalnızca Filtre panelinde seçilen Dil kayıtlarıyla ilişkili kaynakları geri döndürmek için kullanıyoruz. Kaynak Hücre Şablonu bölümünde daha sonra açıklandığı gibi, eşleşen dilleri göstermeyi ve birincil veya ikincil dile göre sıralamayı desteklemek için birden fazla link-entity katılımı kullanıyoruz.

element ve attribute açıklamaları burada verilmiştir:

Ad Açıklama
link-entity Kaynak ve Dil varlıkları arasındaki çok-çok ilişkisi için bir katılım oluşturma
ufx:if Bu öznitelikteki XPath ifadesi bir değer geri döndürürse yalnızca bu FetchXML öğesini (link-entity) gönderir
attribute Eşleşen birincil veya ikincil dili döndürür
filter ve condition Çok-çok ilişkisi kayıtlarını yalnızca belirli Dil kimlikleriyle eşleşenler için filtreler
ufx:value ve select select özniteliğindeki XPath ifadesinin sonucunu gönderir
ufx:apply ve select select özniteliğindeki XPath ifadesinden döndürülen her sonuç için alt FetchXML öğelerini gönderir
value Dil kaydının kimliğini içerir

Kaynağın sıralama düzenini belirleme

Her kaynağa atanan dillere göre eşleşen kaynakları aldıktan sonra sıralama düzenini belirlemek için yeni bir lang_order özelliği atarız.

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

element ve attribute açıklamaları burada verilmiştir:

Ad Açıklama
lang_order lang_order adlı FetchXML sorgusundan döndürülen her Kaynak'ta yeni bir özellik oluşturma
ufx:select Bu öznitelikteki XPath ifadesinin sonucunu lang_order özelliğine atar. Sorguda daha önce alınan lang_primary ve lang_secondary özellikleri, kaynak eşleştirme sırasını belirlemek için XPath iif işleviyle birlikte kullanılır.

Sonuçları sıralama

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

UFX Sorguları, sıralı düzende işlenir. Kaynaklar FetchXML üzerinden alındıktan sonra sonuçlar, Resources özelliğine atanır. Sonuçları daha önce eklenen lang_order özelliğine göre sıralarız ve sıralanan sonuçları Resources özelliğine yeniden atarız.

element ve attribute açıklamaları burada verilmiştir:

Adı Açıklama
Resources Resources özelliğini yeniden atama
ufx:select Bu öznitelikteki XPath ifadesinin sonucunu Resources özelliğine atar. XPath order işlevi, lang_order özelliğinde Resources listesini sıralamak için kullanılır.

Not

Universal Resource Scheduling ile birlikte sağlanan varsayılan Kaynakları Al Sorgusu, Universal Resource Scheduling'e eklenmiş tüm kaynak kısıtlamalarını destekleyen büyük bir sorgudur. Bu alıştırmada, varsayılan sorgunun yalnızca bir alt kümesini kullanacağız ve tek filtre olarak Dilleri ekleyeceğiz.

<?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>

Zamanlama Panosu Kaynakları Al Sorgusu'nu güncelleştirme

  1. Sağ üstte, Dil sekmesine çift tıklayın
  2. Genel Ayarlar > Diğer Ayarlar'a kadar aşağı kaydırın
  3. Kaynakları Al Sorgusu alanını bulun, düzenleyiciyi açmak için sağdaki düğmeye tıklayın
  4. Değer alanını yukarıdaki Kaynakları Al Sorgusu koduyla güncelleştirin ve Farklı Kaydet'e tıklayın
  5. Ad alanına "Dil Kaynakları Sorgusu" girin ve Kaydet'e tıklayın. Bu, yeni bir yapılandırma kaydı oluşturur ve bu Zamanlama Panosu'nu kayda bağlar.
  6. İletişim kutusunun alt kısmında Uygula'ya tıklayın.

Pano, güncelleştirilmiş yapılandırılmayla yeniden yüklenir. Filtreleme artık çalışmaz. Dil kayıtları oluşturup Kaynak kayıtlarıyla ilişkilendirdiyseniz kaynakları artık ilişkili dillere göre filtreleyebilirsiniz.

Özet

Yukarıdaki adımlarda Filtre panelini Dil varlığı için bir filtre denetimi gösterecek şekilde değiştirdik. Ayrıca Kaynakları Al Sorgusu'nu da seçili Dil kayıtlarıyla ilişkili kaynakları eşleştirecek şekilde değiştirdik. Kullanıcı, filtre denetiminde değerler seçip Ara'ya tıkladığında değerler sorguya aktarılır ve FetchXML sorgusu yalnızca eşleşen kaynakları geri döndürür.

Zamanlama Yardımcısı'nı özelleştirme

Zamanlama Yardımcısı'nda yeni Dil kısıtlamalarını kullanmak için Zamanlama Yardımcısı Filtre Düzeni'ni ve Kısıtlamaları Al Sorgusu yapılandırmalarını özelleştirmemiz gerekir.

Her panonun tek tek özelleştirilebildiği Zamanlama Panosu özelleştirmelerinden farklı olarak Zamanlama Yardımcısı özelleştirmeleri Zamanlama Yardımcısı'nın kullanıldığı tüm panoları etkiler. Zamanlama Yardımcısı özelleştirmeleri, zamanlanabilir bir tür veya tüm türler için özel olabilir. Bu örnekte, Zamanlama Yardımcısı'nı tüm türler için özelleştireceğiz.

Zamanlama Yardımcısı Filtre Düzeni Yapılandırması

Bahşiş

Aşağıdaki adımlar için değişikliklerinizi yapmak üzere XML söz dizimi vurgulamasını destekleyen bir metin düzenleyicisi kullanmak ve ardından değişikliklerinizi Universal Resource Scheduling düzenleyicisine geri yapıştırmak yararlıdır.

Zamanlama Yardımcısı Filtre Düzeni yapılandırması, Zamanlama Panosu Filtre Düzeni gibi Filtre panelindeki denetimlerin düzenini tanımlar. Zamanlama Yardımcısı, Başlangıç Saati, Bitiş Saati, Süre vb. gibi Zamanlama Panosu'ndan daha fazla filtre kullandığından burada farklı bir düzen kullanılır.

Not

Bu alıştırmada yalnızca Universal Resource Scheduling'de Zamanlama Yardımcısı Filtre Düzeni yapılandırmasıyla birlikte sağlanan varsayılan filtrelerin bir alt kümesini yeniden kullanacağız ve kullanılabilir tek filtre olarak Diller açılan menüsünü ekleyeceğiz.

Düzene eklediğimiz filtre, yukarıdaki Filtre Düzeni Yapılandırması bölümündekiyle aynıdır. Diğer denetimler, Zamanlama Yardımcısı arama parametrelerini değiştirmek için gereklidir.

Tüm Zamanlama Yardımcısı Filtre Düzeni

<?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>

Zamanlama Yardımcısı Filtre Düzeni'ni güncelleştirme

  1. Sağ üstte, Dil sekmesine çift tıklayın
  2. Sağ üstte Varsayılan Ayarları Aç'a tıklayın
  3. Zamanlama Türleri bölümüne gidin ve soldaki listede Yok seçeneğini belirleyin
  4. Zamanlama Yardımcısı Filtre Düzeni alanını bulun, düzenleyiciyi açmak için sağdaki düğmeye tıklayın
  5. Değer alanını yukarıdaki Zamanlama Yardımcısı Filtre Düzeni koduyla güncelleştirin ve Farklı Kaydet'e tıklayın
  6. Ad alanına "Dil Zamanlama Yardımcısı Filtre Düzeni" girin ve Kaydet'e tıklayın. Bu, yeni bir yapılandırma kaydı oluşturur ve bu Zamanlama Panosu'nu kayda bağlar.
  7. İletişim kutusunun alt kısmında Uygula'ya tıklayın.

Pano yeniden yüklenir. Daha sonra, Gereksinim'de ayarlanan Diller, Zamanlama Yardımcısı aramasının parçası olacak şekilde Zamanlama Yardımcısı'nı yeni Diller kısıtlamalarımızla kullanabilmemiz için Kısıtlamaları Al Sorgusu'nu değiştirmemiz gerekir.

Kısıtlamaları Al Sorgusu Yapılandırması

Bahşiş

Aşağıdaki adımlar için değişikliklerinizi yapmak üzere XML söz dizimi vurgulamasını destekleyen bir metin düzenleyicisi kullanmak ve ardından değişikliklerinizi Universal Resource Scheduling düzenleyicisine geri yapıştırmak yararlıdır.

Kısıtlamaları Al Sorgusu yapılandırması, Gereksinim Kısıtlamalarını Al API'si tarafından kullanılan bir UFX Sorgusudur. Bu yapılandırma, (kullanıcı arabiriminde seçili) bir Gereksinim kaydının kimliğini giriş olarak alır ve Gereksinim kaydını ve tüm alt kayıtlarını geri döndürür.

Not

Universal Resource Scheduling ile birlikte sağlanan varsayılan Kısıtlamaları Al Sorgusu, Universal Resource Scheduling'e eklenmiş tüm gereksinim kısıtlamalarını destekleyen büyük bir sorgudur. Bu alıştırmada, varsayılan sorgunun yalnızca bir alt kümesini kullanacağız ve tek filtre olarak Dilleri ekleyeceğiz.

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

UFX Sorguları, sıralı düzende işlenir. Kısıtlamaları Al Sorgusu, Requirement (msdyn_resourcerequirement) varlığını sorgulamak ve sonucu olan Gereksinim kaydını Requirement özelliğine atamak için FetchXML'i kullanır. Kısıtlamalar özellik paketine Birincil Dil ve İkincil Dil özniteliklerini varlıkların tek bir listesinde (EntityCollection) birleştiren yeni bir Languages özelliği ekliyoruz. Diller denetimini Filtre panelinde kayıtların bir listesi olarak gösterdiğimiz için bu gereklidir. İki öznitelik için Filtre panelinde iki ayrı denetim oluşturmak alternatif bir yol olabilir.

element ve attribute açıklamaları burada verilmiştir:

Ad Açıklama
Languages Languages adı verilen sonuç kısıtlamaları özellik paketinde yeni bir özellik oluşturma
ufx:select Bu öznitelikteki XPath ifadesinin sonucunu Languages özelliğine atar. Daha önce sorguda alınan ve Requirement özelliğinde kullanılabilen lang_primarylanguage ve lang_secondarylanguage özellikleri, birden çok lookup özelliğini tek bir list (EntityCollection) özelliğine dönüştüren lookup-to-list XPath işlevine aktarılır

Kısıtlamaları Al Sorgusu:

<?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>

Kısıtlamaları Al Sorgusu'nu güncelleştirme

  1. Sağ üstte, Dil sekmesine çift tıklayın
  2. Sağ üstte Varsayılan Ayarları Aç'a tıklayın
  3. Zamanlama Türleri bölümüne gidin ve soldaki listede Yok seçeneğini belirleyin
  4. Zamanlama Yardımcısı Kısıtlamaları Al Sorgusu alanını bulun, düzenleyiciyi açmak için sağdaki düğmeye tıklayın
  5. Değer alanını yukarıdaki Kaynakları Al Sorgusu koduyla güncelleştirin ve Farklı Kaydet'e tıklayın
  6. Ad alanına "Dil Kısıtlamaları Sorgusu" girin ve Kaydet'e tıklayın. Bu, yeni bir yapılandırma kaydı oluşturur ve bu Zamanlama Panosu'nu kayda bağlar.
  7. Zamanlama Yardımcısı Kaynakları Al Sorgusu alanını bulun ve daha önce Zamanlama Panosu Özelleştirmeleri'nde oluşturduğumuz Diller Kaynaklar Sorgusu'nu seçin
  8. İletişim kutusunun alt kısmında Uygula'ya tıklayın.

Pano, güncelleştirilmiş yapılandırılmayla yeniden yüklenir. Zamanlama Yardımcısı filtrelemesi artık çalışacaktır. Dil kayıtları oluşturduysanız ve bunları Gereksinim kayıtlarıyla ilişkilendirdiyseniz artık Zamanlama Panosu'nun alt kısmında bir Gereksinim kaydı seçebilir, Zamanlama Yardımcısı'nı başlatmak için Kullanılabilirliği Bul'a tıklayabilir ve yalnızca gereksinimde kaydedilmiş dillerle eşleşen kaynakları görebilirsiniz.

Kaynak Hücre Şablonu Yapılandırması

Bahşiş

Aşağıdaki adımlar için değişikliklerinizi yapmak üzere HTML söz dizimi vurgulamasını destekleyen bir metin düzenleyicisi kullanmak ve ardından değişikliklerinizi Universal Resource Scheduling düzenleyicisine geri yapıştırmak yararlıdır.

Kaynak Hücre Şablonu yapılandırması, kaynak hücredeki içeriği işlemek için kullanılan bir Handlebars şablonudur. Kaynakları Al Sorgusu'ndan gelen çıktı, şablon için kullanılabilir.

Varsayılan kaynak şablonunu kaynak, birincil ve ikincil dillerle eşleşirse yeşil ✔✱ göstergesini, yalnızca birincil dil ile eşleşirse yeşil ✔ göstergesini ve yalnızca ikincil dil ile eşleşirse sarı ✔ göstergesini gösterecek şekilde değiştiriyoruz.

{{#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}} 

lang_primary ve lang_secondary özellikleri, yukarıda ayarladığımız özel Kaynakları Al Sorgumuzdan geri döndürülür. Şablon oluşturma sözdizimi belgeleri için Handlebars web sitesine başvurun.

Kaynak Hücre Şablonu:

<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>

Kaynak Hücre Şablonu'nu güncelleştirme

  1. Sağ üstte, Dil sekmesine çift tıklayın
  2. Sağ üstte Varsayılan Ayarları Aç'a tıklayın
  3. Zamanlama Türleri bölümüne gidin ve soldaki listede Yok seçeneğini belirleyin
  4. Zamanlama Yardımcısı Kaynak Hücre Şablonu alanını bulun, düzenleyiciyi açmak için sağdaki düğmeye tıklayın
  5. Değer alanını yukarıdaki Kaynak Hücre Şablonu koduyla güncelleştirin ve Farklı Kaydet'e tıklayın
  6. Ad alanına "Dil Kaynak Hücre Şablonu" girin ve Kaydet'e tıklayın. Bu, yeni bir yapılandırma kaydı oluşturur ve bu Zamanlama Panosu'nu kayda bağlar.
  7. İletişim kutusunun alt kısmında Uygula'ya tıklayın.

Pano, güncelleştirilmiş yapılandırılmayla yeniden yüklenir. Kaynak hücresi artık bir kaynağın Filtre panelindeki dil kısıtlamasıyla nasıl eşleştiğini gösterir.

Özet

Yukarıdaki adımlarda Zamanlama Yardımcısı'nda Filtre panelini Dil varlığı için bir filtre denetimini gösterecek şekilde değiştirdik. Ayrıca Kısıtlamaları Al Sorgusunu Gereksinim varlığıyla ilgili yeni Dil özniteliklerini sorgulayacak ve bunları bir listeye dönüştürecek şekilde değiştirdik. Kullanıcı Gereksinim kaydı için kullanılabilirliği bulmayı seçtiğinde Filtre paneli, yakalanan Dil kısıtlamalarını gösterir. Filtre panelinden gelen değerler, Kaynakları Al Sorgusu'na aktarılır ve FetchXML sorgusu yalnızca eşleşen kaynakları geri döndürür.

Ayrıca bkz.

Evrensel Fetch XML

Universal Resource Scheduling genişletilebilirliği sürüm notları