Dynamics 365 UCI - NavigateTo Client API


Xrm.Navigation.navigateTo(pageInput,navigationOptions).then(successCallback,errorCallback);

Dynamics 365 için 2020 Release Wave 1 Güncellemesi ile artık dialog penceresinde dynamics 365 formlarını açabiliyoruz.

Dynamics 365 kaydını açmak için Xrm.Navigation.openForm yöntemini kullandık ve bu yöntem kayıtları yeni pencerede veya aynı tarayıcı penceresinde açıyordu.

NavigateTo Client API kullanarak, geçerli formumuzu veya web kaynağımızı terk etmeden CRM kaydını özel web kaynağımızdan veya herhangi bir CRM formundan iletişim kutusunda açabiliriz.

Not:
Bu yöntem sadece Birleşik Arabirim  (Unified Interface)' de desteklenir. Eski arayüz içerisinde kullanılmaz.


Örnek script kullanımları

1- Varlık Listeleme

var pageInput = {
    pageType: "entitylist",
    entityName: "lead",
};

Xrm.Navigation.navigateTo(pageInput).then(
  function success() {
    // Run code on success
  },
  function error() {
    // Handle errors
  }
);

Görünüm kimliğini (viewId) belirtmezsek, aşağıdaki ekran görüntüsünde gösterildiği gibi varlığın varsayılan ana görünümüne gider. Bizim örneğimizde varsayılan olarak Açık Müşteri Adaylarım seçili durumdadır.



Tüm müşteri adaylarının görüneceği görünümüm kimliğini verelim.


var pageInput = {
    pageType: "entitylist",
    entityName: "lead",
    viewId: "5A926B99-3A5F-DF11-AE90-00155D2E3002",
    viewType: "savedquery"
};

Xrm.Navigation.navigateTo(pageInput).then(
  function success() {
    // Run code on success
  },
  function error() {
    // Handle errors
  }
);



2- Varlık Formu Açma

var pageInput = {
    pageType: "entityrecord",
    entityName: "contact",
    formType:2,
   // entityId: "3f189b2b-788a-ea11-99e5-0003ff7e9ecb" //replace with actual ID
};

var navigationOptions = {
    target: 2,
    height: {value: 80, unit:"%"},
    width: {value: 70, unit:"%"},
    position: 1
};

Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
  function success() {
    // Run code on success
  },
  function error() {
    // Handle errors
  }
);

Aşağıdaki ekran görüntüsünde yeni kayıt girişi için ilgili kişi yeni formu açılmıştır.


entityId değeri olarak var olan bir kaydın guid değeri verilirse kayıtlı form açılacaktır.


3- Bir iletişim kutusunda oluşturma modunda bir form açma

Aşağıdaki script kullanılarak yeni bir müşteri adayı girişi yapılan form açılır. success metoduna formu kaydettiğiniz an düşecektir. Burada oluşan kaydımızın dynamics 365 üzerinde tutulan id değerine ulaşabiliriz.

var pageInput = {
  pageType: "entityrecord",
  entityName: "lead",
};

var navigationOptions = {
  target: 2,
  height: { value: 80, unit: "%" },
  width: { value: 70, unit: "%" },
  position: 1,
};

Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
  function success(result) {
    console.log(
      "Record created with ID: " +result.savedEntityReference[0].id +
      " Name: " +result.savedEntityReference[0].name
    );
    // Handle dialog closed
  },
  function error() {
    // Handle errors
  }
);


4- Html sayfaları görüntüleme

Daha önceden Xrm.Internal yöntemi ile aynı form üzerinde html sayfalarımızı dialog şeklinde açabiliyorduk. Bu yöntem Microsoft tarafından dökümente edilmese de bir problem çıkarmıyordu.

 Xrm.Internal.openDialog(url, dialogOptions, winArguments, null, callBackFunc);

Birleşik arabirime geçişte bu yöntem desteklenmedi. Xrm.Navigation.openForm ile html sayfalarımızı açabiliyorduk ama aynı form üzeirnde açamıyorduk. Sayfalar pop-up şeklinde görüntülenebiliyordu.

navigateTo ile artık Dynamics 365 üzerinde sayfalarımızı aynı form üzerinde görüntüleyebileceğiz.

Alttaki script kodları , html bir sayfaya querystring yoluyla parametre göndererek ilgili sayfanın açılmasını sağlar. Parametre almayan bir sayfayı açacaksanız pageInput  içerindeki data özelliğini vermemeniz gerekir.

function AgcQueryParameter(_key, _value) {
  this.key = _key;
  this.value = _value;
}

function LoadHtmlPage() {
  var userId = Xrm.Utility.getGlobalContext().userSettings.userId.replace("{", "").replace("}", "").toUpperCase();
  var langId = Xrm.Utility.getGlobalContext().userSettings.languageId;

  var param1 = new AgcQueryParameter("userid", userId);
  var param2 = new AgcQueryParameter("langid", langId);

  var qParams = new Array();
  qParams.push(param1);
  qParams.push(param2);

  var customParameters = null;
  if (qParams !== null && qParams.length > 0) {
    var paramPart = "";
    for (var i = 0; i < qParams.length; i++) {
      var item = qParams[i];
      if (i === 0) paramPart += item.key + "=" + item.value;
      else paramPart += "&" + item.key + "=" + item.value;
    }
    paramPart += "&dParam=1";
    customParameters = paramPart;
  }

  var pageInput = {
    pageType: "webresource",
    webresourceName: "new_/mutabakat/html/loadfromerp.html",
    data: customParameters,
  };

  var navigationOptions = {
    target: 2,
    width: 575,  // value specified in pixel
    height: 400, // value specified in pixel
    position: 1,
  };

  Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success() {
      // Handle dialog closed
      selectedControl.refresh();
    },
    function error(e) {
      Xrm.Navigation.openAlertDialog({ text: e.message });
    }
  );
}

Açılan sayfa görünümü



 Detaylı bilgi için aşağıdaki linki kullanabilirsiniz.

https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/xrm-navigation/navigateto