Posts Tagged ‘ msdyn365

X++ :14- ValidateWrite Metodu Ne İşe Yarar?

Bu yazıda Dynamics 365 Finance and Operations tablo metotlarından validateWrite() metodunu anlatacağım. validateWrite () bir kaydın DB’ye Insert veya Update işlemelerinden önce çalışan doğrulamaların yapıldığı metottur. Bir örnek yapalım.

FDBookTable tablosunda metotlara sağ tıklayıp validateWrite () metodunu Override ettim.

Resim-1

Şöyle bir kontrol yazalım. Eğer BookCount == 0 ise hata versin. Bunun için checkFailed() kullanılır. Otomatik olarak info verip hata döndüren bir koddur.

Resim-2

Kaydedip tablo tarayıcısını açalım. Sıfır girip kaydetmeye çalıştığımızda hata mesajını alırız.

Resim-3

boolean validateWrite()

{

#isoCountryRegionCodes

boolean                     ret;

DirPartyType                type;

ret = super();

// Warn user if this customer lacks a tax exempt number, but do not fail to save the revision.

if (!this.OneTimeCustomer && TaxVATNumTable::isVATNumMandatory(CustParameters::find().MandatoryVATNum, this))

{

warning(“@SYS54494″);

}

if (ret)

{

if (PaymTerm::isCashAccount(this.PaymTermId) && this.PaymSched)

{

ret = checkFailed(“@SYS25074″);

}

}

// Add check MandatoryTaxGroup is set on CustParameters.

if (ret && CustParameters::find().MandatoryTaxGroup && !this.TaxGroup)

{

ret = checkFailed(“@SYS113299″);

}

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

{

taxRegistrationValidator = TaxRegistrationValidator_MX::construct(this);

ret = taxRegistrationValidator.validateCustomerTaxRegistration() && ret;

}

if (this.MainContactWorker)

{

ret = ret && smmUtility::isValidWorkerInCurrentCompany(this.MainContactWorker);

}

if (ret && !CustVendTable::validateContactForParty(true, this.ContactPersonId, this.Party))

{

ret = checkFailed(“@SCM:InvalidPrimaryContactErrorMessage”);

}

return ret;

}

CustTable ValidateWrite() metodunu inceleyelim. checkFailed kullanımını görebilirsiniz. Eğer birkaç satırdan uzun bir kod gerekiyorsa ayrı metot yazıp buradan onu çağırmak genel yaklaşımdır.

Selamlar.

www.fatihdemirci.net

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

Dynamics 365 Finance and Operations Data Management 1. How to Import Data?

In this article, I will introduce Dynamics 365 Finance and Operations data management infrastructure (Data Management Framework). The scope of data management is very large. I will try to talk about the basic principles in this series. Data is very important for every application, but the reason for the existence of ERP is to collect the data correctly and to create meaningful reports from the collected data. For this reason, the product has always had powerful tools for data management. With the cloud, these are now very advanced. Many different technologies such as CDS and Azure DataLake were involved. Of course, SQL and table structure remains, but with the added Data entities structure, we have a much more flexible and easily managed structure. In this section, I will try to explain how to manage Data Entity and Entity Packeges using the data management infrastructure.

The data management infrastructure consists of the following objects.

  • Data entities – They are meaningful data sets. It is a structure that consists of one or more data sources to view and process a certain data. Data Entity allows us to bring these data sources together and perform transactions over a meaningful data set. It is suitable for reuse. It is used for integration, data transfer and many other purposes.
  • Data project – A project record that holds edited Data Entity and relationships. It can be reused.
  • Data job – Includes run Data Projects, uploaded files and recurring processes.
  • Job history – Keeps the history of transactions.
  • Data package – It is a compressed structure with Data project manifest and Data files. It is created over the data job. It allows importing and exporting multiple files in one operation.

You can use this structure for three different scenarios:

  • Data migration
  • Set up and copy configurations
  • Integration

Let’s get to the topic of this article. We’ll start with a very simple data transfer. We will transfer the vendor group. (VendGroup). Log in to Dynamics 365 Finance and Operations and open Workspaces > Data management worksheet.

Image-1

Click Framework parameters Tile. Tile’ı nasıl çevirmek lazım emin olamadım. En iyi uygunu tuğla veya fayans gibi duruyor ama ben karo diyeceğim. J  You can make many settings from the screen that opens. Now just select the View defaults section as Enhanced view.

