Archive for the ‘ Dynamics 365 ’ Category

Dynamics 365 Finance and Operations için yeni bir Build ortamı nasıl ayağa kaldırılır?

Bu yazıda Dynamics 365 Finance and Operations için yeni Build tipinde bir sanal makine nasıl ayağa kaldırılır adım adım anlatmaya çalışacağım.

Başlamadan önce eğer bir müşteri uyarlama projeniz varsa burada gelen SandBox Develop And Test ortamını Build olarak ayarlamanız öneriliyor. Çünkü bu ortama yakın zamanda admin giriş yetkisi kalkacak ve geliştirme için kullanmak pek mümkün olmayacak. Dolayısıyla Build olarak ayarlamakta fayda var. Ayrıca yine yakın zamanda çıkacak bir Agent sayesinde bütün bir VM ayırmadan Build yapabileceğiz.

Biz bu örnekte Cloud-hosted environment üzerinden yeni bir Build makine oluşturmayı göreceğiz. Sandbox ile aynı adımlara sahip dolayısıyla ikisini de kapsayacak bir yazı olacak. Öncelikle Lifecycle Services’a giriş yapıyoruz. Projemizi seçip hamburger menüden Cloud-hosted environments’ı seçiyoruz.

Resim-1

Read more

Yeni bir Azure Devops hesabı nasıl oluşturulur ve Lifecycle Services (LCS) Dynamics 365 Finance and Operations projesine nasıl bağlanır.

Bu yazıda yeni bir Azure DevOps hesabı oluşturup yeni bir proje başlatıp bunu Lifecycle Services’e nasıl bağlıyoruz anlatmaya çalışacağım. Bu yazıyı hazırlarken sıfır bir hesabım olmadığı için bazı resimleri eski projelerden aldım. Ancak maksadımı anlatmaya yeteceğini düşünüyorum.

Eğer hali hazırda bir hesabınız varsa onu kullanabilirsiniz. Yoksa yeni bir mail ile aşağıdaki ekrandan Start free butonunu kullanarak yeni Azure DevOps hesabı oluşturmayı başlatabilirsiniz.

Resim-1

Read more

X++ :20- CrosCompany Nedir?

Bu yazıda X++ sorgu anahtar kelimelerinden crossCompany inceleyeceğim. Öncelikle uygulamanın şirket yönetimini anlamak gerekiyor.

Uygulamadan istediğiniz kadar şirket tanımlayabiliyorsunuz. Kullanıcılar uygulamaya girdiğinde bir şirkette işlem yapıyorlar. İstedikleri zaman şirket değiştirebiliyorlar. Tablolarda DataAreaId sayesinde verilerin hangi şirkete ait olduğu tutuluyor. Eğer bir tablonun verisi şirket bağımsız olsun diyorsanız ayarlayabiliyorsunuz. Ancak bu tip tabloların dışında yaptığınız bütün işlemler bulunduğunuz şirkette gerçekleşiyor. Bir sorgu yazıp verileri görmek istediğinizde siz Range olarak şirket vermezseniz bile sistem SQL’e giden koda otomatik bulunduğunuz şirketi ekliyor. Bazı durumlarda iki faklı şirketin verisini tek bir sorguda görmek isteyebilirsiniz. Bunun için crossCompany kullanılıyor. Bir örnek yapalım.

static void FDDataAccessCrossCompany1(Args _args)

{

CustTable custTable;

container companies;

;

companies = ["USMF", "USF", “DMR”]; // Kaç şirkette sorgu yapmak istiyorsam buraya ekleyebilirim.

while select crossCompany : companies custTable // crossCompany ile oluşturduğum Container’ı veriyorum

where custTable.AccountNum like “M00032*”

{

info(strFmt(“%1 : %2 : %3″, custTable.AccountNum, custTable.Name(), custTable.dataAreaId));

}

}

Bu sorgunun SQL kodunda or ile şirket kodlarının eklendiğini görürsünüz bu sayede eklenen şirketlerdeki veriler alınabilir.  Sistem şirketler arası birçok işlem yapmak gerekiyor bu yüzden bu yapıları iyi bilemek işiniz kolaylaştırır. crossCompany Query’de de kullanılır. Dolayısıyla birden çok şirket verisi gösteren View ve Form yapabilirsiniz.

