cub-e.net

just coding...

Dynamics CRM'e saatinizden erisin :)

Akilli saatler de akilli telefonlar kadar hizli bir sekilde hayatimiza girdi. Su anda sektördeki buyuk firmalar ve hatta kickstarter grisimleri bile akilli saat projeleriyle karsimiza cikmakta. Ben de bir Pebble kullanicisiyim ve ozellikle 1 hafta dayanan pili ile diğer akilli saatlerden ayrilmakta.

Bugun Dynamics CRM ile akilli saatlerin nasil birleştirileceğini inceleyeceğiz. Akilli saatler genel itibariyle telefon üzerindeki notificationlari gösterebilme yeteneğine sahipler. Telefon üzerinde notification oluşturmak için ben bugun Pushover sistemini kullanacagim.

Soyle bir senaryomuz olsun; sistem üzerinde oluşturduğumuz bir is akisi ile CRM uzerinde servis talepleri oluştuğu anda push notification isimli bir entity üzerinde bir kayit oluşturuyoruz. Bu kayit varsayilanda gönderilmeyi bekliyor durumunda olacak. Uygulamamiz bu kayitlari okuyacak ve Push Notification’in servisine gönderecek. Boylece notification telefonumuza orada da saatimize gelecek.

Sizin oluşturduğunuz sistemlerde farkli is akislari ile yine push notification isimli entity’e kayit oluşturabilir böylece degisik senaryolar içinde bu sistemi kullanabilirsiniz. Ornegin sistem üzerinde değeri 50.000 tl üzerinde bir firsat oluşturulduğunda bu sistemi tetikleyebilirsiniz.

Sisteme uye olmak için telefonunuza Pushover uygulamasini indirmeniz gerekmekte. Daha sonrasinda ise https://pushover.net sitesinden kendinize bir hesap oluşturuyorsunuz.

Bu sistem üzerinden notification gönderebilmek için 2 bilgiye ihtiyamiz bulunmakta

1.       Sizin User Key’iniz. Her bir kullanicinin bir key’i var sistemde.



2.       Create New Application linkine tıklayarak olusturacaginiz Application Key’i.



Bu sekilde elde ettiğimiz key’ler ile sistem üzerinden notification gönderebilir hale geldik. Bu bilgilerin CRM’de saklanacagi en uygun yer bence Kullanici Kartiydi ve bende bu nedenle kullanici nesnesi üzerine PushOverToken ve PushOverUserKey isimli iki alan actim ve bilgileri buraya girdim.



Daha sonra Push Notification isimli aktivite turunde bir entity oluşturdum ve asagidaki alanlari actim. Buradaki önemli nokta böyle bir entity’i nasil kullanacagimiz. Yazinin basinda da belirttiğim gibi cok farkli senaryolar için bu nesne üzerinde kayitlar oluşturabilirsiniz.


Olusturdugum alanlari incelersek;

Subject : Ekran görüntülenecek baslik bilgisi

To : Mesajlarin kimlere gönderileceği bilgisi

Regarding : Kaydin bagli bulunduğu ana entity. Burada bu bilgiyi telefon üzerinden kullanici bu kayda ulaşmak isterse tek tiklama ile bu bilgiye ulassin diye tutuyorum.

Status Reason : Varsayilanda “Waiting To Send” yani bekliyor konumunda oluşturuluyor kayitlar. Gondeme işlemi tamamlandiktan sonra bu alani “Sent” yani gönderildi olarak değiştiriyorum.

Description : Detayli bilgi vermek için bu alani kullaniyorum.

 

static string URL = "https://xxx.contoso.com";

        private static IOrganizationService ServiseBaglan()

        {

            try

            {

                Uri organizationUri = new Uri(String.Format("{0}/XRMServices/2011/Organization.svc", URL));

                ClientCredentials clientcred = new ClientCredentials();

                clientcred.UserName.UserName = "kullanici adi";

                clientcred.UserName.Password = "sifre";

                OrganizationServiceProxy _serviceproxy = new OrganizationServiceProxy(organizationUri, null, clientcred, null);

                IOrganizationService _service = (IOrganizationService)_serviceproxy;

                return _service; ;

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

        }

 

        private static void changeStatus(IOrganizationService service, Guid Id)

        {

            // Create the Request Object

            SetStateRequest state = new SetStateRequest();

 

            // Set the Request Object's Properties

            state.State = new OptionSetValue(0);

            state.Status = new OptionSetValue(100000000);

 

            // Point the Request to the case whose state is being changed

            state.EntityMoniker = new EntityReference("new_pushnotification", Id);

 

            // Execute the Request

            SetStateResponse stateSet = (SetStateResponse)service.Execute(state);

        }

        static void Main(string[] args)

        {

            try

            {

                string fetchXml = @"<fetch mapping='logical'>

                                 <entity name='new_pushnotification'>

                                    <attribute name='activityid' />

                                    <attribute name='subject' />

                                    <attribute name='description' /> 

                                     <filter type='and'>

                                        <condition attribute='statuscode' operator='eq' value='1'/>

                                     </filter>

                                    <link-entity name='activityparty' from='activityid' to='activityid' alias='ac'>

                                        <link-entity name='systemuser' from='systemuserid' to='partyid' alias='ad'>

                                            <attribute name='new_pushovertoken' />

                                            <attribute name='new_pushoveruserkey' />

                                        </link-entity>

                                    </link-entity>

                                 </entity>

                             </fetch>";

 

                IOrganizationService service = ServiseBaglan();

               

                if (service != null)

                {

                    Console.WriteLine("Servise Baglanildi");

 

                    EntityCollection entCollection = (EntityCollection)service.RetrieveMultiple(new FetchExpression(fetchXml));

                    foreach (var item in entCollection.Entities)

                    {

                        Console.WriteLine("Aktarilacak kayitlar bulundu");

 

                        if (item.Contains("ad.new_pushovertoken") && item.Contains("ad.new_pushoveruserkey") && item.Contains("subject") && item.Contains("description"))

                        {

                            string PushOverToken = ((AliasedValue)item["ad.new_pushovertoken"]).Value.ToString();

                            string PushOverUserKey = ((AliasedValue)item["ad.new_pushoveruserkey"]).Value.ToString();

                            string subject = item["subject"].ToString();

                            string description = item["description"].ToString();

                            Guid activityid = new Guid(item["activityid"].ToString());

                            string url = String.Format("{0}/main.aspx?etn=new_pushnotification&pagetype=entityrecord&id=%7B{1}%7D", URL, activityid.ToString());

 

                            dynamic Parameters = new NameValueCollection() {

                        {

                            "token",

                            PushOverToken

                        },

                        {

                            "user",

                            PushOverUserKey

                        },

                        {

                            "message",

                            description

                        },

                        {

                            "url",

                            url

                        },

                        {

                            "url_title",

                            "Open Record"

                        },

                        {

                            "title",

                            subject

                        }

                        };

 

                            WebClient client = new WebClient();

                            Console.WriteLine("Kayitlar gonderiliyor");

                            client.UploadValues("https://api.pushover.net/1/messages.json", Parameters);

                            Console.WriteLine("CRM guncelleniyor");

                            changeStatus(service, activityid);

                        }

                    }

                }

 

                Console.WriteLine("Tamamlandi");

                Console.ReadLine();

}

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

                return null;

            }

        }

 

Kodda da görebileceğiniz uzere Ilk olarak CRM Servisine baglaniyoruz. Ben IFD enabled bir organizasyon kullandigim için benim servis baglantim bu sekilde Office 365 ya da on premise sistemlerde farkli sekillerde CRM servise bağlanma yöntemleri mevcut. Bu konuda sorun yasarsaniz benimle iletişime geçebilirsiniz.

 

