Posts Tagged ‘ x++

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

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

How to deploy a new X++ development VM for Dynamics 365 Finance and Operations?

In this article, I will try to explain step by step how to deploy a new virtual machine for new X++ developments. In this example, I will explain how to do this in a client environment. It has a similar logic in virtual machines for partner or educational purposes.

First, we log in to Lifecycle Services. Select your project and select Cloud-hosted environments from the hamburger menu.

Image-1

A page will open and list your environments. Here you can view the details and manage their status. For a new environment, click the + Add button.

Image-2

The first screen that opens has Application Version and Platform Version. You usually select the most recent one. Of course, you should select the version of your environment here. Click Next to proceed.

Image-3

Here you select the type of the environment. Available options are Demo and DevTest. For development, you should select DevTest.

Image-4

There are two options here. First one is used for Build or Test. For development, you should select Develop. For additional Test or Build environments, you should use the option above.

Image-5

Here you can adjust the environment settings. First give a name. This name is not virtual machine’s name. We will set it from the advanced settings. The most important option is D12 machines that are recommended for you, but if you want it to be a little faster and money is not an issue, definitely choose D13. Think of it like D13 is exactly twice as D12 in terms of money and configuration. You can view the advanced settings by clicking Advanced Settings.

Image-6

You can make advanced settings from the screen that opens. You don’t need to change many settings.  I will talk about the important ones. Visual Studio Version has two options.  Pro and Enterprise, use whichever suits you best.

Image-7

Here you can find the details of the version. Generally, you need to keep all development versions the same.

Image-8

Here you can choose whether you want Demo data in your environment. Generally, this is not necessary for the customer environment. If you are going to use Management Reporter, you can select demo data for it as well.

Image-9

In this section you can adjust the disk sizes. These settings are sufficient for general improvements.

Image-10

You can enter the virtual machine name here. If you leave it blank, it automatically assigns a name, and it’s not a good one.

Image-11

After completing the settings, you can start the deploy process by clicking Next.

Image-12

You will then be able to see your new environment in Deploying status in the list below. It usually takes 3-4 hours to complete. I’ve seen it take less. I did not start Deploy because it was not needed for this environment.  When these steps are done, the virtual machine will be ready. Even if you see the virtual machine when you go to the Azure side, do not try to open it before the process is completed. In order to properly use the environment, this must be Deployed.

Image-13

In this article, I briefly explained how to deploy a new development machine and I will explain the necessary settings to start developing on this machine in my next articles.

Regards.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps,X++, Project onboarding, 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 deploy a new Build environment for Dynamics 365 Finance and Operations?

In this article, I will try to explain step by step how to deploy a new Build type virtual machine for Dynamics 365 Finance and Operations.

Before you start, if you have a customer adaptation project, it is recommended to set the SandBox Develop And Test environment that appears here as Build. Because the admin login authorization to this environment will soon be removed and it will not be possible to use it for development. Therefore, it is useful to set it as Build. In addition, thanks to an Agent that will be released soon, we will be able to Build without allocating an entire VM.

In this example, you will see how to create a new Build machine via Cloud-hosted environment. It has the same steps as Sandbox, so it will be a post that will cover both. First, we log in to Lifecycle Services. Select your project and select Cloud-hosted environments from the hamburger menu.

Image-1

A page will open and list your environments. Here you can view the details and manage their status. For a new Build environment, click the + Add button.

Image-2

The first screen that opens has Application Version and Platform Version. You usually select the most recent one. Of course, you should select the version of your environment here. Click Next to proceed.

Image-3

Here you select the type of the environment. Available options are Demo and DevTest. For Build, you should choose DevTest.

Image-4

There are two options here. First one is used for Build or Test. For development, you should select Develop. We will choose the one above.

Image-5

Here you can adjust the environment settings. First give a name. This name is not virtual machine’s name. We will set it from the advanced settings. The most important option is D12  or DS12 V2 machines that are recommended For you, but if you want it to be a little faster and money is not an issue, choose D13. You can view the advanced settings by clicking Advanced Settings.

