Javascript ile WCF Servis e Bağlanma - 4

Javascript ile WCF Servise Bağlanma

Bu yazımızda wcf servisimize javascript bağlanmayı göreceğiz.

Wcfservisimize baglanacagımız kod ekranı aşagıdakı formatta olacaktır.
  • WCFJSON Metodu

  • CallService Metodu

  • ServiceFailed(result) Metodu

  • ServiceSucceeded Metodu

Eğer servise baglanma basarılı ise bu metot calısacaktır.Burada dikkat edilmesi gereken wcf servisteki metodun geri dönüş tipine göre kod duzenlenmelidir.
Bizim metodun geriye dondugu tip GetDonusTipi idi.Burada da result.GeriDonusTipiResult kullanılmalıdır.
  • ServiceFailed(xhr)







Javascript ile WCF Servis e Bağlanma - 3

WCF Servisi IIS e Host Etme

  • Start ekranından Internet Information Services Manager programını tıklayarak acalım.
  • Gelen ekrandan Sites kısmından Add WebSite secenegini secelim ve yeni bir site olusturalım.

  • Add Website ekranında aşagıdakı ayarları gerçekleştirelim.

  • wcfservice adlı site olusturuldu.Şimdi Sites altından olusturdugumuz site mızı açalım.

  • Aşagıdakı ekran geliyorsa sitemizi başarılı bir şekilde yukledımız anlasılmaktadır.









Javascript ile WCF Servis e Bağlanma - 2

Bu yazımızda olusturdugumuz WCF servisimizi IIS e host etmeyi göreceğiz.

WCF Servis Publish


  • Wcf servis projemize sağ tıklayalım ve cıkan seceneklerden Publish i seçelim.

  • Publish için gerekli ayarları yapalım.

  • Select or import a publish profile kısmından <New > secenegini secelim.

  • Gelen ekranda daha sonra da kullanabilecegimiz wcf servisin publish ayarlarını tutan Profile name girelim.Biz örnek olarak wcfservis girelim.

  • Profile name i girdikten sonra OK butonuna tıklayalım ve gelen ekrandan aşagıdaki ayarları yapalım.


  • Target location kısmından projemizi nereye publish edeceğimizi seçiyoruz.

Burada C://inetpub//wwwroot altına bir klasor olsuturup bu klasoru secelım.



  • Yukarıdaki ayarlar yapıldıktan sonra  Next butonuna tıklayalım.

  • Yukarıdaki ayarlar yapıldıktan sonra  Next butonuna tıklayalım.

Eğer bir hata yapılmadıysa Publish succeeded olmalı.

  • C://inetpub/wwwroot altında olusturdugumuz klasor altında projemiz olusturulmustur.


Projemizi publish ettik sıra geldi projemizi IIS e host etmeye ...Bunuda bir sonraki yazımızda göreceğiz.












Javascript ile WCF Servis e Bağlanma - 1

WCF Service Project Açma

  • File - New - Project

  • Installed - Visual C# - WCF

  • Solution Explorer

Yeni bir WCF projesi açıldığında otomatik olarak Iservice1.cs ve Service1.svc dosyaları gelmektedir.Bu dosyalarda örnek kodlar içermektedir.Biz bu dosyaların adını Verial.svc ve IVerial.cs olarak değiştirelim.

  • IVerial.cs 

  • CompositeType Class


  • DonusTipi Class

Biz geri donuslerimiz bu classs uzerınden gerceklestırecegiz.

Eğer aşağıdaki gibi  birden fazla POST veya GET tipinde metot tanımlayacaksak,

IVerial.cs dosyamızı aşagıdaki ekran görüntüsü gibi düzenlememiz gerekecektir.

  • Verial.svc
  1. GeriDonusTipi Metodu Kod

  • GetDatas ve GetUser Metodları Kod

  • Web.config