Daha sonra ise fetchXML sorgumuz ile sistem üzerinde bekleyen notification’larin bilgisini aliyoruz ama bu işlemi yaparken ayni zamanda systemuser nesnesine de dallanarak ihtiyacim olan pushovertoken ve pushoveruserkey bilgilerini de aliyorum. Boylece her bir kullanici için teker teker veri sorgulayarak servisi meşgul etmiyorum.

 

@"<fetch mapping='logical'>

                                 <entity name='new_pushnotification'>

                                    <attribute name='activityid' />

                                    <attribute name='subject' />

                                    <attribute name='description' /> 

                                     <filter type='and'>

                                        <condition attribute='statuscode' operator='eq' value='1'/>

                                     </filter>

                                    <link-entity name='activityparty' from='activityid' to='activityid' alias='ac'>

                                        <link-entity name='systemuser' from='systemuserid' to='partyid' alias='ad'>

                                            <attribute name='new_pushovertoken' />

                                            <attribute name='new_pushoveruserkey' />

                                        </link-entity>

                                    </link-entity>

                                 </entity>

                             </fetch>";

 

 

Verileri aldiktan sonra ise bunlari istediğim gibi düzenleyip string veriler haline getiriyorum. Sonunda ise asagidaki bolum ile servise Push Notification servisine gönderiyorum;

 

                            dynamic Parameters = new NameValueCollection() {

                        {

                            "token",

                            PushOverToken

                        },

                        {

                            "user",

                            PushOverUserKey

                        },

                        {

                            "message",

                            description

                        },

                        {

                            "url",

                            url

                        },

                        {

                            "url_title",

                            "Open Record"

                        },

                        {

                            "title",

                            subject

                        }

                        };

 

                            WebClient client = new WebClient();

                            Console.WriteLine("Kayitlar gonderiliyor");

                            client.UploadValues("https://api.pushover.net/1/messages.json", Parameters);

                            Console.WriteLine("CRM guncelleniyor");

                            changeStatus(service, activityid);

 

 

Burada dikkat edilmesi gerekn nokta URL kisminda gerçekten sistemdeki nesnenin acilacagi URL’i buraya getiriyorum ki telefondan kullanici direkt kayda ulassin.

Gonderme işleminden sonra ise kayitlari gönderildi diye güncelliyorum ki tekrar tekrar ayni kayitlari göndermeyelim.

 

Sonuc olarak once telefonda sonra ise saatimde gelen verilere ulaşıyorum :)

PushOver'in ana ekraninda gelen notification.




Notification'i acinca detaylara ulasiyorum. 



Open Record isimli linke tiklayinca da direkt ilgili kayda ulasiyorum.



Ve sonuc Pebble ekraninda CRM'den gelen Notification'i goruyorum :) iste mutlu son...

Microsoft Dynamics CRM Online 2015 Update 1

Microsoft Dynamics CRM Online 2015 Update 1Microsoft Dynamics Marketing 2015 Update 1,  Microsoft Social Engagement 2015 Update 1 (formerly Microsoft Social Listening)and Parature, from Microsoft 15.2.

Updates are in the works for 2015! Read on for changes coming soon.

On this page:

 New features

 Technical Changes

 Release Timing

 How to get the updates

 How to prepare for updates

 Pricing and licensing

 How to stay informed

 Support

New features

These are just a few of the highlights coming:

Dynamics CRM Online

  • Improved navigation and user interface options: Increase adoption with improved user experience, including new UI themes and faster navigation to records.

  • Immersive Excel experience: Now you can use Microsoft Excel Online to do quick analysis right from CRM Online.

  • Excel export completely redesigned. With a single click, you can export to Excel anywhere, including the desktop version of Excel (2007 and later), Excel Online, and other Excel clients.

  • Embedded OneNote: Capture photos, take voice notes, do free-form drawings, and more. Everything is automatically linked with the record in CRM Online.

  • Track email by folder: Folder tracking provides a new and intuitive way to track incoming email activities on any device that supports Exchange. Now you can track your email directly from virtually any device.

  • Social sales: Define rules for creating or updating CRM records from incoming activities. For example, you can now generate leads or opportunities from social posts.

  • Mobile sales: With the new CRM for Phones app, enjoy the same great mobile experience on your phone as you do on your tablet. Nurture your leads and opportunities through the sales process with the new intuitive interface.

  • Integrated Parature knowledge base: Empower agents with knowledge base integrated into daily service interactions, including the ability to both search and receive automated suggestions.

  • Create Office Groups: Collaborate with team members who don't have access to CRM Online with Office Groups. For example, create a group for your sales team, invite other Office 365 users to join the group, and then share documents, email, OneNote notes, and more.

For more details, see What's new for administrators and customizers and What's New in Microsoft Dynamics CRM.

Dynamics Marketing

  • Separation of service bus namespace for SDK and Connector: You can now configure Microsoft Dynamics Marketing SDK and Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM with different service bus namespaces.

  • Microsoft-owned queues for CRM Online integration: Microsoft Dynamics Marketing now provides managed service buses for CRM Online integration. You don't need to have a Microsoft Azure account and service bus namespace for CRM Online integration.

  • Double opt-in for email marketing: Send an opt-in link to incoming contacts to verify them. Double opt-in helps you to maintain lead quality and remain compliant with regional regulations.

  • Duplicate detection in email messages: Configure your instance so that email messages are delivered only once per email inbox and avoid sending multiple emails to duplicate contact records.

  • CRM integration enhancements: Set up the Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM with ease. Avoid the hassle of creating a Microsoft Azure namespace and simply leverage the Microsoft managed service bus for integrations with Microsoft Dynamics CRM Online.

  • Assets & media improvements: Tag your assets using multiple keywords and use the improved keyword based search to filter them.

  • Enhancements in analytics using Power BI: Build up your analytics capabilities with the all-new, role-specific Microsoft Dynamics Marketing Connector for Microsoft Dynamics CRM dashboard widgets. Utilize a range of newly exposed OData feeds related to budgeting, lead management, and settings.

For more information about the update, see What's New in Microsoft Dynamics Marketing.

Social Engagement

  • User Interface: Completely redesigned UI throughout the application for an even more intuitive and simplified user experience with visual contextual filtering capabilities.

  • Social Center: User-specific configurable and shareable streams display social posts as they come in and allow you to proactively engage with both your fans and critics from Facebook and Twitter.

  • Social Analytics: Richer data with new visualizations, such as cloud tags, top hashtags, and geo-location for greater insights.

  • Language & Geographic Availability:  Microsoft Social Engagement is available in 110 markets and 19 languages.

Parature

  • Omni-portal: Enterprise organizations with a single public-facing brand presence can now easily deliver online support and self-service knowledge for a variety of departments or product lines, all while using a single service desk to consistently manage the brand's customer support.

  • Enhanced knowledge search capabilities: Advanced search capabilities in the Parature knowledge base deliver more relevant results, with added search filters to search for knowledge based on highest feedback ratings, document type, date added or updated, etc.

  • Multi-lingual service and globalization:  Enable assisted service in local languages with routing based on customer language preference and real-time chat translation.  Provide translations for Knowledgebase articles and portal strings to empower customers with self-service in local languages.

  • Portal specific metrics for reports: Create more accurate reports with metrics provided for each Portal Alias. Capture Key Point Indicators to help identify the efficacy of each Portal Alias.

For more information, download the Parature Spring '15 Release Preview Guide.

Technical Changes

From time to time, we must add and remove items from our supported configurations list to keep current with technology and allow us to provide you the best product possible. Stay tuned for important information about any changes to supported configurations.

Release Timing

The upcoming releases for Dynamics CRM Online, Dynamics Marketing, Social Engagement, and Parature will be available in the second quarter of 2015. Please visit this page periodically to get the most current information about the upcoming versions.