Image-2

This is now the advanced view. You can return to the old view by selecting Standard view.

Image-3

Click on the Import tile.

Image-4

Enter the basic information and click Add File.

Image-5

By the way, the data I will transfer is a csv as shown below.

Image-6

From the window that opens, I first select the Entity I want to transfer from. I determine the format. I select my file by clicking Upload and add.

Image-7

I click Yes.

Image-8

Here it says some relationships are missing between my file and the Entity. I can do it here if I want. I lick No for now.

Image-9

Transfer failed due to lack of relationships. However, the project was created. I click the icon under view map.

Image-10

It shows the links between my file and the Entity. Since the headings in my file are tags, it could not auto-match. I can do it manually from here.

Image-11

I have completed my mappings and I save.

Image-12

I go to my project and click Import.

Image-13

It adds the transfer to the working list.

Image-14

It quickly completed the transfer because my data was too little.

Image-15

Now I can open the VendGroup form and see the records I imported.

Image-16

In this article, I made an introduction to data management and performed a very simple data transfer. I will talk about very different uses of this structure in my following articles. Both consultants and software developers need to know the capabilities of this very well. There are many different uses. It is a structure that will save you a lot of time with proper use.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Data Management Framework, 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

How to Move Developments to Dynamics 365 Finance and Operations Test and Live Environments? 2- Merging Code Between Dev and Main Branch.

In this article, I will talk about Merge, which is the second step required to move the developments we made from Visual Studio for Dynamics 365 Finance and Operations to Test and Live environments.  Merge is basically to transfer code between different folders and branches. Our example has two Branches: Dev and Main. The general approach is to transfer the code to Test environment with Dev Build. Then for the approved developments, it is necessary to perform Code Merge from Dev Branch to Main Branch and then create a Build on Main and transfer to live environment. Of course, these are just approaches that you may choose from. You should decide on one of these methodologies according to your own team and the requirements of the project.

So, how do we Merge from Dev to Main? First, open Visual Studio with admin rights.  Open the Team Explorer-> Source Control Explorer screen. In my previous articles, I explained how to connect DevBox to Azure DevOps. So, I directly see my Azure DevOps project. We used a different folder structure in this project.

Image-1

Right click on the Branch you want to start Merge and select Branching and Merging-> Merge.

Image-2

Source Control Merge Wizard opens. Source Branch and Target Branch appears automatically. You can change them if you want. Here I need to talk about Changeset. Changeset is a structure that contains all the objects in a check-in. An automatic ID is created and the transfer operations are usually done with this ID. Select Selected changesets here and continue. I will talk about the other option below.

Image-3

All Changesets that have not been merged will be listed. You are free to choose.

Image-4

When choosing, be careful not to leave any spaces between Changesets. Spaces can cause a lot of Conflicts and they are annoying to deal with. You should track this regularly and properly. Click Next to proceed.

Image-5

A summary screen appears and if you click Finish, the process is completed. In this environment, I do not continue as Merge is not ready yet.

Image-6

Let’s see what happens if we continue with the other option. If proceed by selecting All changes up to a specific version, we can Merge according to certain types.

  • Changeset: When you select this option you can enter any Changeset number. In addition, you can search for Changeset by clicking (…) here and select the Changeset you want from the search window.
  • Date: This option allows you to choose changes for a certain date.
  • Label: It is a mechanism that allows you to take snapshots of your development. If you use it, you can make choices for it here.
  • Label Version: It allows you to choose versions if you are using the Label mechanism.
  • Workspace Version: With this option, Devbox allows you to choose the workspace you are working on.

Image-7

If you choose Changeset, you can search for a specific Changeset number and proceed with the results.

Image-8

In this article, I talked about the Merge logic used for transferring code between branches. It is not essential to transfer the code for the test and the live, but it is necessary to determine the right strategy and automate them. The DevOps engineer has become a very important role for our applications. Now that we have transferred the codes, we can move on to the 3rd stage, Build creation.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Merge, 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++ :19- Insert, Update, Delete Nasıl Kullanılır?

Bu yazıda X++ DataManupulation nasıl yapılır anlatmaya çalışacağım. Veri oluşturma güncelleme ve silme işlemleri ERP için en temel fonksiyonalardır. X++ ile nasıl yapılır bir örnek yapalım. Önceki yazılarımda kullandığım FDBookTable’ı kullanacağım.

