DependencyBase Index Hatası

Crm 2011 çözüm aktarımlarında ya da rollup güncellemelerinde sıkça karşılabileceğiniz bir hata metnidir DependencyBase hatası. Kurulum yapılan veritabanı versiyonlarıyla alakalı olarak yaşanabilen bu hatanın tam metni;

Cannot insert duplicate key row in object ‘dbo.DependencyBase’ with unique index ‘ndx_UniqueDependencyNodes’. The duplicate key value is (***).
The statement has been terminated.

net bir tanımı malesef herhangi bir kaynakta bulunmuyor. Karşılaştığınız bu problemi aşmanın yoluysa; DependencyBase tablosu altındaki ndx_UniqueDependencyNodes indexine ait özellikler arasında tekrarlanan kayıtlar için geçerli ignore duplicate values özelliğinin seçili olması gerekmektedir. Bu işlemi yaptıktan sonra indexi rebuild etmeniz yeterli olacaktır. Özelliğe ait ekran görüntüsü aşağıdaki gibidir.

yaz bunu mustafa alkan

Crm 2011’de Çözümlerin Birleştirilmesi \ Merging Crm 2011 Solutions

Çözümlerle ilgili birleştirme ihtiyacından dolayı arayış esnasında rastladığım güzel bir video.

http://channel9.msdn.com/posts/Merging-CRM-2011-Solutions/player?w=512&h=288

Xrm.Utility Sınıfı

İleride yeni eklemelerle zenginleşeceğini düşündüğüm Xrm.Utility şu anda sadece iki fonksiyonu mevcut. İkisi de basit ama hız kazandıran özelliklere sahip fonksiyonlar. Bunların ilki Xrm.Utility.openEntityForm diğeri de Xrm.Utility.openWebResource.

Xrm.Utility.openEntityForm, Yeni ya da var olan bir entityi açmaya yarayan fonksiyon. Kullanım şekilleri;

Bir entitye ait yeni kayıt formunu açmak için kullanılabilecek yapı; Xrm.Utility.openEntityForm(“new_breath”);
Var olan bir kayda erişim için kullanılacak yapı; Xrm.Utility.openEntityForm(“new_breath”,”A5D5F6G8-SDA5-AEWQ-AADD-00155D8A8410″);

Var olan bir kayıda ait formun bir takım değerlerini ihtiyaca göre belirleyerek formu açmak için kullanılabilecek örnek yapı;

var parameters = {};
parameters[“new_breathid”] = “as5d45as-ad45-asd1-acef-ddf00182762b”;
parameters[“name”] = “Test”;
parameters[“telephone1”] = “(123) 123-1234”;
Xrm.Utility.openEntityForm(“new_breath”, null, parameters);

Xrm.Utility.openWebResource ise web resource olarak kaydedilmiş kayıtlara erişim ve parametre gönderimi için kullanılan bir fonksiyondur.

Xrm.Utility.openWebResource(“new_breathsource.htm”);

Xrm.Utility.openWebResource(“new_breathsource.htm”,”dataValue”);
openWebResource web resourcelara direk erişim sağlayan bir fonksiyon olmasının yanında büyük verilerin parametre olarka gönderilmesi durumlarında da kolaylık sağlayan bir yapı sunmaktadır. Büyük verilerdeki parametreler için pratik bir yol olarak; büyük veriyi elde etmeye yarayacak değerlerin parametre olarak gönderilmesi ve geri kalan veriye web resource içinde erişmek not edilebilir.

 

Dashboard\Pano yapısında Custom\Özel Sayfa gösterimi

Crm 2011’in öne çıkan yapısından biri olan dashboardlarda özelleştirilmiş asp sayfaları göstermek mümkün. Eklemesi oldukça kolay bu yapıda yükleme hatası ya da sadece bir çarpı işareti görürseniz iframe özelliklerinden restrict cross-frame scripting checkbox’ının seçili olmadığına, seiçiliyse de bu seçeneği kaldırdığınıza emin olunuz.

crm 2011 dashboard custom iframe error trick

February 2, 2013 Leave a comment

CRM 2011 form özelleştirmelerinde en sık rastlanan durumlardan biridir, salt okunur form alanlarına javascript fonksiyonlarıyla değer atayamama durumu.

Salt okunur bir alana değer atayabilmek için;

setValue(“test”);

işlemi öncesinde mutlaka setSubmitMode(); event\olay ını çağırmak gerekmektedir.

Xrm.Page.getAttribute(“fieldName”).setSubmitMode(“always”);

Xrm.Page.getAttribute(“fieldName”).setValue(“test”);

MS Dynamics Crm Formunda Dinamik OptionSetSeçenek Kümesi Kullanımı

January 23, 2013 Leave a comment

Ms Dynamics Crm formlarında Seçenek KümesiOption Set seçenekleri içerisinde dinamik filtreleme yapabilmek, formda seçilen öğelere göre seçenekleri değiştirmek en sık karşımıza çıkan isteklerdendir. Bu isteği Crm 2011 altyapısının sunduğu imkanlarla kolay bir yapıya indirgemek mümkündür. Web Kaynağı olarak tanımlayacağınız bir xml, forma yapacağınız bir javascript özelleştirmesi filtreleme aşamasındaki bu kolaylığı sağlamak için yeterlidir.

Detaylara geldiğimizde;

Ana kampanya tipine göre kampanya cevaplarının filtreleneceği bir form senaryomuz olduğunu varsayalım. Ana kampanya tipine göre filtrenelecek xml’i tamamen taglerini bizim belirleyeceğimiz şekilde oluşturalım.