How to get the updates

Dynamics CRM Online

Dynamics Marketing

  • The listed administrator within your organization will be notified by email about the specific timing of your update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

  • Should this scheduled date not be suitable for your organization, you will have an opportunity to reschedule the date through a service request.

  • Keep looking for emails with more specific instructions for updating Microsoft Dynamics Marketing.

Social Engagement

  • The listed administrator within your organization will be notified by email about the specific timing of your update to the next version. These updates will happen automatically and Microsoft will send several reminder communications, with the details, as the scheduled update approaches.  

Parature

  • The listed administrator within your organization will be notified by email about the specific timing of the update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

How to prepare for updates

Test the updates in a sandbox environment. We always advise that you preview and test new versions in a non-production environment before you update your live production instances. This will give you the opportunity to verify the compatibility of any customizations that you may have made, or any third-party customizations that are installed. Additionally, testing will also allow you to assess the impact of the upcoming changes on your organization and your users. If you haven't already done so, we strongly advise obtaining a non-production instance.

Browser support for Parature. Parature supports all major browsers and their latest versions, including Internet Explorer, Google Chrome, and Mozilla Firefox. To make sure that you can take advantage of all the enhancements to the Service Desk and Support Portal, make sure that you update your browser to the latest version.

Upgrading to a new version of Dynamics Marketing. We have designed the upgrade process to be as quick, easy, and trouble-free as possible. When there are major version updates, you have some flexibility in choosing when your Microsoft Dynamics Marketing instance should be updated and avoid unexpected feature changes, unavailability, or downtime.

CRM Tablet Uygulamasini Calistirmak

a) Dynamics CRM’I kurdurktan sonra ilgili icon’a basip calistiriyoruz.

 

1.     Let's get set up! ekranindaki kutucuga Dynamics CRM’e girerken kullandiginiz adresi yazmaniz gerekmekte.

 

2.     Sag alt kosedeki ok seklindeki dugmeye tiklanizda siradaki ekran gelecektir.

b)    Kullanici adi ve sifre bilgilerinizi bu ekrana girdikten sonra “Sign In – Oturum Ac” dugmesine basiniz.

1.     Kullanici Adi

2.     Sifre.

3.     Oturumun surekli acik tutulmasi icin isaretleyiniz

4.     Sign in – Oturum Ac dugmesine basiniz.

c)     c) Bu bolumleri gectikten sonra asagidaki ekran gelecek. Bu ekranda baglanti hiziniza bagli olarak bir sure kalabilirsiniz.

d)      d) Iste bu ekrandan sonra Dynamics CRM tablet versiyonu acilacak ve kullanima hazir olacaktir.

Dynamics CRM Tablet Uygulama Magazalari

Dynamics CRM Tablet uygulamasini kurmak icin elimizdeki cihaz ya da cihazlarin uygulama magazalarina gitmemiz gerekmekte.

Windows 8 : http://apps.microsoft.com/windows/en-us/app/93772212-7b72-4aee-bc4e-b1adb7712ebe



Windows 8.1 : http://apps.microsoft.com/windows/en-us/app/dec52fd4-dbc0-41b1-9cdd-cdc070051918



iPad : https://itunes.apple.com/us/app/microsoft-dynamics-crm/id678800460?mt=8


Android Tablet : https://play.google.com/store/apps/details?id=com.microsoft.crm.crmtablet

Dynamics CRM IFD (Windows server 2012 R2 ADFS 3.0) ile CRM for Outlook Baglanma Problemi

Eger sizde benim gibi Dynamics CRM kurulumunuz ile ADFS 3.0'i ayni server uzerinde kullaniyorsaniz Outlook Client Configuration Wizard ile yapilandirma sirasinda authentication probleminden dolayi bir hata alabilirsiniz.
Log dosyasini incelediginizde asagidaki gib bir hata mesaji olacaktir.

"Error connecting to URL: https://org.contoso.com/XRMServices/2011/Discovery.svc Exception: Microsoft.Crm.CrmException: Authentication failed"

Bu hata ile ilgili nette buldugun bircok cozeum yolunu denesem de sonuc vermedi. Bende Fiddler ile arka tarafatki iletisimde neler oldugunu izlemeye karar verdim. Fiddler ile gordum ki Configuration Wizard'in gitmeye calistigi bir adreste 503 hatasi almaktayim, Adres ise su formattaydi: 

"https://adfs.contoso.com/adfs/services/trust/mex"

Evet sorun ADFS'deydi. CRM web arabiriminde sorunsuzca gorevini yerine getiren ADFS Outlook Client'da ise hataya neden olmaktaydi. Bunun uzerine hemen ADFS Servera gittim ve arastirmalara basladim.
ADFS Serverda Event Viewer'da  sorunun kaynagini yakaladim:

Event ID:      102
Description:
There was an error in enabling endpoints of Federation Service. Fix configuration errors using PowerShell cmdlets and restart the Federation Service. 
 
Additional Data 
Exception details: 
System.ServiceModel.AddressAlreadyInUseException: There is already a listener on IP endpoint 0.0.0.0:808. This could happen if there is another application already listening on this endpoint or if you have multiple service endpoints in your service host with the same IP endpoint but with incompatible binding configurations. ---> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted
 

Yani ADFS Server 808 nolu bir portu kullanmaktaydi. 808 Portu ayni zamanda Asynchronous Service tarafinda da kullanilmakta.
ProtocolPortDescriptionExplanation

TCP

808

CRM server role communication

The Asynchronous Service and Web Application Server services communicate to the Sandbox Processing Service through this channel. The default port is 808, but can be changed in the Windows registry by adding the DWORD registry value TcpPort in the key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\.

Yeri gelmisken bahsedeyim CRM tarafindan kullanilan diger portalarin listesi de soyle:
ProtocolPortDescriptionExplanation

TCP

80

HTTP

Default web application port. This port may be different as it can be changed during Microsoft Dynamics CRM Server Setup. For new websites, the default port number is 5555.

TCP

135

MSRPC

RPC endpoint resolution.

TCP

139

NETBIOS-SSN

NETBIOS session service.

TCP

443

HTTPS

Default secure HTTP port. The port number may differ from the default port. This secure network transport must be manually configured. Although this port is not required to run Microsoft Dynamics CRM, we strongly recommend it. For information about how to configure HTTPS for CRM, see “Make Microsoft Dynamics CRM client-to-server network communications more secure” in Post-installation and configuration guidelines for Microsoft Dynamics CRM in the Installing Guide.

TCP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

123

NTP

Network Time Protocol.

UDP

137

NETBIOS-NS

NETBIOS name service.

UDP

138

NETBIOS-dgm

NETBIOS datagram service.

UDP

445

Microsoft-DS

Active Directory service required for Active Directory access and authentication.

UDP

1025

Blackjack

DCOM, used as an RPC listener.

Listenin tamamina bu adresten ulasabilirsiniz. https://technet.microsoft.com/en-us/library/hh699823.aspx

Sorunumuza geri donersek 808 nolu portu degistirmem gerekiyordu. Iste asagidaki komut da tam bu ise yariyor:
Set-ADFSProperties –nettcpport 809

ADFS portunu 809 olarak degistirdim ve servisi yeniden baslattim. 
Configuration Wizard'a geri dondum ve tekrar denedim sorun cozulmustu. Zaten Fiddler'da da ilgili bolumu sorunsuzca gectigini gordum. 

Umarim sizlere de faydali olur.