Servisin calısabilmesi için gerekli web.config ayarları yapılmalıdır.Calısacak servisin adını burada belirtiyoruz.
Not:Çalısacak servisle ilgili bilgiler web.config dosyasında tanımlanmalıdır.















CRM 2011 - Cutom Ribbon Butona Tıklanıldığında Sayfa Açma ( Custom Page Open with Ribbon Button)

Customizations.xml dosyasında Actions tagının altında asagıdakı degısıklıklerı yapabilirsiniz.

 <RibbonDiffXml>  < /RibbonDiffXml> tagları arasında  <CommandDefinitions> tagı altında bulunan butonunnuza ait <CommandDefinition> ında <Actions> tagı içerisinde butonunuza tıklanıldıgında ne yapması gerekecegini belirleyebilirsiniz.

Ya bir javascript dosyası cagırırsınız bunun içersinde birseyler yaparsınız yada direkt url yazarak url deki sayfayı açarsınız.

Eğer sayfa açmak ve açılan sayfaya da query string ile veri göndermek istiyorsanız javascript dosyasını kullanabilirsiniz.

Aşagıda Close as Lost butonuna tıklanıldıgında javascript calıstırmasının ornegını bulabılırsınız.

<CommandDefinition Id="ISKO.SubGrid.opportunityproduct.MainTab.Actions.CloseAsLost.Command">
            <EnableRules/>
            <DisplayRules/>
              <Actions>
              <JavaScriptFunction FunctionName="CustomPageOpen"
                                                    Library=" $webresource: new_RibbonButton "/>
            </Actions>
          </CommandDefinition>

Eğer direkt olarak url verip o url adresini görüntülemek istiyorsak;
<CommandDefinitions>
    <CommandDefinition Id="Gokhan.account.Form.Star.Command">   
       <EnableRules />   
      <DisplayRules />  
       <Actions>    
             <Url Address="http://gkhnmnts.blogspot.com/" />    
        </Actions>   
     </CommandDefinition>
 </CommandDefinitions>

Javascript

Library nın adı :new_RibbonButton olsun.(Bu library i crm içerisinde customizations altında webresource bolumunden acabılırsınız.)

function CustomPageOpen(){
   var url="http://deneme:12/CustomPageOpen.aspx?degisken1=gokhan&degisken2=mentese";
 
   window.open(url,'','');
}



CRM 2011 - Not Varlığına Word Dosyası Ekleme (Attach Word Document to Annotation)

public static void AttachWordDocToNote(EntityReference account, IOrganizationService service)
        {
            // Open a file and read the contents into a byte array
            FileStream stream = File.OpenRead(@"C:\Lakshman\TDD.docx");
            byte[] byteData = new byte[stream.Length];
            stream.Read(byteData, 0, byteData.Length);
            stream.Close();

            // Encode the data using base64.
            string encodedData = System.Convert.ToBase64String(byteData);

            // Add the Note
            Annotation note = new Annotation();

            // Im going to add Note to Account entity
            note.ObjectId = account;
            note.Subject = "Note Added with attachment";

            // Set EncodedData to Document Body
            note.DocumentBody = encodedData;

            // Set the type of attachment
            note.MimeType = @"application\ms-word";
            note.NoteText = "Note Added with Document attached.";

            // Set the File Name
            note.FileName = "TDD.doc";
            service.Create(note);
        }

CRM 2011 - Not Varlığına Text Dosya Ekleme(Attach Text to Annotation)

public static void AttachTextToNote(EntityReference account, IOrganizationService service)
        {
            // Open a file and read the contents into a byte array
            FileStream stream = File.OpenRead(@"C:\Lakshman\sample.txt");
            byte[] byteData = new byte[stream.Length];
            stream.Read(byteData, 0, byteData.Length);
            stream.Close();

            // Encode the data using base64.
            string encodedData = System.Convert.ToBase64String(byteData);

            // Add the Note
            Annotation note = new Annotation();

            // Im going to add Note to Account entity
            note.ObjectId = account;
            note.Subject = "Note Added with attachment";

            // Set EncodedData to Document Body
            note.DocumentBody = encodedData;

            // Set the type of attachment
            note.MimeType = @"text/plain";
            note.NoteText = "Note Added with Text attached.";

            // Set the File Name
            note.FileName = "Sample.txt";
            service.Create(note);
        }

