CRM 2011 Customizations etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
CRM 2011 Customizations etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Mart 2013 Cuma

CRM 2011 -CUSTOMIZATIONS.xml KULANARAK RİBBONA BUTON EKLEME, CUSTOMRULE ve BUTONA TIKLAYINCA CUSTOM ASPX AÇMA


Solution ı kullanarak hangi entity e buton ekleyeceksek o entity nin customizations.xml i indirilir.Daha sonra <RibbonDiffXml> tagını asagıdakı gıbı degıstırınız.WebResource da List_main_library.js adlı javascript library si olusturdum ve içerigine kullanacagım fonksiyonlarımı yazdım.(Javascript kodları sayfanın altındadır.)


<RibbonDiffXml>
        <CustomActions>
          <CustomAction Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.CustomAction" Location="Mscrm.Form.list.MainTab.Actions.Controls._children" Sequence="41">
            <CommandUIDefinition>
              <Button Id="Okalip.Form.list.MainTab.Actions.CreateListonEuroMessage" Command="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Command" Sequence="29" ToolTipTitle="$LocLabels:Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.LabelText" LabelText="$LocLabels:Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.LabelText" ToolTipDescription="$LocLabels:Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Description" TemplateAlias="o1" Image16by16="/_imgs/ribbon/convert_16.png" Image32by32="/_imgs/ribbon/convert_32.png" />
            </CommandUIDefinition>
          </CustomAction>
        </CustomActions>
        <Templates>
          <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>
        </Templates>
        <CommandDefinitions>
          <CommandDefinitionId="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Command">
            <EnableRules>
              <EnableRule Id="Okalip.Form.list.MainTab.Actions.CreateListonEuroMessage.Command.EnableRule.AGC" />
            </EnableRules>
            <DisplayRules>
              <DisplayRule Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Command.DisplayRule.FormStateRule" />
            </DisplayRules>
            <Actions>
             <JavaScriptFunction FunctionName="CreateListonEuroMessageOnClick" Library="$webresource:List_main_library.js" />
              <!--<Url Address ="http://www.google.com" />-->/*direkt url verme*/
            </Actions>
          </CommandDefinition>
        </CommandDefinitions>
        <RuleDefinitions>
          <TabDisplayRules />
          <DisplayRules>
            <DisplayRule Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Command.DisplayRule.FormStateRule">
              <FormStateRule State="Create" Default="true" InvertResult="true" />
            </DisplayRule>
          </DisplayRules>
          <EnableRules>
            <EnableRule Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Command.EnableRule.AGC">
              <CustomRule FunctionName="CreateListonEuroMessageEnable" Library="$webresource:List_main_library.js" Default="false" InvertResult="true" />
            </EnableRule>
          </EnableRules>
        </RuleDefinitions>
        <LocLabels>
          <LocLabel Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.Description">
            <Titles>
              <Title languagecode="1033" description="CreateListonEuroMessage Description" />
              <Title languagecode="1055" description="Euromessage arayüzünde liste olustur." />
            </Titles>
          </LocLabel>
          <LocLabel Id="Gokhan.Form.list.MainTab.Actions.CreateListonEuroMessage.LabelText">
            <Titles>
              <Title languagecode="1033" description="Create List on EuroMessage" />
              <Title languagecode="1055" description="Liste olustur" />
            </Titles>
          </LocLabel>
        </LocLabels>
      </RibbonDiffXml>


List_main_library.js javascript kodları

function CreateListonEuroMessageEnable() {
    return true;
/*Geriye donus degeri True gonderılırse buton disable,false gonderılırse buton enable olacaktır.Burada işlemlerinizi yapıp ,işleme gore true,false geriye deger gonderılır*/
}