*************************
21/05/2015 tarihinde ek:
Yukaridaki durum update rollup 0.1 yukledikten sonra yine devam etti. Konuyu arastirinca bu sefer de 49443 portunda ayni sorunun oldugunu gordum. Konuyu inceleyince bu portu da ADFS TlsClientPort oldugunu ogrendim.
Bu portu da yukaridaki konutla baska bir porta yonlendirdim.
Set-ADFSProperties -tlsclientport 42223

firewall ve diger ayarlari yaptiktan sonra ADFS Servisi yeniden baslattim ve hersey yoluna girdi. 

Update Rollup 1 (UR1) for Microsoft Dynamics CRM 2015

Update Rollup 1 (UR1) for Microsoft Dynamics CRM 2015 is planned to solve the following 187 issues:

  • Appointment tile only shows the end time of appointment in the CRM for Tablets.
  • Cannot use backspace key to delete value from fields with iOS7 in Safari on iPad.
  • 1: N lookup fields are not populated when using mobile devices.
  • A JavaScript error occurs switching between forms for Facilities/Equipment.
  • A script error occurs when closing a DateTime control in CRM for Tablets.
  • Using the OrgDbOrgSetting tool to set the boolean value SkipGettingRecordCountForPaging to True causes paging to be removed from subgrids.
  • After upgrading to CRM 2015 the fields DeliveryPriorityCode and DeliveryLastAttemptedOn do not appear on all Out of Box Activity Entities.
  • Business Process Flows are not displayed on the Account entity for the System Administrator role.
  • Business Rules do not fire when comparing a decimal field value equal to 0.
  • Cannot Save or Delete Connections when Team Templates are removed.
  • Charts containing option sets ignore the order that is specified.
  • Command bar Enable rules do not work when detecting if an attribute exists in the CRM Client for Outlook.
  • Dependency calculation error occurs when importing a queue item view with an attribute from a custom relationship.
  • The Activities tab in the Social Pane will not display Email Activities containing an invalid HTML format.
  • Ellipses are disappearing when the command bar labels have long names.
  • Extra white space appears between form controls when scrolling in Safari on iOS7.
  • When assigning Team membership via a custom plugin, users receive an error message when attempting to open records owned by the assigned Team.
  • Executing a ApplyRoutingRuleRequest message in code will execute without error but the rule is not applied.
  • Removing or inserting line breaks in response to an HTML email using the web client will cause email font to be lost in some parts of the email body.
  • Incorrect messaging for Marketing Campaigns when using Russian language pack.
  • Incorrect time is displayed when using custom time formats on Activity entities.
  • Loading a child record from a parent can cause parent activities to load on child activity wall.
  • Merging records with same Team as the owner creates unnecessary POA records.
  • CRM for Tablets will not configure for some time zones.
  • On Quote, Order, and Invoice the associated entity navigation bar is not updating with the correct navigation tiles.
  • Outlook crashes when viewing another users items in the calendar, contacts folder, or task folder.
  • Outlook hangs after startup when CRM for Outlook is configured.
  • Parent Account is not populated for Phone Call activites if creating the activity from a subgrid on the Account entity Information form.
  • Quick Find does not work on Articles when added to a Dashboard as a subgrid.
  • Quick View form shows incorrect status reason values when displaying the data on a different entity form.
  • Rendering issues with SharePoint integration when using managed metadata columns in SharePoint.
  • A script error occurs when deactivating a CRM record after viewing the Documents area for SharePoint integration.
  • Resizing a chart pane that contains multiple X Axis categories, one of which is a Boolean field, causes category values to be removed.
  • Resolved Case settings in Case Creation rules are not processing as expected.
  • Resources tile is not present under related navigation for the Site entity.
  • Using the Save and Close button when creating multiple Appointments on the Sales Calendar causes an error to occur.
  • Scroll bar does not appear on Edit Properties and View Properties dialog windows for SharePoint documents.
  • Scrolling appears jittery and does not react to touch in Safari on iOS7 on iPad3.
  • Sent Emails are not promoted to CRM when using Track all Email messages and Server Side Sync.
  • Using Xrm.Page.ui.setFormNotification to set a notification does not work when triggered from a Quick Create form.
  • Solution import fails with error that the LocalizedLabel is required by another solution.
  • Error messages generated when working with Appointment activities appear in a language different than the default selected for the CRM organization.
  • Related navigation tiles are missing from entity forms.
  • Tiles for sub-menu items are missing from horizontal navigation bars.
  • Updating an email address value for a recipient that contains multiple email addresses in CRM causes replies to a previously received email to be sent to the newly updated email address instead of the original email address.
  • The DisplayRules for command bar buttons are not reevaluated after a case record has been reassigned.
  • Regarding information is missing for email activities when going offline.
  • The Reading Pane for Phone Call records are not displayed in CRM for Outlook.
  • The sample currency format that is displayed in the Personal Settings Format tab is displayed incorrectly.
  • Users with Administrative Access Mode are unable to import a solution containing Reports.
  • Attempting to update a Connection entity record that does not have a Connection Role defined results in an error.
  • Asynchronous Plugins that generate a COM Exception enter a failed state instead of being temporarily suspended and cannot be retried.
  • Custom web resources inserted in an iframe on an entity form are not rendered correctly when viewed in the Safari browser on iPad.
  • When adding data to the CRM Fields form in the Microsoft Dynamics CRM 2013 Client for Outlook, that data is not being persisted to the record if the user does not click away from the field to lose focus.
  • When Creating Custom System Views, users may notice that if they leave the Primary Name Attribute on the view, it may not display in the CRM for Outlook Client.
  • Exporting a solutiong containing an SLA record will add a new SLA workflow process to the customizations.xml file each time the solution is exported.
  • Datetime fields with a format setting of Date Only will continue to display time values when viewed in CRM for Tablets.
  • Attempting to filter a lookup using a 1:N relationship results in an error when clicking on the lookup icon if the related field is not already populated.
  • When inserting a template into the body of an email using Internet Explorer, the template is inserted at the top of the email body instead of at the expected cursor location.
  • Trace logging for the CRM Unzip Service refers to the SharePoint Async Service when it should instead mention the CRM Unzip Service.
  • Poor performance is observed when attempting to use the Find Available Times feature for Resource Scheduling for the first time.
  • Microsoft Dynamics CRM SDK calls will not work as expected if the Security Token Service used for Claims Based Authentication does not produce an Asymetric Security Token response.
  • You are unable to create records for custom Activity entities when the RegardingObjectId is set.
  • Clicking the dropdown arrow to the right of the Activities menu does not display Recently Viewed Items.
  • An error occurs when creating a new E-mail template: "An error has occurred, please return to the home page and try again."
  • Email fields do not resolve properly even after manually resolving to a Contact.
  • Phone Call activity created from a contact record does not auto populate the field Call To.
  • An error occurs when creating a second Appointment record from the Dashboard Navigation: "Try again."
  • When an .exe file is attached to a Note in a Case, it throws an error and the Note is not saved.
  • Script error occurs when clicking front and back arrows in the Help dialog.
  • Duplicate sequence numbers occur for Opportunity, Quote, Order and Invoice details.
  • A script error occurs when opening an entity on an Android 4.4 device.
  • Forms are not refreshed when assigning Accounts to other users.
  • ClientGlobalContext.js.aspx changes causing Silverlight controls to fail.
  • Tabbing does not work in Safari 8 on OS X 10.10.
  • Using the Stage.getCategory() function for the Process Flow API does not work properly.
  • Branch fields are not being reset when changing stage in the Process Flow in Safari 8 on OS X 10.10.
  • A blank page is added when exporting a report created from Report Wizard.
  • A script error occurs when removing all branches from a branching Business Process Flow.
  • An error occurs when trying to set dynamic fields in a workflow for the Account entity.
  • Saving a Business Process Flow without providing details in the "value" field throws an Invalid Argument error.
  • Opening an activated Business Process Flow and closing without making changes asks if user is sure they want to leave the page.
  • Business Rules do not execute after meeting conditions in CRM for Tablets.
  • Process Rules are not triggered when setting custom Two Option field with an existing field.
  • Required fields in CRM for Tablets are set and uneditable for Opportunities.
  • Stages in Business Process Flows are missing when using nested branches.
  • Going backwards in a Business Process Flow marks all items as Complete instead of clearing them.
  • Clicking on the Audit History tab of a workflow causes an "Unexpected Error" to occur.
  • Script errors occur when using Business Process Flow APIs such as setActiveStage.
  • Unable to import a managed solution containing Business Process Flows from Microsoft Dynamics CRM 2013.
  • Marketplace solutions links do not function.
  • Unable to create a Competitor and an error occurs when saving the Competitor form.
  • A script error occurs when closing a record from Bulk Deletion window.
  • Clicking Save and Close in the Hierarchy Security Configuration window without any changes throw an "Invalid Argument" error.
  • Daylight Savings Time changes for Chile and Mexico.
  • Hierarchy Security Configuration window does not appear in Chrome.
  • When adding users through Multiple Users window, it does not find valid Active Directory users.
  • Removing a security role from a team takes a very long time.
  • Performance on the Product entity has decreased.
  • Hierarchy rules are broken when a User's Business Unit is changed that is part of a user-manager hierarchy.
  • Error deleting Connections when using Azure plugins or Workflows.
  • Solution Imports fail when Workflows containing dynamic URLs are included.
  • Complex calculated fields on related entities cannot be defined.
  • Activity Feeds are not working in an Internet Facing Deployment upgraded to Microsoft Dynamics CRM 2015.
  • CRM for Outlook Pivot Table and dynamic export to Excel options fail to export.
  • Incorrect text is displayed when clicking on Add Condition for Calculated fields with the System Customizer role.
  • Unable to connect to an organization with more than 1000 users.
  • Event campaigns with "Publish to Web" checked are not being listed in the Event Calendar page.
  • When you have a plugin registered on Create of a Contact, the Contact fails to be created.
  • Actual revenue field, when edited with alphanumeric values, is getting reset with the previous numeric value present when using the CRM for Tablets.
  • Blank space displayed when scrolling through the associated records on Android 4.4 devices.
  • Script error occurs when a user navigates to an entity grid from a record after reconnecting a CRM for Tablets device to a network.
  • Unable to configure the Microsoft Dynamics CRM 2015 CRM for Tablets application with OAuth while on an internal LAN.
  • Black background is seen when scrolling records in 'Opportunity Product Inline' associated simple list of the Opportunity form in iOS8.
  • Notes quick create form is not dismissed on clicking System back button and application is closed on Android 4.4.
  • "All Day Event" within Appointment is not functioning as expected on Android 4.4.
  • Lookup bar leaves white space at right end while scrolling on Android 4.4.
  • List controls in search results are not populated with additional records on Android devices.
  • Tiles disappear when navigating to and from the dashboard on Android devices.
  • Dropdown values are not displaying properly the first time opened on Android devices.
  • A horizontal gray line appears on users lookup bar when using Android 4.4.
  • When "Prevent click-to-call" is unchecked under Policy set. Control policy error is displayed when user clicks on contact card when using CRM for Tablets.
  • Script error occurs when opening any record from an activity grid after using record set navigation on the CRM for Tablets.
  • Fields that are meant to be Date only should not show Date and Time controls in CRM for Tablets.
  • Receiving Invalid Parameter Error in CRM for Tablets for sub-grid views with Related Entity columns.
  • Changes made to the Email Server Profile record during the loading period persists.
  • A confusing error message occurs when the CRM for Outlook client cannot logon to the MAPI store in Outlook.
  • CRM 2015 Client for Outlook ADAL library is not FIPS compliant.
  • Appointment record is not created in CRM when tracked by invitee from the CRM for Outlook client.
  • An OAuth Error occurs when selecting CRM Online and "Connect automatically with my current credentials" is left checked when configuring the CRM for Outlook client.
  • Not able to send the direct mail for selected account record in outlook offline mode of CRM for Outlook client.
  • Unable to change the settings of Address Book, for the "Entity record type being Synced to Address Book" in the CRM for Outlook client.
  • Outlook crashes when configured with the CRM for Outlook client if it loses network connectivity.
  • Icons are not displaying for Opportunity Products and Opportunity relationships in the navigation bar.
  • Opportunity Product list does not show name for Write-In products.
  • Suggested Product is added more than once if we click on ADD button on the suggestion fly out more than once.
  • Business Closure URL allows for XSS security vulnerability.
  • Resolve stage in Case form is empty when using CRM for Tablets.
  • Incorrect solution customization for ContractTemplate and KbArticleTemplate.
  • Action Calls to navigate to a webpage is appending the org url when called through routing rule during session creation.
  • Show Tab functionality from a sub-button does not work properly.
  • Unable to set a timer on the Task Editor form.
  • Email a link option is not functioning on KB Article template.
  • Unable to use custom Views in Products subgrids.
  • Stakeholders and Competitors cannot be added in the Lead or Opportunity forms using a subgrid.
  • Incorrect dialog is displayed when selecting "Set Work hours" from the Customer Service Schedule.
  • When a custom entity has a primary name attribute set as optional and a record is created without a value for the primary name field, you are unable to select this record through a lookup to this entity.
  • Unable to create a new View using Chrome because of dialog stating "You must provide basic information about this view before using this form."
  • If a user does not have the Read permission for the Campaign entity an error will occur while reading, or creating an Account, Contact, or Lead.
  • After opening an Account record from the hierarchy view into a new window using left arrow pop up button the Account form appears. When that Account form is closed the home page is displayed instead of displaying hierarchy view.
  • Multi-line field headers are not a tab stop.
  • Script errors occur when changing Start Times on Service Restrictions.
  • Clicking On Associate child Cases and SetParent Relationship Dialog causes a JavaScript error.
  • Unable to open the Quick Find entities selection when in System Settings using Chrome.
  • Unable to use Lookup Field that will be filtered by N:1 relationship.
  • A JavaScript error occurs when clicking the OK button after checking checkboxes for Global Audit Settings.
  • Users are unable to select elements from a dropdown list using the keyboard.
  • Icons do not load properly on Safari 8 browser for OS X 10.10.
  • An error message occurs when trying to edit filter criteria of a System View.
  • Users are unable to unfollow or follow multiple records from an entity grid.
  • Duplicate tabs appear for Work Hours and Service Restrictions.
  • Unable to add columns in Reports wizard page for Sales reports.
  • Users are unable to enter First Name and Last Name in the Lead form on iOS8 devices.
  • Users are unable to enter First Name and Last Name in the Lead form on Android 4.4.2 devices.
  • Email Templates and Email tabs are not visible in Settings menu.
  • Buttons are hidden behind scroll bar and are not displayed appropriately on ribbon for Connection roles.
  • Form Assistant on Scheduling dialog does not show the Resources tree for the selected Service.
  • Double Click does not open properties dialog in Chrome.
  • Clicking OK or Cancel in the Recurring Appointment fly out does not work in Chrome.
  • A script error occurs when clicking delete on a Service Restriction.
  • The "OK" button does not respond in the Email Configuration form from the CRM for Outlook client.
  • Navigation arrows and item numbers disappear when browsing subgrid items.
  • You are unable to add components to an existing solution.
  • An error occurs when adding a custom filter in the CRM Client for Outlook.
  • The "OK" button does not respond in the Service Configuration Settings.
  • An error occurs when editing the Bing Map control.
  • Adding a step to a workflow causes a script error in Internet Explorer and causes Chrome to stop responding.
  • Service Schedule Work Hours are not being saved for "Are the same each day" and "var by day" options.
  • Activity status is truncated in the Activity record.
  • Field Security Profiles do not save.
  • The Save As dialog throws a script error when clicking the OK button.
  • Unable to see menu controls on the Menu Bar in Safari 8 on Mini Mac OS.
  • The Entitlements subgrid moves when scrolling and overlaps column names.
  • A script error occurs when clicking the "X" on the Service Scheduling dialog.
  • Unable to add multiple components to a Solution at one time.
  • Unable to share an Account record from the Advanced Find window.
  • Field Security permissions changes are not automatically reflected on forms.

