Archive for Şubat, 2020

X++ :12- Insert Metodu Ne İşe Yarar?

Bu yazıda Dynamics 365 Finance and Operations tablo metotlarından Insert() metodunu anlatacağım. Önceki yazılarımda tabloların temel yapılarından bahsetmiştim. Şimdi ayrıntılı olarak alt seviye nesne ve metotları inceleyeceğim. Tablolar XRecord sınıfından türetilen aslında SQL tabloların sınıf karşılıklarıdır. Sınıflardan temel bir iki farkı vardır. Sınıf olmasına rağmen New ile nesne oluşturmak gerekmez. Alanlar metot gibi davranın ama paranteze ihtiyaç duymaz. Insert() metodu tabloda bir kayıt oluşturan metottur.

FDBookTable tablosunda Metotlara sağ tıklayıp Insert() metodunu Override ettim.

Resim-1

Insert işlemini yani kaydın DB’ye yazılmasını aslında Super() yapar. Super() ezilen metodu çağıran koddur. Dolayısıyla Super()’den önce kayıt henüz DB ye yazılmamıştır. Kaydetmeden önce bir işlem yapmak istiyorsanız Super()’den önce sonra yapmak istiyorsanız Super()’den sonra yazmalısınız. Ben Basit bir satır ekledim. Çok doğru bir yer olmamakla birlikte çalışır. Insert() metodu validasyon için kullanılmamalıdır.

Resim-2

Tablo tarayıcısını açıp yeni bir kayıt oluşturduğumda otomatik BookCount 1 olarak oluşuyor.

Resim-3

Şimdi standart bir tablonun Insert() metoduna bakalım. Kodları görebilmek için View code demeniz gerekiyor.

Resim-4

void insert(DirPartyType _partyType = DirPartyType::None, Name _name = ”,boolean _updateCRM=true)

{

DirPartyType   type;

ttsbegin;

// Check if not associated to Party

if (!this.Party)

{

// Create a Party entry for customer

this.Party = DirPartyTable::createNew(_partyType, _name).RecId;

}

else

{

if (!this.VATNum)

{

this.VATNum = TaxRegistration::getPrimaryRegistrationNumber(DirPartyTable::findRec(this.Party), TaxRegistrationTypesList::TAXID);

}

this.initFromsmmLeadTable();

}

smmBusRelTable smmBusRelTable = smmBusRelTable::findByParty(this.Party, true);

if (smmBusRelTable.RecId)

{

smmBusRelTable.BusRelTypeId = smmBusRelTypeGroup::getCustomerType();

smmBusRelTable.update(false);

}

super();

// Insert new customer in full text search table

MCRFullTextSearch::insert(this);

this.SysExtensionSerializerMap::postInsert();

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoMX]))

{

this.copyInfoToParty();

}

smmTransLog::initTrans(this, smmLogAction::insert);

DirPartyRelationship::createLegalEntityRelationship(this.Party, this.DataAreaId, DirSystemRelationshipType::Customer);

// Add links to contact person

ContactPerson::addCustVendLink(this.TableId, this.Party, this.AccountNum);

// Create default location if using existing party

LogisticsLocationDefaultAppUtil::createDefaultForExistingParty(this);

DimensionDefaultFacade::copyDimensionValueToDefaultDimensionField(this, fieldNum(CustTable, AccountNum), this, fieldNum(CustTable, DefaultDimension));

ttscommit;

}

Bu kodda iki yere dikkat çekeceğim. Birincisi if (!this.Party) ile başlayan kod burada eğer parti kodu yoksa oluşturmak üzerine bir kod var. Superden önce çünkü kayıt oluşmadan önce oluşmalı ve CustTable’daki ilişkili alana yazılmalı. İkincisi ContactPerson::addCustVendLink(this.TableId, this.Party, this.AccountNum); ilgili kişi oluşturma. Burada da müşteri kaydı oluşmalı ki müşteri kodu kullanılarak ilişkili kişi kaydı oluşturulsun.