Image-6

You can make advanced settings from the screen that opens. You don’t need to change many settings.  I will talk about the important ones. Build Agent Name is the name you will see in Azure DevOps. You should give it an appropriate name. The most important part is the Branch Name. I typed Main here. It is case sensitive, so it is necessary to type Branch name correctly.

Image-7

There is no need for Demo data for the Build environment, you can remove it from here.

Image-8

You can name your virtual machine in this section.

Image-9

Settings are done. Continue with Next. I selected D12 V2 for the For you. However the picture shows D13. Recommended dimension is D12 and its derivatives.

Image-10

The confirmation screen will appear. When you click Deploy, the Build environment will be queued to be deployed. This process is completed in 3-6 hours.

Image-11

In this article, I tried to briefly explain how to deploy a new Build machine and I will explain how to Build in my next articles. I will try to explain how the resulting packages are transferred to the test and live. I hope it is useful for you.

Regards.

www.fatihdemirci.net

TAGs: Build VM, Lifecycle Services, LCS, Azure DevOps, X++, 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

ExistsJoin ve NotExistJoin ile Lookup yazmak

Merhaba

Şöyle bir istek olsun.  Seçilecek vergi numarası ne müşteri nede satıcı tablosunda kullanılmış olsun. Bu gibi bir istekte notexistjoin kullanabiliriz. Eğer müşteride veya satıcıda  kullanılanlar listelensin denseydi existjoin kullanacaktık.

client static void lookupETGVATNum (FormStringControl ctrl, Common common)
{
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tablenum(TaxVATNumTable), ctrl);
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource = query.addDataSource(tablenum(TaxVATNumTable));
    QueryBuildRange         queryBuildRange = queryBuildDataSource.addRange(fieldnum(TaxVATNumTable, CountryRegionId));
    QueryBuildDataSource    qdbs;
    ;

// CustTable müşteri tablosunda olmayanları getiriyoruz
    qdbs  = queryBuildDataSource.addDataSource(tablenum(CustTable));
    qdbs.addLink(fieldnum(TaxVATNumTable , vatNum ),fieldnum(CustTable , vatNum ));
    qdbs.joinMode(joinmode::NoExistsJoin);

Read more

Axaptada bir formun hangi menuItem ile çağırıldığını bulmak

Merhaba,

Örneğin sizden LedgerJournalTable formunun kambiyo senetleri günlüğünden çağırıldığında  bazı ek işlemler yapmanızı istediler.

Kambiyo senetlerinden Kambiyo senedi günlüğünü (yani LedgerJournalTable formunu) açan  “LedgerJournalTableExchangeNote” isimli MenuItemdır.

Burada iki yöntem kullanılabilir.
Birincisi: MenuItem’ ın isminden ayırabilirsiniz.

if (element.args().menuItemName() == menuitemDisplaystr(LedgerJournalTableExchangeNote))
{
info(“Beni kambiyo senetlerinden çağırdılar.”);
}

İkincisi:ParmEnum ile ayırabilirsiniz ki bu daha şık olur.

Öncelikle MenuItem’ın EnumTypeParameter ve EnumParameter özelliklerini tanımlamalıyız.
Bizim kullandığımız LedgerJournalTableExchangeNote menuItem’mı için zaten  standartta tanımlamalar yapılmış olduğunda aşağıdaki şekilde kullanabiliriz.

if (element.args().parmEnum() == LedgerJournalType::ExchangeNote)
{
     info(“Beni kambiyo senetlerinden çağırdılar.”);  
}

Axaptada hiyerarşık bir tabloyu ağaç yapısıyla yönetmek

Merhaba

Bazı durumlarda hiyerarşık yapılar kurmak zorunda kalabilirsiniz. Bunu yönetmenin en iyi yolu ağaç(Tree) yapısını kullanmaktır. Axapta standardında bir çok yerde ağaç yapısını görebilirsiniz. Örneğin: LedgerRowDefDesigner formunda sürükle bırakla çalışan bir ağaç yapısı mevcut. Ayrıca  tutorial_Form_TreeControl örnek formu da size fikir verebilir.