Please see this support article for more: https://support.microsoft.com/en-us/kb/3010990

Create web resources and IFRAME content for use with the CRM for tablets client

Although Microsoft Dynamics CRM for tablets does not support IFrames or web resources in this release, you can get started developing solutions that use these capabilities for a future release that will support them.

For Microsoft Dynamics CRM Online 2015 Update the capability to display IFrames or web resources in CRM for tablets is available as a preview feature for selected regions. This feature is only available for Android and iOS tablets and is not available for Microsoft Dynamics CRM (on-premises).

Enable this preview feature

Preview features are not meant for production use and are subject to separate Supplemental Terms of Use for Microsoft Dynamics CRM Online Previews.

The preview release of this feature is intended to facilitate early development and testing of touch-enabled controls for CRM for tablets. This preview also helps the product team to collect feedback from you.

Enable IFrames and web resources for CRM for tablets

When this preview feature is enabled you can configure IFrames and web resources in forms and dashboards in the Microsoft Dynamics CRM web app which can be configured to display in CRM for tablets. To enable this preview feature for your organization, you must be a CRM administrator.

  1. Go to Settings > Administration > System Settings and choose the Customization tab.

  2. Under Preview feature, choose agreement terms to review the terms of use.

  3. Under Preview feature, check both boxes to enable web resources and IFrames in CRM for tablets.