Selamlar.

www.fatihdemirci.net

TAGs: X++,Insert, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

X++ :11- Security Privileges ve Duties Nedir?

Bu yazıda Dynamics 365 Finance and Operations güvenlik için temel yapılar olan Privilage ve Duty den bahsedeceğim. Güvenlik çok geniş bir konu ama bu yazdı bir yazılımcının proje yaparken oluşturması gereken temel güvenlik nesnelerini anlatacağım. Bu seride kullandığımız MenuItem için güvenlik nesneleri oluşturalım.

Resim-1

Öncelikle ayrıcalık (Privilage) oluşturalım.

Resim-2

Güvenlik Entry Point üzerinden verilir. FDBookTable MenuItem’mini sürükleyip bir giriş noktası oluşturalım. Access Level kısmında tam yetki vermek için Delete seçebilirsiniz. Yukarı çıktıkça yetki seviyesi azalır.

Resim-3

Şimdi görev Duty oluşturalım.

Resim-4

Oluşturduğum göreve ayrıcalığı ekleyelim. Artık BookManagment projemiz için oluşturduğumuz tüm ayrıcalıkları bu göreve ekleyebiliriz. Bu aşamadan sonra istenilen role yetki vermek için bu görevi kullanabiliriz. Yetkileri ara yüzden veren arkadaşlara kolaylık olması için etiketlerin doğru ve yeterli ayrıntıda olması faydalı olur.

Resim-5

Bu yazıda geliştirme yaparken gerekli olan temel güvenlik nesnelerini anlatmaya çalıştım. Güvenlik genelde en sona bırakılan bir konu oluyor ama mutlaka testlerin Admin yetkisiyle değil gerekli güvenlik rolleriyle test edilmesi gerekiyor. Canlı geçişlerde bu konuyla ilgili çok sorunla karşılaştım.

Selamlar.

www.fatihdemirci.net

TAGs: X++,Privilage,Duty, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

How to Move Developments to Dynamics 365 Finance and Operations Test and Live Environments? 4- Installing Deployable Package to Asset Library

In this article, I will explain how to install the Deployable Package created with Build, which is the last step of moving the developments we made from Visual Studio for Dynamics 365 Finance and Operations to Test and Live environments, to Asset Library and then how to carry this package to test and live systems. I talk about performing a simple development movement with this article. Of course, there are too many details here. There are many steps that need to be examined, especially when problems arise.

This process may be more troublesome compared to the old version, but it is definitely a better method. It will be difficult for customers who still develop live and move codes to live every day, but they should definitely switch to moving at least once a week. Even for the old version, we recommend moving to live once a week (twice at most). In this version, moving to live more frequently causes a great loss of time. The problem I usually see in projects that require intervention to live too much is that your test and design stages are insufficient. Developments that are not well designed and tested, constantly create a need to intervene to live environment. With this work logic, you cannot create projects in the new version.

In the third article of this series, we downloaded the Deployable Package, which was the result of Build. We can now upload this package to Lifecycle Services. Log in to the LCS and select our project. Open Asset Library from the menu.

Image-1

Open the Software Deploable Package tab. Open the new package download page by clicking +.

Image-2

On the page that opens, enter a name and description. It is useful to set a standard here.  Click Add a file.

Image-3

Select the package you downloaded.

Image-4

After the installation is complete, click Confirm.

Image-5

Our package appears in the list. It is not yet confirmed. After a few minutes the Valid part will also be checked. Now we can install this package in our test and live environments.

Image-6

Since it is not live in this environment, I will first show it from the test. The same steps are required for live as well.  Open your SANDBOX Test environment by clicking Full details.

Image-7

Click Maintain-> Apply updates.

Image-8