CRM 2011 - Not Varlığına PDF Dosyası Ekleme(Attach PDF To Annotation)

public static void AttachPDFToNote(EntityReference account, IOrganizationService service)
        {
            // Open a file and read the contents into a byte array
            FileStream stream = File.OpenRead(@"C:\Lakshman\TDD1.pdf");
            byte[] byteData = new byte[stream.Length];
            stream.Read(byteData, 0, byteData.Length);
            stream.Close();

            // Encode the data using base64.
            string encodedData = System.Convert.ToBase64String(byteData);

            // Add the Note
            Annotation note = new Annotation();

            // Im going to add Note to Account entity
            note.ObjectId = account;
            note.Subject = "Note Added with attachment";

            // Set EncodedData to Document Body
            note.DocumentBody = encodedData;

            // Set the type of attachment
            note.MimeType = @"application\pdf";
            note.NoteText = "Note Added with pdf attached.";

            // Set the File Name
            note.FileName = "TDD1.pdf";
            service.Create(note);
        }

CRM 2011 - Not Varlığına Excel Dosyası Ekleme (Attach Excel to Annotation)

public static void AttachExcelToNote(EntityReference account, IOrganizationService service)
        {
            // Open a file and read the contents into a byte array
            FileStream stream = File.OpenRead(@"C:\Lakshman\ActiveRecords.xls");
            byte[] byteData = new byte[stream.Length];
            stream.Read(byteData, 0, byteData.Length);
            stream.Close();

            // Encode the data using base64.
            string encodedData = System.Convert.ToBase64String(byteData);

            // Add the Note
            Annotation note = new Annotation();

            // Im going to add Note to Account entity
            note.ObjectId = account;
            note.Subject = "Note Added with attachment";

            // Set EncodedData to Document Body
            note.DocumentBody = encodedData;

            // Set the type of attachment
            note.MimeType = @"application\ms-excel";
            note.NoteText = "Note Added with Excel attached.";

            // Set the File Name
            note.FileName = "ActiveRecords.xls";
            service.Create(note);
        }

CRM 2011-Emaile Dosya Ekleme (Add Attachment To Email )

public static void AddAttachmentToEmail(EntityReference email, IOrganizationService service)
        {
            // Open a file and read the contents into a byte array
            FileStream stream = File.OpenRead(@"C:\Lakshman\sample.txt");
            byte[] byteData = new byte[stream.Length];
            stream.Read(byteData, 0, byteData.Length);
            stream.Close();

            // Encode the data using base64.
            string encodedData = System.Convert.ToBase64String(byteData);
         
            // Add attachment
            ActivityMimeAttachment attachment = new ActivityMimeAttachment();

            // Set the body
            attachment.Body = encodedData;

            // Set the attachment Type
            attachment.MimeType = @"text/plain";
            attachment.FileName = "Sample.txt";

            // Set the regarding object. In my case it is Email entity
            attachment.ObjectId = email;
            attachment.ObjectTypeCode = email.LogicalName;

            // Create the attachment
            service.Create(attachment);
        }

CRM 2011-Not Varlığına Önceden Eklenmiş Dosyayı Silme (Delete Attachment From Annotation)

public static void DeleteAttachmentFromNote(Guid noteId, IOrganizationService service)
        {
            Annotation note = new Annotation();
            note.Id = noteId;

            // Set the Documentbody and other fields to null to remove the attachment
            note.DocumentBody = null;

            note.FileName = null;
            note.IsDocument = false;
            service.Update(note);
        }

CRM 2011 - EXPORT RIBBON XML

\\sdk\samplecode\cs\client\ribbon\exportribbonxml\exportedribbonxml\