/*Gokhan Mentese*/
function CreateListonEuroMessageOnClick() {
    var _userId = Xrm.Page.context.getUserId();
    var entityid = Xrm.Page.data.entity.getId();
    var orgname = Xrm.Page.context.getOrgUniqueName();

    if (_userId != null && entityid != null && orgname != null) {
        var url = null;
        if (orgname != null) {
            url = "http://localhost:8083/OnlyCreateList.aspx?userid=" + _userId + "&entityid=" + entityid + "&orgname=" + orgname;
/*Iss üzerinde calısan site deki OnlyCreateList.aspx sayfamı cagırıyorum.Beraberınde query string de yolluyorum */
        }
        if (url != null) {
            var features = 'height=300,width=450,left=300,top=150,resizable=yes,titlebar=no,resizable=no,scrollbars=no,toolbar=no,menubar=no,location=no,directories=no, status=no';
            window.open(url, 'GokhanMentese', features);
        }
    }
}


28 Ocak 2013 Pazartesi

CRM 2011- FORMA BUTON EKLEME


Forma crm arayuzu uzerınden buton ekleme sansımız yok.Bunun için buton ekleme olayını javascript uzerınden yapıyoruz.Bunun için forma text alan ıcerecek field alan ekleyıp o field ı form acılırken butona cevırmemız gerekecek.Field ı butona cevıren javascript asagıdadır.

new_custombutton => butona cevrilecek field ın name i
function CreateCustomButton() {
    ConvertToButton("new_custombutton", "Not Onay", "100px", OpenSearchPage, "Button Label");
   document.getElementById('new_mytxt').style.visibility = 'hidden';
}
function GetValueFromChild(myVal)
    {
        document.getElementById('new_mytxt').value = myVal;
    }
function ConvertToButton(fieldname, buttontext, buttonwidth, clickevent, title) {
    //check if object exists; else return
    if (document.getElementById(fieldname) == null) {
        return;
    }
    functiontocall = clickevent;
    crmForm.all[fieldname].DataValue = buttontext;
    crmForm.all[fieldname].readOnly = true;
    crmForm.all[fieldname].style.borderRight = "#3366cc 1px solid";
    crmForm.all[fieldname].style.paddingRight = "5px";
    crmForm.all[fieldname].style.borderTop = "#3366cc 1px solid";
    crmForm.all[fieldname].style.paddingLeft = "5px";
    crmForm.all[fieldname].style.fontSize = "11px";
    crmForm.all[fieldname].style.backgroundImage = "url(/_imgs/btn_rest.gif)";
    crmForm.all[fieldname].style.borderLeft = "#3366cc 1px solid";
    crmForm.all[fieldname].style.width = buttonwidth;
    crmForm.all[fieldname].style.cursor = "hand";
    crmForm.all[fieldname].style.lineHeight = "18px";
    crmForm.all[fieldname].style.borderBottom = "#3366cc 1px solid";
    crmForm.all[fieldname].style.backgroundRepeat = "repeat-x";
    crmForm.all[fieldname].style.fontFamily = "Tahoma";
    crmForm.all[fieldname].style.height = "20px";
    crmForm.all[fieldname].style.backgroundColor = "#cee7ff";
    crmForm.all[fieldname].style.textAlign = "center";
    crmForm.all[fieldname].style.overflow = "hidden";
    crmForm.all[fieldname].attachEvent("onmousedown", push_button);
    crmForm.all[fieldname].attachEvent("onmouseup", release_button);
    crmForm.all[fieldname].attachEvent("onclick", functiontocall);
    crmForm.all[fieldname].style.lineHeight = "14px";
    crmForm.all[fieldname + '_c'].style.visibility = 'hidden';
    crmForm.all[fieldname].title = title;
    window.focus();
}
function push_button() {
    window.event.srcElement.style.borderWidth = "2px";
    window.event.srcElement.style.borderStyle = "groove ridge ridge groove";
    window.event.srcElement.style.borderColor = "#3366cc #4080f0 #4080f0 #3366cc";
}
function release_button() {
    window.event.srcElement.style.border = "1px solid #3366cc";
}


23 Ekim 2012 Salı

CRM 2011-IFrame Link Verme