Ben örneğimde bir hiyerarşi tablosunun form açıldığında ağaç yapısıyla görüntülenmesini ve  ağaç elemanlarının (Node)  bu form vasıtasıyla düzenlenmesinin (güncelleme , silme ve ekleme) nasıl yapılacağını anlatacağım.

Örnek olarak şöyle bir tablomuz  olsun :

ETGItemGroupTable :    ItemGroupId    ,    ItemGroupName    ,    ItemGroupLevel   ,    ItemGroupIdParent
ItemGroupId  ,   ItemGroupIdParent   =  EDT – DTItemGroupId

ItemGroupId  ,   ItemGroupIdParent   aynı EDT den oluşturuyoruz. Hiyerarşik yapıyı ItemGroupIdParent sayesinde kuracağız.

ItemGroupLevel   Burada  hiyerarşiyle pek ilgisi olmayan benim kurgumla alakalı olan bir seviye kodu var. Ben bu hiyerarşideki bütün elamanların birer seviye kodu olsun istiyorum ve bu kod 1-8 arasında olabilir. Formda gerekli kontrolleri buna göre yazıyorum.

Ulaşmak istediğim form görünümü şu şekilde

Yeni bir form oluşturup veri kaynağını ekleyip tasarımdada gerekli elemanları ekleyelim. Ağaç elemanımızı da ekledikten sonra bazı metodlar yazmamız gerekiyor onlara gecelim.

Read more

WinAPI::createDirectoryPath ‘de “$” işareti hatası

Merhaba

Örenğin şöyle bir adresimiz olsun:

filePath = \\10.34.32.21\axapta$\Ozluk;

WinAPI::createDirectoryPath(filePath);

Komutu ile klasor oluşturmaya çalışırsanız hata alırsınız. Çünki $ işaretinden kaynaklanan bir sorun var.
WinAPI::createDirectoryPath(filePath) metodunda kullanılan strlen(filePath) fonksiyonu $ işartetinden dolayı doğru sonuç döndüremiyor.

createDirectoryPath metodunun içeriğine bakalım:

Read more

Sevk İrsaliyesi Tasarımı

Merhaba

Ax üzerinde sevk irsaliyesi ve fatura tasarımı gibi işler çetrefilli işlerdir.  Axaptada tasarımsal işlemler genelde zordur.

Ancak belli bazı noktaları bilip mudahalelerinizi yaparsanız kolay bir şekilde istediğiniz güncellemeyi yapmış olursunuz.

Biz bu makalemizde Ax uzerinde matbu bir sevk irsaliyesi tasarımının nasıl yapılabileceğinden bahsedeceğiz.

Öncelikle Ax’ta standart Sevk İrsaliyesi  “SalesPackingSlip”  raporudur. Denemek için  “CustPackingSlipJournal” formundan “Önizleme/Yazdır “  butonunda çıkan Kopya ve Orjinal butonundan  Sevk İrsaliyesi bastırabilirsiniz.

Asıl olan “SalesPackingSlip” raporunda değişiklik yapmayalım. Çogaltip  “ETGSalesPackingSlip” ismini verelim. Ve MenuItem  oluşturalım. Oluşturdğumuz item için multiselect özelliğini yes yapalım.

“ETGSalesPackingSlip” raporunda dizaynında “Generated Design” kısmında irsaliyemizin tasarımını görebilirsiniz.

Burada istenilen değişikler yapılabilir. İstenmeyen alanlar çıkartılıp yeni alanlar eklenebilir. Ancak bizim yapacağımız matbu tasarım standarttan çok farklı olduğu için ben “Generated Design” ‘da bulunan bütün alanaları siliyorum. Bu işlemden sonra raporu derleyip hata veren kısımları yorum satırı haline getiriyorum. Kendim 4 tane ProgramableSection açıyorum. Bunlar:

1.  Sct1 : Başlık bilgilerinin olacağı kısım.

2. Sct2 : İrsaliye satırlarının olacağı kısım.

3. Sperater : Satırlarda eksik kalan kısımları tamamlamak için kullacağım boş bir satır.

4. Sct3 : Toplam ve alt bilgilerin görüneceği kısım. 

Sct1 için örnek olarak iki tane display metod yazayım diğerlerini siz ihtiyacınıza göre ekleyebilirsiniz.

display name dispDeliveryName()
{
      return CustPackingSlipJour.DeliveryName;

}

Read more

Splitter Control

Merhaba

Axapta formlarda splitter kullanımı hakkında bir örnek yapacağız.

İşte  örneğimiz:

Formda 2 grubunuz olduğunu varsayalım,    LeftGroup ve RightGroup . Bu iki grubu yan yana görmek için design  property columns=2 yapalım. Şimdi bu iki grup arasında splitter olsun istiyoruz. Bu sayede istediğimiz gibi resize vb. kontrolleri yapabileceğiz. Bunu yapabilmek için şu adımları takip etmemiz gerekiyor:

1. Daha önce oluşturduğumuz iki grubun arasına  SplitterGroup adında yeni bir grup oluşturalım. bu grubu splitter için kullanacağız.

2. SplitterGroup parametreleri şunlar olsun :

    AlignChild       = No
    AlignControl     = Yes
    AutoDeclaration  = Yes
    FrameType        = Raised3D
    Height           = ColumnHeight
    HideIfEmpty      = No
    Width            = 4

3. LeftGroup parametreleri şunlar olsun :

    Width            = 250
    Height           = ColumnHeight
    AutoDeclaration  = Yes

4. Rightgroup parametreleri şunlar olsun :

    Height           = ColumnHeight
    Width            = ColumnWidth

5. Şu anda 3 grubumuz olduğu için  design  property columns=3 yapalım. 

6. Splitter bizim SplitterGroupa’a özellik eklemeizle elde edeceğimiz bir fonksiyon. Bunu axaptada yapabilmemizi sağlayan iki class var SysFormSplitter_X or SysFormSplitter_Y.

bizim durumda SysFormSplitter_X kullanmamız gerekiyor. formun class declaration’da Şu tanımlamayı yapalım:

public class FormRun extends ObjectRun
{
    SysFormSplitter_X sysFormSplitter_X;
}

7. Axapta clasını formumuzun initinde oluşturuyoruz. The StartupHeight parameter is often omitted since it is optional.
 

public void init()
{
   super();

   sysFormSplitter_X = new
   SysFormSplitter_X(SplitterGroup,LeftGroup,element,100);
}

8. Şimdi  plitterGroup için çeşitli mouse metodlarını yazmalıyız :

int mouseDown(int x, int y, int button, Boolean Ctrl, Boolean Shift)
{
    int ret = super(x,y,button,ctrl,shift);
    ;

    sysFormSplitter_X.mouseDown(x,y,button,ctrl,shift);
    return ret;
}

int mouseMove(int x, int y, int button, Boolean Ctrl, Boolean Shift)
{
    ;

    super(x,y,button,ctrl,shift);

    return sysFormSplitter_X.mouseMove(x,y,button,ctrl,shift);
}

int mouseUp(int x, int y, int button, Boolean Ctrl, Boolean Shift)
{
    int ret =  super(x,y,button,ctrl,shift);
    ;

    sysFormSplitter_X.mouseUp(x,y,button,ctrl,shift);
    return ret;
}

Evet oldu. X-Splitter artık düzgün bir şekilde çalışır.

 
Y-splitter da buna benzer şekilde tanımlayabilirsiniz.

Selamlar.

Page 1 of 912345...Last »

Türkiye'nin en doğru, dolu dolu ve hatasız anlatımları ile teknik yazılarına, makalelerine, video'larına, seminerlerine, forum sayfasına ve sektörün önde gelenlerine ulaşabileceğiniz teknik topluluğu, MSHOWTO