Select the package you installed from the window that opens. Apply is not active without naming it. You need to specify a suitable name format. In the new version, one of the most difficult things seems to be naming. You have to give names so many times that it is difficult to set and apply rules everywhere. After you click Apply, the test environment will automatically start to install the package and you will not be able to access the environment for at least 1 hour. You should be aware of that. You can follow the status of the installation process on the detail page of your environment.

Image-9

The process of making the package live is the same, except there are two differences. Firstly, you need to mark the Package as Release Candidate. Second, you need to set the date you want the package to go live. This is done by using the Schedule button. I could not provide an image of it because it was not live in this environment yet.

Image-10

In this article, we completed the process of moving a development environment to test and live. Of course, I explained it through a very simple and problem-free scenario. In real life, things are not that simple, but not so difficult as well. There are many tools to solve problems. Being organized is very important. You should pay attention to naming and standards. I will continue to explain the details and solution methods of this whole process. I hope it is useful for you.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps , Release Candidate, Deployable Package, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 Insights Power BI, Power Automate, Power Apss, Power Virtual Agents, what is Dynamics 365, Dynamics 365 ERP, Dynamics 365 CRM

How to Move Developments to Dynamics 365 Finance and Operations Test and Live Environments? 1- Developing and Sending to Azure DevOps.

In this article, I will try to explain how to move the developments we made from Visual Studio for Dynamics 365 Finance and Operations to Test and Live environments. I thought of wrapping it up in a single article, but I realized it would be too long so I divided it into sections. In this first article, we will make a new development and compile it, then we will do the first tests in our development environment, and finally, we will send our development to Azure DevOps. In the other articles of this series, I will explain how to Build in Azure DevOps and how to move the package to test and live environments.

Let’s have a look at our example. I will write a simple class and make an information screen appear when it is run. Then I’ll create a MenuItem and connect it to the Menu. In my previous articles, we created the DmrWMS model and the DMRWms1 project. I will use this project. Right click on the project and click Add New Items. Select Class as its type, name it and click Add.

Image-1

I added the following codes to the class. It has a very simple structure. I made it work on its own with Main. I gave an Info in the Run method.

Image-2

Now let’s create the Menu Item that is necessary to run our class and add it to the menu. Select Action Menu Item from the Add New Items section, name it and click Add.

Image-3

Select the Object Type Class from the resulting Menu Item properties. Select the class you created as Object. Do not forget to set Label as it will appear in the menu.

Image-4

Let’s test the development now. Right click on the project and click Build.

Image-5

If Build is completed without any errors, mark the Menu Item we created as Set as Startup Object and run it by clicking Start.

Image-6

It called the Menu Item class and displayed the notification on the screen. Our code works J

Image-7

Now we can add it to a menu. Since I want to add it to a standard menu, I must use Extension. I will explain the Extension logic in my next articles, but here you can think of it as an extension of the standard object. You can add new things without breaking the standard. I created an Extension of the AcountsPayable menu with the Create extension option, as shown in the picture.

Image-8

I drag and drop my own Menu Item under PeriodicTask to the resulting menu.

Image-9

I Build my project again and run it.  Build Test appears in the menu. Our development is almost ready to send to version control. Normally it is necessary to add security related objects here. I’m skipping them for now.

Image-10

I click Team Explorer-> Panding Changes.

Image-11

I should see all the objects I’ve created. If there is something missing, I need to add it with Add to Source Control. If you have followed me here, it will automatically add when the object is created. I add a comment and click Check In.

Image-12

I click Yes to complete the process.

Image-13

When I check my Azure DevOps project, I can see all my objects. I am now ready to run Build.

Image-14

In this article, we have made the initial preparation to move developments to test and live environments. We created a simple project, performed the first tests and sent it to Azure DevOps. After this stage, if I had a Dev Branch, I had to perform Merge first. But in our example, since we work directly with main, we are ready to start Build. I will talk about how to perform Merge later.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps,Build, Deploy to Test,  Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 Insights Power BI, Power Automate, Power Apps, Power Virtual Agents, what is Dynamics 365, Dynamics 365 ERP, Dynamics 365 CRM