<CampaignFilter>
<CampaignStatus TypeValue=”1″ AnswerValue=”1″ />
<CampaignStatus TypeValue=”2″ AnswerValue=”2″ />
<CampaignStatus TypeValue=”2″ AnswerValue=”3″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”4″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”5″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”6″ />
<CampaignStatus TypeValue=”3″ AnswerValue=”7″ />
</CampaignFilter>

Oluşturduğumuz bu xml dosyasını Türü Veri(XML) olacak şekilde web kaynağı olarak kaydedelim. Kaydettiğimiz bu xml dosyası üzerindeki TypeValue Kampanya tipinin “Seçenek KümesiOption Set” setine ait seçenek değerleri, AnswerValue’ysa cevaplara ait seçenek değerleridir. Bu değerler Crm Varlık alanlarında tutulan değerlere karşılık gelmektedir.

Dinamik xml’in okunarak formda işleneceği kısma geldiğimizdeyse, bu özelleştirmeyi kampanya tipinin seçildiği ana Seçenek KümesiOption Set’in OnChange OlayEvent’ine yazmamız gerekmektedir.

function OnChangeControlStatus()
{
var siteUrl = null;
var xmlDoc = new ActiveXObject(“MSXML.DOMDocument”);
xmlDoc.async = “false”;

siteUrl = Xrm.Page.context.getServerUrl();
if(siteUrl !=null)
{
xmlDoc.load(siteUrl +”/WebResources/XmlDosyaAdi”);
}

//CampaignFilter alınıyor
var typeRepository = xmlDoc.getElementsByTagName(“CampaignStatus”);
var typeCount = typeRepository.length;

//Secilen kampanya tipi alınıyor
var selectedTypeValue = Xrm.Page.getAttribute(“KampanyaOptionSetId”).getSelectedOption().value;

//Cevap seçeneklerinin tam listesi Crm sisteminden okunuyor.
var options = Xrm.Page.getAttribute(“CevapOptionSetId”).getOptions();

//Filtreleme işlemi başlıyor
if(selectedTypeValue != null)
{
Xrm.Page.ui.controls.get(“CevapOptionSetId”).clearOptions();
for (var i = 1; i <= options.length; i++) {
if (options[options.length – i].value != “null”) {
Xrm.Page.ui.controls.get(“CevapOptionSetId”).addOption(options[options.length – i], i-1);
}
}

//Loop through each value in the mappings file to ensure
for (var i = 0; i < typeCount; i++)
{
if (typeRepository[i].getAttribute(‘TypeValue’) != selectedTypeValue)
{
var answervalue = typeRepository[i].getAttribute(‘AnswerValue’);
Xrm.Page.ui.controls.get(“CevapOptionSetId”).removeOption(answervalue);
}
}
}
}

Dikkat edilmesi gereken ve genelde gözden kaçan bir hatayı ekleyerek bitirmek istiyorum; filtrelemede kullanılacak tüm alanların crm varlığında Seçenek KümesiOption Set’in dahilinde tanımlı olması gerekmektedir.

MS Dynamics Crm Plugin Assembly ve ILMerge kullanımı

January 10, 2013 Leave a comment

Microsoft Dynamics Crm 4.0 ve 2011 yapısından en çok kullanılan özelleştirme yönteminden biridir Plugin. Ve en çok yaşanılan problemlerden biridir Pluginlerin sisteme kurulumu ve sonrasındaki aşamalarda yaşanan referans assembly problemleri. Bu problemlerin çözümü database deployment yerine disk deployment yöntemini seçerek aşılabilir. Ancak güvenlik kısıtlarının yoğun olduğu, policylerin sık değiştiği uygulama ortamlarında harici verilen assembly dosyalarına erişmek çözüme ulaşsa bile tekrar tekrar karşılaşılabilecek bir problemdir. Harici referanslar aşamasında karşılaşılan bu sorunu çözmek için ILMerge önerilebilecek en önemli yardımcı araçtır.

ILMerge’i manuel ya da Proje özelliklerine yazacağınız Build Event olarak tanımlayarak çalıştırabilir ve harici referansların Plugin dll’iyle birlikte tek bir dll olarak oluşmasını sağlayabilirsiniz. Tek bir dll olarak Crm’e dahil edeceğiniz Plugin özelleştirmeleri olası referans hatalarından korunmuş olacaktır.

Örnek Kullanım;

“C:\Program Files\Microsoft\ILMerge\ILMerge.exe” /wildcards /log:ILMerge.log /out:”$(TargetDir)Plugins.dll” “$(TargetPath)” “$(TargetDir)Interop.*.dll”

/wildcards belirtilen hedef klasöründeki tüm dll’leri ya da belirtilen dosya adıyla başlayan tüm dll’lerin alınması için kullanılmış bir parametredir. Ayrıca sıkça kaşılaşılan bir hata olarak .dll çıktısı alamaz, uzun süre beklemenize rağmen herhangi bir sonuç elde edemezseniz framework versiyonunuzu belirtmeniz gerekecektir. Bu ayarı da versiyonunuza uygun bir biçimde; /targetplatform:v4 şeklinde yapabilirsiniz.

Ayrıca bu tarz plugin kullanımında Crm’e özel olarak karşılaşabileceğiniz bir durum daha Entity Cast aşamasındaki sorunlar olabilir. Dynamic entitylerin (Lead)Entity biçimindeki cast operasyonu kombine dll’li çalışma yapısında hata üretebilir.

Örnek Hata;

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Unable to cast object of type ‘Microsoft.Xrm.Sdk.Entity’ to type ‘Lead’

Karşılaşılan bu hatayı da direkt cast yerine Entity.ToEntity<Lead>() şeklindeki kullanımla aşabilirsiniz.

ILMerge Download;http://www.microsoft.com/en-us/download/details.aspx?id=17630

Follow

Get every new post delivered to your Inbox.