Selamlar.

www.fatihdemirci.net

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

Lifecycle Services için Azure Connector kurulumu nasıl yapılır?

Bu yazıda Dynamics 365 For Finance and Operations Deploy edebilmek için gerekli olan Azure bağlantısı Lifecycle Services üzerinden nasıl ayarlanır anlatmaya çalışacağım. Öncelikle Lifecycle Services içinden projemizi açıyoruz. Environments altında Microsoft Azure settings’e tıklıyoruz.

Resim-1

Read more

Microsoft Azure Subscription’a Dynamics 365 Finance and Operations deploy edebilmek için Dynamics Deployment Services Account yetkisi nasıl verilir?

Bu yazıda LCS üzerinden yeni bir ortam ayağa kaldırmak gerekli olan Dynamics Deployment Services Account yetkisi nasıl verilir adım adım tarif edeceğim. Öncelikle Admin hesabıyla Azure Portale giriş yapıyoruz. Cost Management +Billing > Subscriptions kısmını açıyoruz.

Resim-1

Read more

How to Create a Batch Job with SysOperation Framework?

In this article, I will try to explain how to create a new Batch Job for Dynamics 365 Finance and Operations using SysOperation.  We can say that SysOperation is a more advanced version of RunBaseBatch. It has many different uses. In this example I will explain its usage as a normal batch job. As for its structure, SysOperation uses the MVC (Model – View – Controller) design pattern. The basic classes of this structure are:

Service: The service class is derived from the SysOperationServiceBase class. It is the class in which the process is done. Our codes should be in this class.

Data Contract: It is the model class for which we define attributes. The DataContractAttribute attribute is used to get data from the dialog.

Controller: The control class is derived from the SysOperationServiceController class. Stores information about the batch job. Such as dialog and progress bar.

UI Builder: The UI Builder class is derived from the SysOperationAutomaticUIBuilder class and is used to provide more advanced interfaces to dialogs.

In this example I will do the same as we did with RunBaseBatch using the first 3 classes. First I create a new project.

Image-1

I add a new class.

Image-2

The first class is the control class. We haven’t created the service class yet, but I identified and typed its name.

Image-3

Let’s create the service class now.

Image-4

I write the code below. Actually I need the Contract class here. Let’s create it.

Image-5

I create the Contract class. Usually this class should be created first. But if your design is clear, it doesn’t matter which one you start with. You won’t be typing these codes over and over every time, you will use them from a template.

Image-6

I want to get two variables here and edit my class accordingly.

Image-7

I create a MenuItem.

Image-8

I link my control class to the MenuItem.

Image-9

After this stage, compilation is required. It’s not enought to just compile the project. Therefore I click Build models.

Image-10

Click Select all on the screen that opens and start a Build operation.

Image-11

After the Build operation is completed, mark your MenuItem as the starting object and run the project. Our class worked. You can run it directly just like you did with RunBaseBatch.

Image-12

You can add it to a batch job if you want. I added it to a batch and set it to run one time.

Image-13

Now let’s open the Batch Jobs form. Let’s find our own batch job and take a look at the progress. It is Ended, which means it worked and finished. If it was a recurring job, it would be in Waiting state. I click on Batch job History to check what our batch job has done and whether it worked correctly.

Image-14

I click Log from the details of the job and it shows the output of the batch. It worked without any problems.

Image-15

In this article, I tried to explain how to create a new batch job using SysOperation. SysOperation is a very extensive topic. I will continue to explain it with different viewpoints. Especially Parallel processing works very well in terms of performance. I’ll explain how to use it in an example.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Batch Jobs, SysOperation, 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

Dynamics 365 Finance and Operations için yeni bir X++ geliştirme sanal makinesi nasıl ayağa kaldırılır?

Bu yazıda yeni bir X++ geliştirmeleri için yeni bir sanal makine nasıl ayağa kaldırılır adım adım anlatmaya çalışacağım. Bu örnekte bir müşteri ortamında bunu asıl yapacağınızı anlatacağım. Partner veya eğitim amaçlı sanal makinelerde benzer bir mantığa sahip.

Öncelikle Lifecycle Services’a giriş yapıyoruz. Projemizi seçip hamburger menüden Cloud-hosted environments’ı seçiyoruz.