Sdk içerisnde  exportribbonxml dosyası altında ExportRibbonXml.exe dosyasını calıstırın.
  Eğer exe dosyası olusmamıssa exportribbonxml solution ını visual studio da açıp ,projeyi Build etmemiz yeterli olacaktır.

ExportRibbonxml Solution ı calıstır.




ExportRibbonXml solution ına sag tıklayıp Build diyelim.


Daha sonra ExportedRibbonXml.exe dosyasını calıstıralım.


Ekrana asagıdakı ekran gelecektir.


  • Enter a CRM server name and port [crm.dynamics.com]:

  CRM server name i girip entere basalım.(80 portu dısında kurulu ise port numarasınıda girmemiz gerekir.)

 Eger  <0>Add New Server Configuration <Maximum number up to 9>
           <1>Server serverip,Org:xx,USer:domain\user
yukarıdakı gibi bir satır gelirse 0(sıfır) girelim ve enter a basalım.
  • Is this server configured for Secure Socket Layer<https> <y/n> [n]:
  Server ın durumuna göre y veya n tusuna basalım.Enter ı tıklayalım.

  • Enter domain\username:

  Domain ve kullanıcı adımızı girelim.
  agcyazilim\gokhanm
  • Password 
  Kullanıcı şifremizi girelim .Enter a bastıktan sonra entity xml dosyaları debug klasoru altında ExportRibbonXml dosyası altına olusacaktır.




CRM 2011 Javascript -Var Olan Formu Açma

Crm 2011'de javascript ile var olan bir kaydı yeni bir pencede görüntülemek için karmaşık Url adresleri arasında açmak istenilen kayıtın Guid bilgisi yerleştirilerek window.Open();  js function'ı ile açabiliyoruz fakat crm içindeki javascript kütüphanesini kullanarak aşağıdaki gibi istediğiniz kayıtları parametrik olarak açabilirsiniz .

// Açıklama : Parametre gelen varlık Id'sine , Parametre gelen Logical Adına göre yeni crm formu açar
function FormAc(EntityId, LogicalName) {
    try {

        if (EntityId != null && LogicalName != null) {
            Xrm.Utility.openEntityForm(LogicalName, EntityId);
        }

    } catch (e) {
        alert('Form Aç İşleminde Hata Oluştu');
    }
}

Gerekli sistemler -CRM 2011 Roll up 8

CRM 2011 - Unable to cast object of type Microsoft.Xrm.Sdk.Entity

 Plug-in
Servise baglantımızı yukarıdakı koddaki gibi yapıyorsak kodumuzu asagıdkı gibi güncellememiz gerekmektedir.

 serviceFactory.GetType().GetProperty("ProxyTypesAssembly").SetValue(serviceFactory, typeof(XrmServiceContext).Assembly, null);





IOrganizaton service kullanarak baglantımızı gerceklestırıyorsak ;

 _serviceProxy.EnableProxyTypes(); bolumunu koda eklememız yeterlı olacaktır.

 public static IOrganizationService GetCrmService()
        {
            try
            {
                IOrganizationService _crmService = null;
                OrganizationServiceProxy _serviceProxy = null;
                ClientCredentials _objCredentials = null;
                string _strCrmURL = string.Empty;
                _objCredentials = new ClientCredentials();
                _objCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

                _strCrmURL ="http://deneme:port/organizationname/XRMServices/2011/Organization.svc"

                    Uri organizationUri = new Uri(_strCrmURL);
                    Uri homeRealmUri = null;
                    _serviceProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, _objCredentials, null);

                    _serviceProxy.EnableProxyTypes();
                    _crmService = (IOrganizationService)_serviceProxy;

                return _crmService;
        }

CRM 2011 - Plugin Kod Yazımı


  • Asagıda kod sayfasının gorunumu vardır.Kapalı kısımlara sayfanın devamında ulasabılırsınız.

  • Plugin Tanımlamaları

  • Parameters and GetTargetEntityId

  • MainCode