Name
|
Size
|
Description
|
MicrosoftDynamics365SDK.exe
|
83.9MB
|
Microsoft
Dynamics 365 Software Development Kit (SDK) for Dynamics 365 Online and on-premises Dynamics 365
|
MicrosoftDynamicsCRM2016UII.exe
|
58.3 MB
|
User
Interface Integration (UII) solution framework, which includes a deployment
guide, development guide and api reference for Unified Service Desk.
|
Dynamics 365 - Microsoft Dynamics 365 SDK & UII İndirme
Dynamics 365 - Silinmiş Kayıtları Geri Getirme Yöntemi (AUDIT)
Bugün müşterilerimizden biriyle telefon görüşmesi yaptım ve önemli kayıtlarından ikisinin bulunmadığını, bulamadığını ve önemli kayıtlar olduğunu söyledi.
İlk başta onun deaktive ettiğini ve bir şekilde bunu göremediğini düşündüm ancak daha sonra denetleme geçmişi sayesinde onları sildiklerini anladım. Sonra kayıtları tekrar kurmanın bir yolunu aramaya başladım. Şimdilik, kayıtları geri yükleme yolunu paylaşacağım ancak ilişkileri paylaşmayacağım.
C# Kodu
CrmServiceClient crmServ = CrmManagerStatic.GetCrmServiceClient();
// deleted record's audit id which you want to restore
Guid auditId = new Guid("deleted_record's_audit_guid");
// create RetrieveAuditDetailsRequest object
var request = new RetrieveAuditDetailsRequest { AuditId = auditId };
// execute request and retrieve response
var response = (RetrieveAuditDetailsResponse)crmServ.Execute(request);
// create auditDetail object and assign response's auditdetail value
AuditDetail auditDetail = response.AuditDetail;
// cast audtitDetail as AttributeAuditDetail which contains record's attributes
AttributeAuditDetail attributeAuditDetail = auditDetail as AttributeAuditDetail;
// recreate the deleted record with the same guid
if (attributeAuditDetail != null)
crmServ.Create(attributeAuditDetail.OldValue);
İlk başta onun deaktive ettiğini ve bir şekilde bunu göremediğini düşündüm ancak daha sonra denetleme geçmişi sayesinde onları sildiklerini anladım. Sonra kayıtları tekrar kurmanın bir yolunu aramaya başladım. Şimdilik, kayıtları geri yükleme yolunu paylaşacağım ancak ilişkileri paylaşmayacağım.
C# Kodu
CrmServiceClient crmServ = CrmManagerStatic.GetCrmServiceClient();
// deleted record's audit id which you want to restore
Guid auditId = new Guid("deleted_record's_audit_guid");
// create RetrieveAuditDetailsRequest object
var request = new RetrieveAuditDetailsRequest { AuditId = auditId };
// execute request and retrieve response
var response = (RetrieveAuditDetailsResponse)crmServ.Execute(request);
// create auditDetail object and assign response's auditdetail value
AuditDetail auditDetail = response.AuditDetail;
// cast audtitDetail as AttributeAuditDetail which contains record's attributes
AttributeAuditDetail attributeAuditDetail = auditDetail as AttributeAuditDetail;
// recreate the deleted record with the same guid
if (attributeAuditDetail != null)
crmServ.Create(attributeAuditDetail.OldValue);
Dynmics 365 Javascript - Formdaki Zorunlu Alan Kontrolü
Formdaki gerekli olan alanların dolu olup olmadığını kontrol etmek için aşağıdaki script metodunu kullanabilirsiniz. Getiye dönüş olarak True veya false değer dönecektir.
Javascript
function CheckMandatoryFields() {
var populated = true;
Xrm.Page.getAttribute(function (attribute, index) {
if (attribute.getRequiredLevel() == "required") {
if (attribute.getValue() === null) {
populated = false;
}
}
});
return populated;
}
Javascript
function CheckMandatoryFields() {
var populated = true;
Xrm.Page.getAttribute(function (attribute, index) {
if (attribute.getRequiredLevel() == "required") {
if (attribute.getValue() === null) {
populated = false;
}
}
});
return populated;
}
Dynamics 365 Javascript - Email Format Script
function EmailFormat(field) {
try {
var fieldName = field.getEventSource().getName();
var email = GetValue(fieldName);
if (email != null) {
email = ReplaceFromTurkishChar(email);
SetValue(fieldName, email);
}
}
catch (e) {
CommonAlert("An error occured in EmailFormat Function.\nError: " + e.message);
}
}
function ReplaceFromTurkishChar(text) {
var normal = new Array("i", "s", "u", "c", "o", "g", "C", "S", "O", "U", "G", "I");
var turkish = new Array("ı", "ş", "ü", "ç", "ö", "ğ", "Ç", "Ş", "Ö", "Ü", "Ğ", "İ");
for (var i = 0; i < text.length; i++) {
for (var j = 0; j < 12; j++) {
if ((text.charAt(i)) == turkish[j]) {
text = text.replace((text.charAt(i)), normal[j]);
}
}
}
return text;
}
NOT
Email alanımıza functionımızı eklerken Pass execution context as first parameter checkboxını seçmemiz gerekecektir.
Dynamics 365 Javascript - Telefon Formatlama Örnek Script
Aşağıdaki örnek kod üzerinde hem Türkiye hem de Türkiye dışındaki ülkeler için telefon formatlama yöntemini bulabilirsiniz.
function TelephoneFormat(fieldName, ulkefieldname,ulkekoduname) {
try {
var langId = Xrm.Page.context.getUserLcid();
if (langId != 1055)
langId = 1033;
var oField = GetAttribute(fieldName);
if (GetValue(fieldName) != null && GetValue(fieldName) != "") {
var ulke = GetValue(ulkefieldname);
var _ulkeid = null;
if (ulke != null && ulke[0] != null && ulke[0].id != null)
_ulkeid = ConverttoStringFromGuid(ulke[0].id);
if (_ulkeid != null) {
var sTmp = oField.getValue().replace(/[^0-9]/g, "");
if (_ulkeid == GetTurkiyeId()) {
switch (sTmp.length) {
case 13:
oField.setValue("+" + sTmp.substr(0, 3) + " " + sTmp.substr(3, 3) + " " + sTmp.substr(6, 7));
break;
case 12:
oField.setValue("+" + sTmp.substr(0, 2) + " " + sTmp.substr(2, 3) + " " + sTmp.substr(5, 7));
break;
case 11:
oField.setValue("+9" + sTmp.substr(0, 1) + " " + sTmp.substr(1, 3) + " " + sTmp.substr(4, 7));
break;
case 10:
oField.setValue("+90 " + sTmp.substr(0, 3) + " " + sTmp.substr(3, 7));
break;
case 7:
oField.setValue("+90 232 " + sTmp.substr(0, 3) + sTmp.substr(3, 4));
break;
default:
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
SetValue(fieldName, null);
break;
}
}
else {
TelephoneFormat2(fieldName, ulkekoduname);
}
}
else {
if (langId == 1055)
CommonAlert("Telefon numarası girmek için ilk önce ülke seçilmelidir.");
else
CommonAlert("Please , firstly select country.");
setTimeout(function () {
SetValue(fieldName, null);
}, 200);
}
}
}
catch (e) {
CommonAlert("An error occured in TelephoneFormat Function.\nError: " + e.message);
}
}
function TelephoneFormat2(fieldadi, ulkekoduname) {
try {
var value = GetValue(fieldadi);
if (typeof (value) != "undefined" && value != null) {
value = FormatPhoneNumber(value, ulkekoduname);
}
SetValue(fieldadi, value);
}
catch (e) {
alert('TelephoneFormat2 error');
}
}
function FormatPhoneNumber(phoneNo, ulkekoduname) {
var formattedPhone = phoneNo;
var ulkekodu = GetValue(ulkekoduname);
ulkekodu = ulkekodu != null ? ulkekodu : "";
if (phoneNo.length < 5) {
if (langId == 1055)
CommonAlert("Telefon numarası 5 karakterden az girilemez");
else if (langId == 1055)
CommonAlert("PhoneFormat error.");
formattedPhone = "";
return formattedPhone;
}
if (phoneNo.length == 5)
formattedPhone = phoneNo.replace(/(\d{3})(\d{2})/, "+" + ulkekodu + ' $1 $2');
else if (phoneNo.length == 6)
formattedPhone = phoneNo.replace(/(\d{3})(\d{3})/, "+" + ulkekodu + ' $1 $2');
else if (phoneNo.length == 7)
formattedPhone = phoneNo.replace(/(\d{3})(\d{4})/, "+" + ulkekodu + ' $1 $2');
else if (phoneNo.length == 8)
formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{2})/, "+" + ulkekodu + ' $1 $2$3');
else if (phoneNo.length == 9)
formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{3})/, "+" + ulkekodu + ' $1 $2$3');
else if (phoneNo.length == 10)
formattedPhone = phoneNo.replace(/(\d{3})(\d{3})(\d{4})/, "+" + ulkekodu + ' $1 $2$3');
else if (phoneNo.length == 11)
formattedPhone = phoneNo.replace(/(\d{2})(\d{3})(\d{3})(\d{3})/, "+" + ulkekodu + '$1 $2 $3$4');
else if (phoneNo.length > 11)
formattedPhone = phoneNo.replace(/^\(?([0-9]{2})?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})?([0-9]*)$/, "+" + ulkekodu + " $1($2) $3-$4 x$5");
return formattedPhone;
}
function SetValue(field, value) {
var attribute = GetAttribute(field);
if (attribute != null) {
return attribute.setValue(value);
}
return null;
}
function GetValue(field) {
var attribute = GetAttribute(field);
if (attribute != null) {
return attribute.getValue();
}
return null;
}
function GetAttribute(field) {
return Xrm.Page.getAttribute(field);
}
Dynamics 365 Javascript - İki Kere Alert Verme Sorunu
Bazı durumlarda alan kontrolü yaparken kullanıcıya uyarı veririz ve alanın değerini de null yaparız. Bu gibi durumlarda ekrana verilen uyarının iki kere geldiğini görürüz . Javascript kodumuzu debug ettiğimizde düzgün çalıştığını ama normal durumda iki kere alert verdiğini farkederiz.
Örnek vermek gerekirse , telefon alanları için formatlama yapalım . Belli durumlar haricinde ekrana "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alertini verelim ve telefon alanının değerine null atayalım. İşte bu durumda ekrana verilen "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alerti 2 kere görünecektir..
Örnek Kod Parçası
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
Xrm.Page.getAttribute("fieldname").setValue(null);
function TelephoneFormat(fieldName, ulkefieldname) {
try {
var langId = Xrm.Page.context.getUserLcid();
if (langId != 1055)
langId = 1033;
var oField = GetAttribute(fieldName);
if (GetValue(fieldName) != null && GetValue(fieldName) != "") {
var ulke = GetValue(ulkefieldname);
var _ulkeid = null;
if (ulke != null && ulke[0] != null && ulke[0].id != null)
_ulkeid = ConverttoStringFromGuid(ulke[0].id);
if (_ulkeid != null) {
var sTmp = oField.getValue().replace(/[^0-9]/g, "");
if (_ulkeid == GetTurkiyeId()) {
switch (sTmp.length) {
case 13:
oField.setValue("+" + sTmp.substr(0, 3) + " " + sTmp.substr(3, 3) + " " + sTmp.substr(6, 7));
break;
case 12:
oField.setValue("+" + sTmp.substr(0, 2) + " " + sTmp.substr(2, 3) + " " + sTmp.substr(5, 7));
break;
case 11:
oField.setValue("+9" + sTmp.substr(0, 1) + " " + sTmp.substr(1, 3) + " " + sTmp.substr(4, 7));
break;
case 10:
oField.setValue("+90 " + sTmp.substr(0, 3) + " " + sTmp.substr(3, 7));
break;
case 7:
oField.setValue("+90 232 " + sTmp.substr(0, 3) + sTmp.substr(3, 4));
break;
default:
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
SetValue(fieldName, null);
break;
}
}
else {
TelephoneFormat2(fieldName);
}
}
else {
if (langId == 1055)
CommonAlert("Telefon numarası girmek için ilk önce ülke seçilmelidir.");
else
CommonAlert("Please , firstly select country.");
SetValue(fieldName, null);
}
}
}
catch (e) {
CommonAlert("An error occured in TelephoneFormat Function.\nError: " + e.message);
}
}
Çözüm
Çözüm için alanın değerini null yaptığımız satırı setTimeout ile kullanalım . Bu şekilde ekrana uyarı 1 kere gelecektir.
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
setTimeout(function () {
Xrm.Page.getAttribute("fieldname").setValue(null);
}, 200);
Örnek vermek gerekirse , telefon alanları için formatlama yapalım . Belli durumlar haricinde ekrana "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alertini verelim ve telefon alanının değerine null atayalım. İşte bu durumda ekrana verilen "2124440011 şeklinde en az 10 haneli bir telefon numarası giriniz" alerti 2 kere görünecektir..
Örnek Kod Parçası
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
Xrm.Page.getAttribute("fieldname").setValue(null);
function TelephoneFormat(fieldName, ulkefieldname) {
try {
var langId = Xrm.Page.context.getUserLcid();
if (langId != 1055)
langId = 1033;
var oField = GetAttribute(fieldName);
if (GetValue(fieldName) != null && GetValue(fieldName) != "") {
var ulke = GetValue(ulkefieldname);
var _ulkeid = null;
if (ulke != null && ulke[0] != null && ulke[0].id != null)
_ulkeid = ConverttoStringFromGuid(ulke[0].id);
if (_ulkeid != null) {
var sTmp = oField.getValue().replace(/[^0-9]/g, "");
if (_ulkeid == GetTurkiyeId()) {
switch (sTmp.length) {
case 13:
oField.setValue("+" + sTmp.substr(0, 3) + " " + sTmp.substr(3, 3) + " " + sTmp.substr(6, 7));
break;
case 12:
oField.setValue("+" + sTmp.substr(0, 2) + " " + sTmp.substr(2, 3) + " " + sTmp.substr(5, 7));
break;
case 11:
oField.setValue("+9" + sTmp.substr(0, 1) + " " + sTmp.substr(1, 3) + " " + sTmp.substr(4, 7));
break;
case 10:
oField.setValue("+90 " + sTmp.substr(0, 3) + " " + sTmp.substr(3, 7));
break;
case 7:
oField.setValue("+90 232 " + sTmp.substr(0, 3) + sTmp.substr(3, 4));
break;
default:
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
SetValue(fieldName, null);
break;
}
}
else {
TelephoneFormat2(fieldName);
}
}
else {
if (langId == 1055)
CommonAlert("Telefon numarası girmek için ilk önce ülke seçilmelidir.");
else
CommonAlert("Please , firstly select country.");
SetValue(fieldName, null);
}
}
}
catch (e) {
CommonAlert("An error occured in TelephoneFormat Function.\nError: " + e.message);
}
}
Çözüm
Çözüm için alanın değerini null yaptığımız satırı setTimeout ile kullanalım . Bu şekilde ekrana uyarı 1 kere gelecektir.
alert('2324440011 şeklinde en az 10 haneli bir telefon numarası giriniz.');
setTimeout(function () {
Xrm.Page.getAttribute("fieldname").setValue(null);
}, 200);
CRM Installation - CRM 2015 ten CRM 2016 ya Upgrade Sırasında Alınan Hata
One or more organizations can't be upgraded because the version isn't supported for upgrade. Apply the latest Microsoft Dynamics CRM 2015 update rollup, and then use Microsoft Dynamics CRM 2016 Deployment Manager to update each organization. Then, try to upgrade again.
CRM 2016 ya upgrade sırasında enson rollup güncellemesini (Microsoft Dynamics CRM 2015 Update 0.2 ) yapmıstım ama yine de upgrade sırasında son rollup güncellemesini yapın tarzında hata veriyordu . Biraz araştırdıktan sonra anladım ki database dekı tüm organizasyonlara son rollup güncellemesini yapmak gerekiyormuş . Ben sadece upgrade edeceğim organizasyona rollup yüklemiştim .Bu yüzden bu hatayı almışım.
Not : Bu hata CRM 2011 den CRM 2013 upgrade veya CRM 2013 ten CRM 2015 upgrade sırasında vermiyor.
CRM 2016 ya upgrade sırasında enson rollup güncellemesini (Microsoft Dynamics CRM 2015 Update 0.2 ) yapmıstım ama yine de upgrade sırasında son rollup güncellemesini yapın tarzında hata veriyordu . Biraz araştırdıktan sonra anladım ki database dekı tüm organizasyonlara son rollup güncellemesini yapmak gerekiyormuş . Ben sadece upgrade edeceğim organizasyona rollup yüklemiştim .Bu yüzden bu hatayı almışım.
Not : Bu hata CRM 2011 den CRM 2013 upgrade veya CRM 2013 ten CRM 2015 upgrade sırasında vermiyor.
Kaydol:
Kayıtlar (Atom)