Resim-1

Read more

X++ :18- Select Nasıl Yazılır?

Bu yazıda X++ ile sorgu nasıl yazılır anlatmaya çalışacağım. X++ sorguları SQL sorgularına çok benzer ama temelde birkaç fark var öncelikle TableBuffer denen bir kavram var. SQL de bir sorgu yazdığınızda direk veriyi görürsünüz ama X++ da bunun görselleştirilebilmesi için bir TableBuffer‘a ihtiyaç vardır. Temel bir sorguda kullanılan anahtar kelimeler bunlardır. Birkaç örnek yaparak açıklamaya çalışacağım.

[while] select [reverse] [firstfast]

[firstonly] [firstOnly10] [firstOnly100] [firstOnly1000]

[forupdate] [nofetch] [crosscompany]

[forcelitterals | forceplaceholders] [forcenestedloop]

[forceselectorder]

[repeatableRead] [validTimeState]

[ * | <fieldlist> from] <tablebuffer>

[ index [hint] <indexname> ]

[ group by {<field>} ]

[ order by {<field> [asc][desc]} ]

[ where <expression> ]

[ outer | exists | notexists ] join [reverse]

[ * | <fieldlist> from] <tablebuffer>

[ index <indexname> ]

[sum] [avg] [minof] [maxof] [count]

[ group by {<field>} ]

[ order by {<field> [asc][desc]} ]

[ where <expression> ]

]

<fieldlist> ::= <field> | <fieldlist> , <field>

<field> ::= fieldname | <function>(<field>)

Bir Job ile temel birkaç sorgu yazalım.

class FDDataAccess1