X++ :10- Query Nedir?

Bu yazıda X++’ın en güçlü özelliklerinden biri olan Query’leri inceleyeceğim. Query nesne tabanlı sorgu olarak özetleyebiliriz. Bu sorgu nesne bazlı olduğu için istenildiği gibi değiştirilebilir ayrıca son kullanıcı ile iletişime sokulabilir. Bu sebeplerden Form ve raporların temel veri kaynağı Query’dir.  Hem kodla hem de ara yüzden oluşturabiliriz. Form ve view gibi yapılarda kullanmak için genelde ara yüzden oluşturulanlar kullanılır.  Bu yazıda ara yüzden örnek bir Query oluşturacağım. İlerleyen yazılarımda kodla nasıl oluştururuz ve nasıl kullanabiliriz anlatacağım.

Resim-1

Yeni bir Query oluşturuyorum.

Resim-2

Query’de temel birkaç özellik var tabi öncelikle veri kaynağı belirlemelisiniz. Ben veri kaynağı olarak FDBookTable ekledim ve FieldList ile BookId, BookName oluşturdum. Range olarak ta BookCoverTyoe ekledim. Eğer kabaca sorgu olarak yazsaydım şöyle olurdu. Bu sorguyu artık istediğim yerde kullanabilirim.

Select BookI, BookName From FDBookTable

Where FDBookTable.BookCoverTyoe == FDBookCoverType::paperback;

Resim-3

Standartta olan karmaşık bir sorgu örneği. Burada 3 tablo bağlanmış. Filtre ve sıralama verilmiş.

Resim-4

Kullanıcı ile iletişime giren Query ekranı bu şekildedir. Bu resim eski versiyondan ama mantıkta bir fark yoktur. Yukarıdaki sorgunun görsel halini görebildiğimiz gibi buradan kullanıcı istediği işlemleri yapabilir.

Resim-5

Eklediğimiz veri kaynağı otomatik alanları seçilmeden gelecektir. Eğer tüm alanlar seçilsin isterseniz Dynamics Fields özelliğini Yes yapmak gerekir.

Resim-6

Bu yazıda ara yüzden nasıl Query oluşturulur anlatmaya çalıştım. Query çok geniş ve çok kullanılan bir özelliktir. Ayrıntılarına vakıf olmak için bol bol örnek yapmak lazım. Özellikle form tarafında kullanımı konusunda çok zafiyet görüyorum bu konuda ayrı bir yazı hazırlamayı düşünüyorum.

Selamlar.

www.fatihdemirci.net

TAGs: X++,Query, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

How to Change the Default Model for Dynamics 365 Finance and Operations Developments?

When you install a new DevBox for Dynamics 365 Finance and Operations, the default model is Fleet Management. If you create a new model, you can mark it as the default model while creating it. However, to use an existing model, it is necessary to make changes to the DynamicsDevConfig file.

In my previous articles, I created the DmrWMS model and marked it as the default model. Therefore, my every new project opens in the DmrWMS model.

Image-1

I have two models in this environment. If I want to work on the other model, unfortunately I cannot choose it while creating the project.

Image-2

As you can see, it is not possible to choose a model in the new project creation screen, or I could not find it. Of course I did some research.

Image-3

To change this, it is necessary to open the DynamicsDevConfig file in C:\Users\Adminb17ce65567\Documents\Visual Studio 2015\Settings.  You must go to this path with your own user. Adminb17ce65567 is my auto-generated admin user. That is the user I connect with Remote Desktop. You can find very useful information in the DynamicsDevConfig file. Let’s go over these 3 features for now.

<DefaultCompany></DefaultCompany> // You can set the default company here.

<DefaultModelForNewProjects>DmrWMS</DefaultModelForNewProjects> // You can change the default model here. When first opened, you will see Fleet Management here.

<DefaultWebBrowser                   i:nil=”true” /> // You can set the default browser here. Sometimes if you want to use Chrome for tests you can change this.