Configure a web resource to be displayed in CRM for tablets

After you have enabled this preview feature, you must also enable each web resource by selecting the CRM for tablets checkbox in the web resource form. The WebResource.IsEnabledForMobileClient attribute stores this data.

Configure a form or dashboard IFrame or web resource control to display in CRM for tablets

When you add an IFrame a web resource or to a form or dashboard you must select the CRM for tablets checkbox in the Add Web Resource dialog. This sets the<ShowOnMobileClient> (FormXml) parameter value for the control.

Known issues

  • You can’t use popups for authentication or other purposes from within IFrames and web resources on CRM for tablets.
  • Authentication for embedded O365 sites is not available.
  • Errors and memory leaks in IFrames and web resources can crash CRM for tablets and can cause client side data loss.
  • This preview feature can adversely affect application performance.
  • Microsoft Silverlight and image web resources are not available on CRM for tablets.

CRM 2011’de Create/Update/Delete Metodlarına Farklı Bir Bakış

Dynamics CRM'in iş dünyasının parlayan yıldızı olan ve her türlü iş platfomunun temeline yerleştirebilecek bir mimaride olduğunu her fırsatta anlatmaya çalışıyorum. Bu mimari üzerinde bizim kod geliştirmemizi ve sistem ile entegre olmamızı sağlayan web servisleri ve dll'ler vasıtasıyla yazma ve okuma işlemlerimizi gerçekleştirmekteyiz. Bugün sizlere daha önceden eski versiyonlar için de bahsetmiş olduğum oluşturma,  güncelleme ve silme metodlarının yapısını tekrar anlatacağım ama sonunda bunları Process isimli bir class'da birleştirip tek bir yerden yönetilmelerini sağlayacağız.

CRM servis nesnesi bize kayıtlar üzerinde işlem yapma özelliği sağlamaktadır. Servis içinden yapmak istediğimiz harekete uygun metodu çağırmamız gerekmektedir.
  Tabii burada unutulmaması gereken konu servisi çağıran kullanıcının çağrılan metodda işlem yapmaya yetkili olması gerekmektedir.

Create Metodu CRM 2011 içerisinde bir entity içerisinde yeni bir nesne oluşturmamıza olanak tanır. Metod parametre olarak entity türünden bir nesne alır ve yeni oluşturulmuş nesnenin GUID türünden değerini geri döndürür.

Aşağıdaki örnek bu metodun late-bound sınıfla kullanımını göstermektedir.

// Entity nesnesinin yeni bir instance’ini olusturuyoruz
Entity account = new Entity("account");
// Gerekli attribute’lara atama yapiyoruz.
account["name"] = "Örnek Firma";
// Örnek Firma adında bir firma karti olusturuyoruz.
_accountId = ioService.Create(account); 

Aşağıdaki örnek bu metodun early-bound sınıfla kullanımını göstermektedir.

Contact contact = new Contact()
{
    FirstName="Deneme",
    LastName="Kisisi",
    Address1_City="İstanbul",
};
Guid contactGuid =_service.Create(contact);

Update Metodu CRM 2011 içerisinde bir entity içerisinde bir nesneyi güncellememizi sağlar. Metod parametre olarak entity türünden bir nesne alır. Güncellenecek nesnenin id’si mutlaka parametre olarak verilmelidir.

Guid gContact = new Guid("7bE545CCD3-9A3A-E011-BA8B-78E7D1623F9D");
 
Contact contact = new Contact()
{
     ContactId = gContact,
     FirstName="Test",
     LastName="Kisisi",
     Address1_City="Ankara",
};
_service.Update(contact);

Delete Metodu CRM 2011 içerisinde Id’sini verdiğiniz bir nesneyi sistemden silmeye yarar. Metod parametre olarak silinecek nesnenin Id’si yanında bu nesnenin türünü ister.

Guid gContact = "7bE545CCD3-9A3A-E011-BA8B-78E7D1623F9D";
_service.delete("contact", gContact); 

Bir programcı olarak çok standart olan bu işlemleri isterseniz bir class mantığı altında birleştirelim. Bu sayede daha yönetilebilir bir CRUD (Create, Read, Update, Delete) yapısı oluşturabiliriz. Ben bu sınıf için Process adını kullandım ve Process sınıfı içerisinde şu anda Oluşturma, Güncelleme ve Silme işlerimi yapmaktayım. İlerleyen makalelerde Okuma yapılarını incelerken onları da bu sınıfa dâhil ederiz.

Burada öncelikle açıklamalıyım ki bir önceki makalede yer alan Singleton tasarım deseniyle CRM servisini oluşturma yazımdaki class’tan faydalanarak servisi çağırma işlemini gerçekleştirdim. O yazıyı okumak isterseniz buraya tıklayınız

Ek olarak hata olaylarını kontrol etmek için Result isimli bir class kullandım bu class’ın içeriği şu şekilde;

public class Result
    {
        public string Message { get; set; }
        public bool isError { get; set; }
        public Object BusinessObject { get; set; }
 
        public Result(string _Message, bool _isError, Object _BusinessObject)
        {
            Message = _Message;
            isError = _isError;
            BusinessObject = _BusinessObject;
        }
 
        public Result(string _Message, bool _isError)
        {
            Message = _Message;
            isError = _isError;
            BusinessObject = null;
        }
    }

Görüldüğü üzere çok basit bir class bize sonucun başarılı mı başarısız mı olduğunu döndürecek o kadar.

Bunun haricinde bir de Base isimli bir class’ım var ki Process sınıfını aslında bu class’dan türetmekteyim. Şu anda bu class’ı sadece ErrorNumber ve ErrorDetail gibi hata oluştuğunda bilgi almamızı sağlayacak iki property ile kullanmaktayım ama ileride farklı propertyler de eklenecek.