class FDDataManupulation

{

public static void main(Args _args)

{

FDBookTable bookTable;

FDBookTable bookTableUp;

;

bookTable.clear(); // TableBuffer’ı temizliyoruz.

bookTable.BookId    = “B005″;

bookTable.BookName  = “Book 1″;

bookTable.insert(); // Yeni kayıt oluşturma

bookTable.clear();

bookTable.BookId    = “B006″;

bookTable.BookName  = “Book 2″;

if(bookTable.validateWrite()) // Kodla insert yaptığınızda validasyon çalışmaz bu yüzden koda eklemek gerekiyor.

{

bookTable.insert();

}

// Güncelleme yapalım. Öncelikle güncellemek istediğimiz kaydı seçmeliyiz ve Transaction bloğu oluşturmalıyız. Bunun sebebi eğer güncelleme sırasında bir hata olursa geri alma yapabilmektir.

ttsbegin;

select forupdate bookTableUp

where bookTableUp.BookId == “B006″;

bookTableUp.BookName = “Book 3″;

bookTableUp.update(); // Tek bir satır günceller

ttscommit;

ttsbegin;

while select forupdate bookTableUp

where bookTableUp.BookId == “B006″

{

bookTableUp.updare(); // Yine tek bir satır günceller ama eğer sorgudan daha çok kayıt gelseydi mesela kapak tipine göre filtre verseydim gelen tüm kayıtları güncellerdi.

}

ttscommit;

// Kayıt silme

delete_from

where bookTableUp.BookId == “B006″; En temel kullanımı budur ama Delete metoduyla da silebilirsiniz.

while select forupdate bookTableUp

where bookTableUp.BookId == “B006″

{

bookTableUp.delete(); // Kaydı siler

}

}

}

Bu yazıda temel Insert Update Delete nasıl yapılır anlatmaya çalıştım. Performans açısından bunları doğru yapmak çok önemli. Birde bunları Bulk halinde yapabilmeniz mümkün onları da ayrıca anlatacağım.

Selamlar.

www.fatihdemirci.net

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

X++ :13- Update Metodu Ne İşe Yarar?

Bu yazıda Dynamics 365 Finance and Operations tablo metotlarından Update() 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. Update() metodu tabloda bir kayıt güncellenirken çalışan metottur.

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

Resim-1

Super()’i daha önce anlatmıştım. Aslı işi yapan yanı DB’deki veriyi güncelleyen ana sınıftaki kodu çağırır. Basit bir kod yazdım her seferinde sayıyı bir arttıracak şekilde.

Resim-2

Tablo tarayıcısını açıp herhangi bir güncelleme yaptığımda sayının arttığını gördüm.

Resim-3

void update(boolean _updateSmmBusRelTable = true, boolean _updateParty = true)

{

CustTable   this_Orig = this.orig();

RecVersion  rv = this_Orig.RecVersion;

ttsbegin;

super();

// Update the full text search table

MCRFullTextSearch::update(this);

this.SysExtensionSerializerMap::postUpdate();

if (_updateSmmBusRelTable)

{

smmBusRelTable::updateFromCustTableSFA2(this, ”, false);

}

if (this_Orig.CustGroup != this.CustGroup)

{

ForecastSales::setCustGroupId(this.AccountNum,

this_Orig.CustGroup,

this.CustGroup);

}

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

// If the customer group has changed

if (this.CustGroup != this_Orig.CustGroup)

{

// clear the ledger cache

LedgerCache::clearScope(LedgerCacheScope::PartyMainAccountDimensionListProvCust);

}

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

{

this.copyInfoToParty();

}

ttscommit;

}

CustTable Update() metodunu inceleyelim. Güncelleme olduktan sonra eğer belli bir alanın güncellenip güncellenmediğini kontrol etmek istiyorsanız this.Orig() ile kaydın orijinal halini alıp kıyaslayabilirsiniz.

CustTable   this_Orig = this.orig();

if (this.CustGroup != this_Orig.CustGroup)

Bu iki satır kullanıma güzel bir örnek.

Selamlar.

www.fatihdemirci.net

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

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

Page 14 of 17« First...101213141516...Last »