Image-4

In this article, I tried to explain how you can change the default model with the DynamicsDevConfig file. It is imperative to work with the model and it is necessary to set up the model management correctly and make sure that the software developers develop the right model. It becomes troublesome to fix them later.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, DynamicsDevConfig, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 Insights Power BI, Power Automate, Power Apss, Power Virtual Agents, what is Dynamics 365, Dynamics 365 ERP, Dynamics 365 CRM

X++ :9- MenuItems ve Menus Nedir?

Bu yazıda Dynamics 365 Finance and Operations ara yüzlerinin temel nesneleri olan MenuItem ve Menu’lerden bahsedeceğim. MenuItem bir nesnenin giriş noktası olan ve üzerinden yetki tanımı yapılabilen yapılardır. Menu ise adı üzerinde ekrandaki kısa yollardır. Üç tip MenuItem vardır. Display formlar için Output raporlar için Action ise sınıflar için kullanılır.

Resim-1

Önceki yazıda oluşturduğum FDBookTable formu için Display tipinde bir MenuItem oluşturalım.

Resim-2

Mutlaka Label tanımlamalısınız.  ObjectType olarak Form seçiyorum. Object olarak formumu seçiyorum.

Resim-3

Bu MenuItem artık istersek formda buton olarak veya menüye ekleyerek kullanabiliriz. Şimdi biz menüye ekleyelim. Kitap projesini Stok yönetimi altında takip etmek istediğim için Create Extension ile Extension oluşturdum.

Resim-4

Oluşan Extension’a bir alt menü ekliyorum.

Resim-5

Oluşturduğum alt menüye Book Managment etiketini tanımladım. Oluşturduğum menüItem’ı sürükleyip yeni oluşturduğum alt menüye bırakıyorum.

Resim-6

Derleyip projemi çalıştırdığımda uygulamada yeni oluşturduğum menü ve eklediğim MenuItem’ı görebildim.

Resim-7

Bu yazıda ara yüz oluşturmak için kullandığımız Menu ve MenuItem nedir nasıl oluşturulur anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: X++,Menu,MenuItem, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Dynamics 365 Finance and Operations Alt Seviye Form Nesnelerine Yetki Nasıl Verilir?

Bu yazıda Dynamics 365 Finance and Operation uygulamasında herhangi bir nesneye nasıl yetki tanımı yapılır anlatmaya çalışacağım. Bunu çok kullanmanızı tavsiye etmiyorum. Ne kadar çok ayrıntıya girerseniz güvenliği yönetmek o kadar zor olacaktır. Ancak tabi bazı durumlarda bu ihtiyaç olacaktır. Bu durumlarda gördüğüm bir yanlışta bunu güvenlik altyapısıyla değil de kodla çözmek oluyor. Kesinlikle güvenlikle ilgili işler için kod yazmayın ilk etapta hızlı çözümmüş gibi görünür ama ilerde çok baş ağrısı olur. Desteği ve sonra gelen taleplerin karşılanması çok zorlaşır. Bu yazıda önceki yazılarımda kullandığım proje ile devam edeceğim. Bir test kullanıcısına Müşteriler formu yetkisi vermiştik. Artık formu açıp verilerini görebiliyor. Varsayalım Customer group alanı bu kullanıcıda görünmesin istendi. Bunu nasıl yapabiliriz görelim.

Resim-1

Read more

X++ :8- Form Nedir?

Bu yazıda Dynamics 365 Finance and Operations formlarının temellerinden ve basit bir formu nasıl oluşturabiliriz anlatacağım. Form uygulamanın kullanıcıya sunduğu ara yüzdür. Çok gelişmiş özellikleri olan bu yapının benim en çok sevdiğim tarafı tasarımla sizi uğraştırmamasıdır. Ağaç yapısında alanları eklediğinizde otomatik tasarım ortaya çıkar ve siz tasarımla uğraşmazsınız.