public class Base
{
    public int ErrorCode { get; set; }
    public string ErrorDetail { get; set; }
} 

Bu iki class’ımı açıkladıktan sonra asıl yapıda kullanacağımız metodlara gelelim. İlk önce create metodunu inceleyelim. Hatırlayacağınız üzere CRM servisinde Create metdonun Update metodundan tek farkı id’ye ihtiyaç duymamasıydı. Çünkü bu metod id’yi üretip bize geri döndürecek. Ben de kurguyu buna göre planladım.

public Result Create(Entity EntityForCreate)
       {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                Guid EntityID = service.OrganizationService.Create(EntityForCreate);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityForCreate.LogicalName + ", ID : " + EntityID, 
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false, EntityID);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }

Aslında yapı çok basit servis nesnemi çağırıyorum, servis oluşurken hata var mı diye bakıyorum eğer hata varsa hatayı fırlatıyorum. (bu noktada şunu belirtmeliyim ki catch bölümünde yer alan DetailLog ve ExceptionHandler benim daha önceden yazmış olduğum hata yönetimi ile ilgili class’lar catch bölümünü siz de istediğiniz gibi düzenleyebilirsiniz) Eğer hata yok ise OrganizationService metodumu kullanarak nesnemi oluşturuyorum. Bu noktada da bir hata yoksa servis bana oluşturduğu nesnenin id’sini döndürüyor yok eğer hata varsa zaten kod catch bloğuna düşüyor. İşte bu kadar.

Şimdi gelin diğer metodlara bir göz atalım;

public Result Update(Entity EntityForUpdate, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Update(EntityForUpdate);
 
                DetailedLog.CreateLog("Entity Updated! Type: " + EntityForUpdate.LogicalName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }

Update metodu neredeyse Create metodunun aynısı tek fark daha önce de ifade ettiğim gibi güncellenecek nesnenin id’sini alması. Bunu almalı ki neyi güncellediğini bilebilsin. Aslında burada şöyle bir mantıksal kargaşa var update metodu ek olarak id’yi almamakta zaten sizin ona update edilmesi için vereceğiniz entity’nin Id alanına vermelisiniz. Benim burada ek olarak almamdaki amaç onu loglamak için.

Bir de Delete metoduna göz atalım;

public Result Delete(string EntityName, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Delete(EntityName, EntityID);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true, null);
            }
        }

Delete metodu entity’nin adını ve id’sini almakta. Bu iki veriyi de servise vermekteyiz.

Class’ın tamamına bakacak olursak;

public class Process : Base
    {
        public Result Create(Entity EntityForCreate)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                Guid EntityID = service.OrganizationService.Create(EntityForCreate);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityForCreate.LogicalName + ", ID : " + EntityID, 
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false, EntityID);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }
 
        public Result Update(Entity EntityForUpdate, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
                
                service.OrganizationService.Update(EntityForUpdate);
 
                DetailedLog.CreateLog("Entity Updated! Type: " + EntityForUpdate.LogicalName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true);
            }
        }
 
        public Result Delete(string EntityName, Guid EntityID)
        {
            try
            {
                Service service = Service.GetService();
 
                if (service == null)
                    throw new Exception("Service is null");
                if (service != null && service.ErrorCode > 0)
                    throw new Exception(service.ErrorDetail);
 
                service.OrganizationService.Delete(EntityName, EntityID);
 
                DetailedLog.CreateLog("Entity Created! Type: " + EntityName + ", ID : " + EntityID,
                    System.Diagnostics.EventLogEntryType.Information);
 
                return new Result("", false);
            }
            catch (Exception ex)
            {
                ErrorCode = 100;
                ErrorDetail = ExceptionHandler.HandleException(ex);
                DetailedLog.CreateLog(System.Reflection.Assembly.GetExecutingAssembly().GetName().Name
                    + " : " + System.Reflection.MethodBase.GetCurrentMethod().ToString()
                    + " : " + ErrorDetail, System.Diagnostics.EventLogEntryType.Error);
 
                return new Result(ErrorDetail, true, null);
            }
        }
    }

Class’ımızı bu şekilde oluşturduktan sonra gelin onu bir konsol uygulaması yardımıyla çağıralım ve iş başında görelim.

static void Main(string[] args)
        {
            try
            {
                Entity lead = new Entity("lead");
                lead.Attributes["subject"] = "Fuardan Gelenler";
                lead.Attributes["firstname"] = "Barış";
                lead.Attributes["lastname"] = "KANLICA";
                lead.Attributes["companyname"] = "Omerd Business Solutions";
 
                Process process = new Process();
                Result result = process.Create(lead);
                if (result.isError)
                    throw new Exception(result.Message);
 
                Console.WriteLine("Lead created : " + result.BusinessObject.ToString());
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error : " + ex.Message);
                Console.ReadLine();
            }
        }

 

Gördüğünüz üzere Entity nesnemi çağıyor ve ona lead adını veriyorum. İçerisi istediğim bilgiler ile dolduruyor ve Process class’ımın içindeki Create metodu vasıtasıyla CRM içerisinde oluşmasını sağlıyorum. İşte hepsi bu kadar :) 

Bütün bu işlemler sonunda tek bir noktadan yönetilebilir bir CRUD mimarisi yavaş yavaş ortaya çıkmakta. Sıra Okuma işlemlerinin detaylarına inmekte. Onu da artık başka bir makalede inceleyeceğiz.

Microsoft Dynamics CRM 2015, Microsoft Dynamics CRM Online 2015 Update, Microsoft Dynamics Marketing 2015 Update, and Parature, from Microsoft.

Microsoft Dynamics CRM 2015, Microsoft Dynamics CRM Online 2015 Update, Microsoft Dynamics Marketing 2015 Update, and Parature, from Microsoft.

The 2015 updates for Microsoft Dynamics CRM and Microsoft Dynamics Marketing have arrived! Updates to Parature, from Microsoft are soon to follow in early 2015. These updates add enhancements to sales, marketing, and customer service functionality, and will also add features to facilitate marketing and sales team collaboration.

Products updated

These products will be affected by the 2015 update:

  • Microsoft Dynamics CRM online and on-premises versions

  • Microsoft Dynamics CRM for Outlook

  • Microsoft Dynamics CRM for tablets

  • Microsoft Dynamics CRM for phones

  • Microsoft Dynamics Marketing

  • Parature, from Microsoft

New features

These are just a few of the highlights in the 2015 update:

Microsoft Dynamics CRM

  • Create product families: Boost selling effectiveness with the ability to bundle products and recommend related products for cross-selling/up-selling opportunities.

  • Use sales hierarchies:  Manage and report on your sales data in a way that maps to your business. New hierarchical visualizations and roll-ups bring real-time territory and forecasting data to your fingertips.

  • Mobile sales improvements: Increase field sales productivity with flexible, role tailored dashboards and analytics, personalized home pages and the ability to navigate by hierarchy. This version of the tablet app also includes improved support for disconnected scenarios.

  • Access CRM records on the go via voice commands: Cortana is now part of Microsoft Dynamics CRM! For customers with Windows Phone 8.1, you can now use conversational voice commands to seamlessly create follow-up appointments, tasks, and phone calls; quickly find information; view your customer lists; and more. Note: This feature will be available in English only in markets where Cortana is available. Read about Cortana voice commands for CRM in the topic Take a tour of CRM for phones.

  • Enhanced sales processes: Guide sellers toward desired outcomes with enhanced branching logic within your sales processes. Increase impact via automation of business processes and enforcement of business rules across all devices.

  • Expanded case management functionality: Enable agents to provide differentiated levels of support with flexible Service Level Agreements (SLAs). Gain insight into service effectiveness with the ability to track and analyze key metrics like SLAs and thresholds.

  • Microsoft Social Listening availability: Microsoft Dynamics CRM Online customers with a minimum of 10 Professional users automatically have access to Social Listening as part of their subscription at no additional charge. Customers who have an Enterprise subscription also have access to Social Listening but with no minimum user requirement. You can add Microsoft Social Listening subscriptions from the Office 365 Administrative Portal.

  • Microsoft Social Listening for on-premises CRM customers: You can now access Social Listening directly from within Microsoft Dynamics CRM 2015 - even as an on-premises customer - and may also be eligible for a discounted rate. Contact your Microsoft Dynamics partner for more information.

  • Improvements in CRM for Outlook: Set up CRM for Outlook quickly and easily with the completely redesigned Configuration Wizard. With Microsoft Dynamics CRM 2015 for Outlook, users can sync assigned tasks and appointment attachments. Admins can control synchronization between pairs of fields, which provides confidence about where data is coming from and how it's shared. For more information, see Set up CRM for Outlook.

  • Customizable help: Personalize the user assistance by tailoring the in-product Help content to match the specifics of your Dynamics CRM implementation. You can modify what displays under the Help question-mark icon at either an entity-specific or organization-wide level. Please read Customize the Help experience.