Asagısaı javascript fonksıyonu sayfanın onLoad , onSave ya da fieldların onChange ine yazılabilir.
function IFrameLinkSet() {

    var entityid = Xrm.Page.data.entity.getId();
    var pricelistValue = new Array(); /*Guid deger alınıyor.*/
    pricelistValue = Xrm.Page.getAttribute("pricelevelid").getValue();
    var pricelistid = pricelistValue != null ? pricelistValue[0].id : null;

    var formType = Xrm.Page.ui.getFormType();
    if (formType == 2) {
        if (entityid != null && pricelistid != null) {

     /*IFrame de acılacak sayfanın adresi veriliyor.Ve adresle birlikte sayfaya veri gönderiliyor.*/
            var url = "http://localhost:8989/SalesAddProduct/SalesOrderProductView.aspx?entityid=" + entityid + "&pricelistid=" + pricelistid;

/*Link IFrame e setSrc() kullanılarak verildi.*/
            Xrm.Page.getControl("IFRAME_SalesOrderDetailsView").setSrc(url);
        }
    }
}

7 Ağustos 2012 Salı

CRM de IFRAME


Merhaba, CRM 2011’in beta sürümünün release olmasıyla birlikte makale yoğunluğumuz yeni sürümün özelliklerine kaymıştı normal olarak. Bu yeni özellikleri en azından önemli kısımlarından bahsettikten sonra, odağımızı developer kısmına getirme zamanı geldi. Bir CRM danışmanı olarak sık sık ihtiyaç olan konuları bir seri halinde sunmak istiyoruz. Tips and Tricks olark isimlendireceğimiz seride, plugin kodlamaktan javascript düzenlemelerine kadar CRM projelerinde ihtiyaç duyulan geliştirme özelliklerden bahsedeceğiz. Karşılaştığınız sorunların en azından bir kısmına derman olabilir belki.. 

Bu serinin ilk konusu ise Iframe’ler hakkında olacaktır. CRM formları içinde bambaşka Internet uygulamlarını
çağırabileceğiniz bir yapı. Herhangi bir formun customization ekranındaki Insert tabında bulunan Iframe düğmesine
tıklayarak ekleyebilirsiniz.


Daha sonra buradkai bilgileri istediğiniz gibi doldurabilirsiniz.

Burada yazdığınız URL alanı içinde yazdığınız site gösterilecektir. “Pass record object type code and unique identifier as parameters” kutusu önemlidir. Bu kutuya tıkladığınızda, verdiğiniz adresin sonuna formun objecttypecode değeri (yani hangi entity olduğu bilgisi) ve formdaki kaydın id’si Querystring parametresi olarak gönderilir. Dolayısıyla
bu iki veriden yola çıkarak hangi entity’nin hangi kaydında bulunduğunuzu anlayabilirsiniz.

Bu şekilde bir Iframe oluşturuduğunuzda içeride gösterilecek URL aşağıdaki gibi bir adres olacaktır.



gördüğünüz gibi temel verilerin hepsi Iframe olarak gelmiştir. Eğer Iframe olarak bir asp.net uygulaması yazdıysanız ASP.net içinde Request.Url.AbsoluteUri yolunu kullanarak siteye gönderilen url’yi alabilirsiniz.

Iframe’ler hakkında bahsetmek istediğim öenmli bir teknik daha, Iframe’in adresini formun javascript’inde değiştirmenizdir. Mesela form ilk yüklenirken, adresi dinamik olarak set edebilirsiniz veya mesela bir picklist’den bir değer seçildiğinde farklı bir adresin ayarlanmasını sağlayabilirsiniz. Örnekleri çoğaltmak mümkün. Bu durumda Iframe’i tanımlarken URL kısmına about:blank yazmalısınız.



Javascript kodu olarak ise aşağıdaki gibi bir kod işinizi görecektir. crmForm.all.IFRAME_mscrm.src = ‘www.xrmplatform.net’;

Bu yazım CRM 4.0 için geçerlidir. 2011 için kullanımı aşağıdaki gibi olmalıdır

Xrm.Page.getControl("IFRAME_mscrm").setSrc("www.xrmplatform.net");

Ayrıca acılan sayfadaki aracların tetiklenmesi (butona tıklanması,drop downun secilmesi vs.) için "Select whether to restrict cross-frame scripting" bolumundeki seçili işaretini kaldırınız.