{

public static void main(Args _args)

{

CustTable custTable;

;

select * from custTable; // Müşteri tablosundaki tüm kayıtları seçer

info(strFmt(“1- %1 %2″, custTable.AccountNum, custTable.Currency));

select custTable; // // Müşteri tablosundaki tüm kayıtları seçer. * From a ihtiyaç duymaz

info(strFmt(“2- %1 %2″, custTable.AccountNum, custTable.Currency));

select Currency from custTable; // Müşteri tablosundaki sadece Currency  alanını seçer

info(strFmt(“3- %1 %2″, custTable.AccountNum, custTable.Currency));

select reverse custTable; //  Müşteri tablosundaki tüm kayıtları ters sırada seçer

info(strFmt(“4- %1 %2″, custTable.AccountNum, custTable.Currency));

select firstonly custTable; // Müşteri tablosundaki tek satır veriyi seçer

info(strFmt(“5- %1 %2″, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency != “TRY”; // TRY den faklı olan ilk satırı seçer.

info(strFmt(“6- %1 %2″, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency != “TRY” &&

custTable.CustGroup == “PROJE”;

info(strFmt(“7- %1 %2″, custTable.AccountNum, custTable.Currency));

select firstonly custTable

where custTable.Currency == “TRY” ||

custTable.CustGroup == “PROJE”;

info(strFmt(“8- %1 %2″, custTable.AccountNum, custTable.Currency));    }

}

Çalıştırdığımda bu çıktıyı veriyor.

Resim-1

Farklı bir örnek yapalım. Bu job benim eğitimlerde kullandığım bir örnek.

static void FDDataAccess2(Args _args)

{

InventTable inventTable;

InventTrans inventTrans;

;

//1. sistemimde tanımlı bütün stok kartlar (InventTable)

setprefix(“Sistemimde tanımlı bütün stok kartlar”);

while select inventTable

{

info(strFmt(“%1 %2″, inventTable.ItemId, inventTable.ItemName()));

}

//2. kaç stok kartım var

setPrefix(“kaç stok kartım var”);

select count(recId) from inventTable;

info(strFmt(“%1″, inventTable.recId));

// 3. Hareket gören stok kartlarım hangileri (sadece stok kartlarım)

setPrefix(“Hareket gören stok kartlarım”);

while select inventTable

exists join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3″, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

//4. stok kartı hareket bilgisi

setPrefix(“stok kartı hareket bilgisi”);

while select inventTable

join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3″, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

//5. Hiç hareket görmeyen stok kartlarım hangileri ve adedi

setPrefix(“Hiç hareket görmeyen stok kartlarım”);

while select inventTable

notexists join inventTrans

where inventTable.ItemId == inventTrans.ItemId

{

info(strFmt(“%1 %2 %3″, inventTable.ItemId,

inventTrans.Qty,

inventTrans.DatePhysical));

}

setPrefix(“Hiç hareket görmeyen stok kartlarımın adedi”);

select count(recId) from inventTable

notexists join inventTrans

where inventTable.ItemId == inventTrans.ItemId;

info(strFmt(“Hiç hareket görmeyen stok kartlarım : %1 adettir.”, inventTable.recId));

//6. Her bir stok kartı için en yüksek stok hareket miktarını içeren bilgi

setPrefix(“Her bir stok kartı için en yüksek stok hareket miktarını içeren bilgi”);

while select maxof(Qty)

from inventTrans

group by inventTrans.ItemId

{

info(strFmt(“%1 %2″, inventTrans.ItemId,

inventTrans.Qty));

}

}

Bu yazıda sorgu nasıl yazılır temel örneklerle anlatmaya çalıştım. Çok geniş bir konu ve çok ayrıntısı mevcut. Bunu iyi bilmek için veri tabanı yapısına ve temel SQL komutlarına hâkim olmak gerekiyor. SQL yazan birisi burada zorlanmaz. İleriki yazılarımda sorgunun diğer ayrıntılarına değinmeye devam edeceğim.

Selamlar.

www.fatihdemirci.net

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

Dynamics 365 Finance and Operations Data Entity nedir ve nasıl oluşturulur?

Bu yazıda X++ ile yeni bir Data Entity nedir ve nasıl oluşturulur anlatmaya çalışacağım. Öncelikle Data Entity nedir ondan bahsedelim.

Data Entity: Manalı veri kümesi diye özetleyebiliriz. Özellikle Ax2012 ile veri yapısı Normalizasyon mantığına uygun olarak çok fazla tabloya bölündü. Bu sebepten belli bir veriyi görmek ve işlem yapmak için birçok tablonun bir araya gelmesi gerekiyor. Data Entity bizim için bu veri kaynaklarını bir araya getirip anlamlı bir veri kümesi üzerinden işlemleri yapabilmemize olanak sağlıyor. Bizim örneğimizde olduğu gibi kitap ile ilgili 3 tablomuz var ve bunlar aslında birbiriyle ilişkili bir Data Entity ile bu tabloları tek yapıda görüp işlem yapabiliyoruz.

Çok fazla kullanım alanı var. Bunları zamanla anlatmaya çalışacağım. Şimdi yeni bir Data Entity Visual Studio üzerinden nasıl oluşturulur onu görelim.  Benim YouTube kanalım için yaptığım örnek bir kütüphane projem var. Onun üzerinden devam edeceğim.

  1. Projeye sağ tıklayıp AddNew item ile yeni Add New Item diyaloğunu açalım.
  2. Data Model > Data Entity, seçip Data Entity adını tanımlayalım.
  3. Add’e tıklayıp Data entity wizard’ı açalım.

Resim-1

Read more

RunBaseBatch Framework İle Toplu İş Nasıl Oluşturulur?

Bu yazıda Dynamics 365 Finance and Operations için yeni bir toplu iş (Batch Job) nasıl oluşturulur anlatmaya çalışacağım. RunBaseBatch kullanarak bir örnek oluşturacağım. İleriki yazılarımda SysOperation ile de örnekler vereceğim. Toplu iş nedir ona bakalım. Bir işi farklı sunucuda ve belli zamanda istersek tekrarlayan şekilde çalıştırmaya yarayan bir alt yapı diyebiliriz. En basit örneği vereyim. Merkez bankası her gün kurları belli saatte açıklıyor. Sizin bu değerleri alıp sisteme kaydetmeniz gerekiyor. Bunun için bir sınıf yazdınız ve bu sınıf servise bağlanıyor ve değerleri alıyor. Ancak bunun her gün aynı saatte tetiklenmesi lazım. İşte burada toplu iş devreye giriyor ve size bu ayarları yapma imkânı veriyor.

Bu örnekte çok basit bir sınıf oluşturup çalıştıracağız. Öncelikle yeni bir proje oluşturuyorum.

Resim-1

Read more

Page 10 of 17« First...89101112...Last »