For more detailed information about the update, see What's New in Microsoft Dynamics CRM.

Microsoft Dynamics Marketing

  • Sales and marketing collaboration: Strengthen your marketing and sales synergies with the new Sales Collaboration Panel, which allows sellers to provide input into campaigns and targeting.

  • Manage multi-channel campaigns: Streamline campaign creation and improve segmentation with graphical email editing, A/B and split testing, integrated offers, and approval workflows.

  • Improve B2B marketing: Deepen your lead management capabilities with webinar integration and improved lead scoring, including the ability to introduce multiple lead scoring models. 

  • Enhanced marketing resource management: Gain unprecedented visibility into your marketing plan with the new Interactive Marketing Calendar and improve collaborative marketing with Lync click-to-call and webinars.

  • Gain social insights within Microsoft Dynamics Marketing: Display social information collected with Microsoft Social Listening about your brand, campaigns, and more, all within Microsoft Dynamics Marketing.

  • Additional language & geographic availability:  Microsoft Dynamics Marketing is now available in Japanese and Russian, bringing the total to 12 languages and 37 countries currently supported. Find more information in the Microsoft Dynamics Marketing Translation Guide.

For more information about the update, see What's New in Microsoft Dynamics Marketing

Parature, from Microsoft

There are many exciting new things coming in Parature, from Microsoft in early 2015, including:

  • Knowledgebase management and reporting improvements

  • Comprehensive service desk configurations

  • Support ticketing enhancements

  • Insights into customer self-service/portal usage

  • Mobile service desk enhancements

  • New social channel monitoring

  • Real-time chat translation

  • Further integration with Microsoft Dynamics CRM

  • And more

For more information, download the Parature, from Microsoft Spring '15 Release Preview Guide.

Technical changes

Not only do we want to keep you apprised of new features in the 2015 release, but you also need to know about technical changes that could have an impact on your organization as well as additional resources available to you.  For example, as with previous releases of Microsoft Dynamics CRM, we add and remove items from our supported configurations list to keep current with technology and allow us to provide you the best product possible.

For more information, please read:

Release timing

The 2015 updates for Microsoft Dynamics CRM and Microsoft Dynamics Marketing are available now. Stay tuned for Parature, from Microsoft updates in early 2015. Please visit this page periodically to get the most current information about the upcoming versions.

How to get the updates

Microsoft Dynamics CRM:

  • Updates for online customers: You'll be able to schedule the specific date when your update occurs. We call this a customer-driven update since you “drive” the timing of the update to be the most suitable for your organization. It will be necessary for the CRM administrator to formally approve the update before the update can occur. If you haven't yet updated to the Spring '14 version, features that were added then will also be enabled during this update.  For more information about how this works for Microsoft Dynamics CRM, read Manage Microsoft Dynamics CRM Online updates or watch a short video about the Update process enhancements with Microsoft Dynamics CRM Online 2015 Update (3:33).

  • Updates for on-premises customers: Customers who are current on their Microsoft Software Assurance Plan or Business Ready Enhancement Plan will be able to get updates after the final product release. Learn more about Microsoft Dynamics Service Plans.

Microsoft Dynamics Marketing:

  • The listed administrator within your organization will be notified by email about the specific timing of the update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

  • Should this scheduled date not be suitable for your organization, you will have an opportunity to reschedule the date through a service request.

  • Keep looking for emails with more specific instructions for updating Microsoft Dynamics Marketing.

Parature, from Microsoft:

  • The listed administrator within your organization will be notified by email about the specific timing of the update to the next version. Microsoft will send several reminder communications as the scheduled update approaches.

How to prepare for updates

Test the updates in a sandbox environment. We always advise that you preview and test new versions in a non-production environment before you update your live production instances. This will give you the opportunity to verify the compatibility of any customizations that you may have made, or any third-party customizations that are installed. Additionally, testing will also allow you to assess the impact of the upcoming changes on your organization and your users. If you haven't already done so, we strongly advise obtaining a non-production instance.

Manage customizations for Dynamics CRM. Three deprecated form scripting methods have been removed; you'll want to make sure your code isn't using those methods before you update. There's also a tool that a developer can run before an update to identify scripts that should be evaluated. For specifics, see Deprecated form script methods removed (part of What's new for Developers).

Browser support for Parature, from Microsoft. Parature, from Microsoft supports all major browsers and their latest versions, including Internet Explorer, Google Chrome, and Mozilla Firefox. To make sure that you can take advantage of all the enhancements to the Service Desk and Support Portal, make sure that you update your browser to the latest version.

Upgrading to a new version of Microsoft Dynamics Marketing. We have designed the upgrade process to be as quick, easy, and trouble-free as possible, but you should still be aware of the process and some possible issues. If you are upgrading from a previous version of Microsoft Dynamics Marketing, find out what to expect by reading Upgrading from an earlier version.

How to stay informed

Have questions?

Connect with Support Resources or browse questions/answers in the Microsoft Dynamics CRM Forum—or you can always contact your partner.

For questions about Parature, from Microsoft, please contact Parature Support.

Enable multi-factor authentication through OAuth

In the newly redesigned Microsoft Dynamics CRM for Outlook Configuration Wizard, System Administrators can enable multi-factor authentication (MFA) through the OAuth 2.0 Framework. OAuth 2.0 is an open framework for authorization that lets users provide access tokens, instead of credentials, to access their data that is hosted by a given service provider (such as CRM). Using MFA can help make client authentication more secure, especially for mobile users. CRM Online and on-premises versions of Microsoft Dynamics CRM 2015 can take advantage of MFA; Microsoft Dynamics CRM 2015 on-premises requires at least Windows Server 2012 R2. CRM Online automatically uses OAuth.

If you have upgraded your authentication server to use OAuth prior to installing CRM 2015 for Outlook, CRM 2015 for Outlook will automatically check for and use OAuth for MFA. Users will see the OAuth sign-in form the first time they use CRM 2015 for Outlook.

If you upgrade your authentication server to use OAuth after rolling out CRM 2015 for Outlook, you have two options to set CRM 2015 for Outlook to use OAuth.

  1. Reconfigure CRM for Outlook on all computers. Run the Microsoft Dynamics CRM for Outlook Configuration Wizard and remove and re-add your organization.

    -- OR --

  2. Use Group Policy to update the following registration key:

    HKEY_CURRENT_USER\Software\Microsoft\MSCRMClient\{orgid}.

    Set AuthenticationProvider to 0

    After the registry change, CRM 2015 for Outlook will automatically check for and use OAuth for MFA.