Bir örnek ile açıklamaya çalışacağım.

Resim-1

Önceki yazılarımda oluşturduğum FDBookTable için bir tane form yapalım.

Resim-2

Formlardaki temel nesneler aslında 3 tanedir. Öncelikle Data Source formun temel veri kaynağını gösterir. Burada Table, View veya Query kullanabiliriz. Methods kod yazabildiğimiz yerler sadece ana alanda değil her bir nesneye de kod yazabiliyoruz. Form metodları ile ilgili ayrı bir yazı düşünüyorum. Gelelim Design kısmına burası bizim tasarımı yaptığımız yer. Burada Pattern uygulayabiliriz.Uyguladığınızda temel nesneleri oluşturmanızı bekliyor bu sayede standartta uygun tasarım yapmış olursunuz.

Resim-3

Ben Apply pattern -> Simple List seçtim. Listede birçok Pattern var.

Resim-4

Simple List için gerekli olan nesneler kırmızı ile gösteriliyor. Her nesneyi eklediğinizde burası düzelecek.

Resim-5

Bazı nesneler kendi tasarımına ihtiyaç duyabilir. Şimdi 3 tane gerekli olan nesneyi ekliyorum.

Resim-6

Action Pane Filter grup ve Grid ekledim. İstenenler bunlardı. Burada veriyi gridde göstereceğiz.

Resim-7

Bir nesnenin doğru veri kaynağından veri gösterebilmesi için Data Source’un seçilmesi gerekiyor.

Resim-8

Veri kaynağından istediğim anaları gride bıraktım ve kaydettim. Artık formum hazır sayılır.

Resim-9

Derleyip formumu başlangıç nesnesi olarak seçip projemi çalıştırdığımda formum açılacak. Veri girişi veya diğer  işlemleri yapabilirim.

Resim-10

Bu yazıda Form nedir nasıl oluşturulur anlatmaya çalıştım. Tabi Form çok geniş bir konu çok farklı tipte formlar yapılabiliyor. En kolay öğrenme yöntemi standartta olan formları incelemek. Ayrıca farklı formlar yapıp kendinizi geliştirebilirsiniz. Formlar için en önemli konu veri kaynağı mantığını anlamak. Formlarda aslında Query kullanılıyor eğer Query mantığında eksikleriniz varsa öncelikle onları halledin.

Selamlar.

www.fatihdemirci.net

TAGs: X++,Form, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

X++ :7- Views Nedir?

Bu yazıda Dynamics 365 Finance and Operations View’lerinden bahsedeceğim. View aslında SQL View’leriyle aynı. Burada oluşturduğunuz View direk SQL de oluşuyor. SQL de birçok özellikle var hepsi X++ ne yazık ki yok. Ama birçoğunu yapabiliyoruz. Bir tane örnek View yapalım.

Resim-1

Yeni bir nesne oluşturma ekranından View seçiyoruz.

Resim-2

Oluşan View’e veri Data Source olarak FDBookTable ekledim. DataSource Fields kısmında tümünü seç demelisiniz. Sonra Fields kısmına View’de olmasını isteyen alanları ekledim. Tabi bu bir sorgu çok karmaşık sorgular yapmak isterseniz Query kullanmalısınız. Derleme ve eşitlemeden sonra hazır olacak.

Resim-3

Açıp alanlara bakabiliriz.

Resim-4

Tablo gibi kullanabilirsiniz. Tabi View sadece veri okumak için kullanılır. Insert Update Delete için kullanamazsınız.  

Resim-5

Bu yazıda View nedir, nasıl oluşturulur ve nerelerde kullanılır anlatmaya çalıştım. View çok önemli ve hayat kurtaran bir özellik temellerini iyi kavrayıp oluşturduğunuz View’leri SQL den kontrol edip kodlarını anlamaya çalışırsanız çok şey öğrenirsiniz.

Selamlar.

www.fatihdemirci.net

TAGs: X++,View, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365