Author Archive

Dynamics 365 Finance and Operations: Ürün reçetesi günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla ürün reçetesi günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir.

Gelelim örnek kodumuzu. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Burada bir madde kodundan diğerine aktarım yapıyoruz gibi düşünebilirsiniz.  Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateBomJournal

{

public static void main(Args _args)

{

InventJournalTableData  journalTableData;

InventJournalTrans      inventJournalTrans;

InventJournalTrans      InventJournalTransOld;

JournalCheckPost        journalCheckPost;

InventJournalTable      journalTable;

InventDim               FromInventDim,toInventDim;

ItemId                  ItemId      = “I0002″;

ItemId                  toItemId    = “I0003″;

inventDimId             inventDimId = “D0003″;

InventJournalNameId     TransferJournalNameId;

InventTable             inventTable;

InventBatch             InventBatchNew;

InventDim               InventDim;

InventDim               inventDimFrom;

int i;

;

ttsbegin;

inventTable = inventTable::find(ItemId);

InventDim   = InventDim::find(inventDimId);

TransferJournalNameId = “S0944″;

journalTable.clear();

journalTable.JournalNameId  = TransferJournalNameId;

journalTable.initFromInventJournalName(InventJournalName::find(TransferJournalNameId));

journalTableData            = JournalTableData::newTable(journalTable);

journalTable.JournalId      = journalTableData.nextJournalId();

journalTable.JournalType    = InventJournalType::BOM;

journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

journalTable.Description    = “Bom journal”;

journalTable.insert();

i++;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = InventDim.InventSizeId;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

InventJournalTransOld.clear();

InventJournalTransOld.ItemId           = ItemId;

InventJournalTransOld.InventDimId      = inventDimFrom.InventDimId;

InventJournalTransOld.JournalId        = journalTable.JournalId;

InventJournalTransOld.TransDate        = today();

InventJournalTransOld.BOMLine          = NoYes::Yes;

InventJournalTransOld.Qty              = -1;

InventJournalTransOld.JournalType      = InventJournalType::BOM;

InventJournalTransOld.LineNum = i;

InventJournalTransOld.insert();

i++;

InventJournalTrans.clear();

InventJournalTrans.ItemId              = toItemId;

if(!InventBatch::find(InventDim.inventBatchId ,toItemId) )

{

InventBatchNew.clear();

InventBatchNew.itemId = toItemId;

InventBatchNew.inventBatchId = InventDim.inventBatchId;

InventBatchNew.insert();

}

InventJournalTrans.InventDimId         = inventDimFrom.InventDimId;

InventJournalTrans.ItemId              = toItemId;

InventJournalTrans.Qty                 = 1;

InventJournalTrans.JournalId           = journalTable.JournalId;

InventJournalTrans.JournalType         = InventJournalType::BOM;

InventJournalTrans.TransDate           = today();

inventJournalTrans.LineNum = i;

InventJournalTrans.insert();

InventJournalTransold.InventTransIdFather = InventJournalTrans.InventTransId;

InventJournalTransOld.update();

journalCheckPost = InventJournalCheckPost::newPostJournal(journalTable);

if(journalCheckPost.validate())

{

journalCheckPost.run();

}

info(strFmt(“%1 journal created.”, journalTable.JournalId));

ttscommit;

}

}

Bu yazıda ürün reçetesi günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: Transfer günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla stok transfer günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir.

Gelelim örnek kodumuzu. Transfer günlüklerinde boyut değişimi yapılır. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Yaptığı şeyse bir InventSize’dan diğerine transfer işlemi yapmak. Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateTransferJournal

{

public static void main(Args _args)

{

InventJournalTableData  journalTableData;

InventJournalTrans      inventJournalTrans;

JournalCheckPost        journalCheckPost;

InventJournalTable      journalTable;

InventDim               FromInventDim,toInventDim;

InventJournalNameId     TransferJournalNameId;

InventDim               InventDim;

InventTable             inventTable;

InventDim               inventDimFrom;

InventBatch             InventBatchNew;

ItemId                  ItemId      = “I0002″;

inventDimId             inventDimId = “D0003″;

EcoResSizeName          inventSizeIdTo;

int i;

;

ttsbegin;

inventTable = inventTable::find(ItemId);

InventDim   = InventDim::find(inventDimId);

TransferJournalNameId = “S0944″;

journalTable.clear();

journalTable.JournalNameId  = TransferJournalNameId;

journalTable.initFromInventJournalName(InventJournalName::find(TransferJournalNameId));

journalTableData            = JournalTableData::newTable(journalTable);

journalTable.JournalId      = journalTableData.nextJournalId();

journalTable.JournalType    = InventJournalType::Transfer;

journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

journalTable.Description    = “Transfer journal”;

journalTable.insert();

i++;

if(!InventBatch::find( InventDim.inventBatchId ,ItemId) )

{

InventBatchNew.clear();

InventBatchNew.itemId = ItemId;

InventBatchNew.inventBatchId = InventDim.inventBatchId;

InventBatchNew.insert();

}

inventJournalTrans.clear();

inventJournalTrans.ItemId           = ItemId;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = InventDim.InventSizeId;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

inventJournalTrans.InventDimId      = inventDimFrom.InventDimId;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = inventSizeIdTo;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

inventJournalTrans.ToInventDimId    = inventDimFrom.InventDimId;

inventJournalTrans.JournalId        = journalTable.JournalId;

inventJournalTrans.TransDate        = today();

inventJournalTrans.Qty              = 1;

inventJournalTrans.JournalType      = InventJournalType::Transfer;

inventJournalTrans.LineNum = i;

inventJournalTrans.insert();

journalCheckPost = InventJournalCheckPost::newPostJournal(journalTable);

if(journalCheckPost.validate())

{

journalCheckPost.run();

}

info(strFmt(“%1 journal created.”, journalTable.JournalId));

ttscommit;

}

}

Bu yazıda Stok hareket günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: Hareket günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla stok hareket günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir bu tip durumlarda ben hazırda kullanmak için bazı kod örneklerimi saklıyorum. Bir seri halinde bazı günlük ve sipariş oluşturma örnekleri paylaşacağım.

Gelelim örnek kodumuzu. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateMovementJournal

{

public static void main(Args _args)

{

inventJournalTable              inventJournalTable;

inventJournalTrans              inventJournalTrans;

InventJournalNameId             inventJournalName;

InventDim                       inventDim;

JournalCheckPost                journalCheckPost;

ItemId                          ItemId      = “I0002″; // Madde kodu

inventDimId                     inventDimId = “D0003″; // Boyut

ttsbegin;

inventJournalTable.clear();

inventJournalName = DmrParameters::find().MovementJournalName;

inventJournalTable.initFromInventJournalName(InventJournalName::find(inventJournalName));

inventJournalTable.description = “Voyage ID %1″ ;

inventJournalTable.insert();

inventJournalTrans.clear();

inventJournalTrans.initFromInventJournalTable(inventJournalTable);

inventJournalTrans.TransDate    = systemDateGet();

inventJournalTrans.ItemId       = ItemId;

inventJournalTrans.initFromInventTable(InventTable::find(ItemId));

inventJournalTrans.Qty          = 1;

inventJournalTrans.InventDimId  = inventDimId;

if(inventJournalTrans.ValidateWrite())

{

inventJournalTrans.insert();

}

else

{

throw error(“Journal line cannot be created.”);

}

journalCheckPost = InventJournalCheckPost::newPostJournal(inventJournalTable);

journalCheckPost.run();

ttscommit;

}

}

Bu yazıda Stok hareket günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: InventSizeId Lookup Nasıl Yapılır?

Bu yazıda Dynamics 365 Finance and Operations içinde stok boyutlarından biri olan InventSize için nasıl lookup yazabilirsiniz bir örnekle anlatacağım. InventSize bilgisi EcoResSize tablosunda tutuluyor ayrıca ürünlerle ilişkileri de EcoResProductMasterSize tablosunda tutulmakta.

Örneğimiz belli bir ürünün InventSize bilgilerini gösterecek bir lookup oluşturacak.

Resim-1

public void lookup()

{

SysTableLookup                sysTableLookup;

QueryBuildDataSource    qbds;

Query                                  query;

sysTableLookup = SysTableLookup::newParameters(tableNum(EcoResSize), this);

sysTableLookup.addLookupfield(fieldNum(EcoResSize, Name));

query = new Query(queryStr(EcoResProductVariantSizeLookup));

qbds =  query.dataSourceTable(tableNum(EcoResProductMasterSize));

qbds.rangeField(fieldNum(EcoResProductMasterSize,        SizeProductMaster)).value(queryValue(EcoResProduct::findByProductNumber(fromItemId).RecId));

sysTableLookup.parmQuery(query);

sysTableLookup.performFormLookup() ;

}

Bu yazıda InventSize Lookup nasıl yazabiliriz basit örnekle anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventSizeId, EcoResSize, Lookup, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Dynamics 365 Finance and Operations: Kodla Ön Ödeme Oluşturup Deftere Nakletmek.

Bu yazıda Dynamics 365 Finance and Operations standart özelliklerinden biri olan ön ödemeyi kodla nasıl yapıyoruz bir örnekle anlatacağım.

Bu işlem Satınalma siparişleri üzerinden yapılabiliyor. Ancak bize gelen talepte bunun basit bir onaya tabi olması istendi. Bunun için bir ara tablo yapıp onun üzerinden otomatik ön ödeme oluşturup deftere nakletmek istedik.

Resim-1

Şöyle bir kodla işimizi halldebiliriz.

PurchFormLetter             purchFormLetter;

purchTable                         purchTable;

PurchPrepayTable          PurchPrepayTable;

PurchId                            purchId;

PackingSlipId                  packingSlipId;

;

ttsBegin;

purchTable = PurchTable::find(DmrSellerAdvance.OrderNumber);

PurchPrepayTable = PurchPrepayTable::findPurchId(DmrSellerAdvance.OrderNumber , true);

if(PurchPrepayTable.RecId == 0)

{

PurchPrepayTable.clear();

PurchPrepayTable.Type = PurchPrepayType::Fixed;

PurchPrepayTable.PurchTable = DmrSellerAdvance.OrderNumber;

PurchPrepayTable.PrepayCategoryId = 313452354; // Kategori zorunlu

PurchPrepayTable.Currency = PurchTable::find(DmrSellerAdvance.OrderNumber).CurrencyCode;

PurchPrepayTable.Description = DmrSellerAdvance.Description;

PurchPrepayTable.Value = DmrSellerAdvance.PayableQty; // Ödenecek tutar burası.

PurchPrepayTable.PrepayLimit = DmrSellerAdvance.OrderQty;

PurchPrepayTable.PrepayAvailable = DmrSellerAdvance.PayableQty;

purchPrepayTable.recalculatePrepayLimit();

purchPrepayTable.recalculateAmounts(false);

PurchPrepayTable.insert();

}

Else

// Eğer birden çok ödeme yapılacaksa Value güncelleyerek yapabilirsiniz.

{

PurchPrepayTable.Value = PurchPrepayTable.Value + DmrSellerAdvance.PayableQty;

purchPrepayTable.recalculatePrepayLimit();

purchPrepayTable.recalculateAmounts();

PurchPrepayTable.update();

}

purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice);

PurchFormLetter.parmInvoiceType(PurchInvoiceType::VendorAdvance); // Fatura tipi böyle olmalı.

purchFormLetter.update(purchTable, NumberSeq::newGetNumFromId(  PurchParameters::numRefPurchAdvanceVoucher().NumberSequenceId).num());

ttsCommit;

Bu yazıda bir ön ödeme kaydı oluşturup deftere nakletme örneğini inceledik. Satınla tarafı biraz kafa karıştırıcı olabiliyor. Bekleyen tedarikçi faturası olmadı sürece direk sipariş üzerinden faturalama yapabilirsiniz.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, PurchInvoiceType::VendorAdvance, PrePayment, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365,X++

Dynamics 365 Finance and Operations On-hand List(Eldeki) formunun boyut değerlerine nasıl ulaşılır?

Bu yazıda Dynamics 365 Finance and Operations içinde bir eldeki stokları gösteren On-hand List formunun biraz karışık yapısı var. Formun veri kaynağında InventDim var ancak form direk bu veri kaynağından verileri göstermiyor. Aslında bir sınıf boyut değerlerini yönetiyor. Eğer boyut değerlerine ulaşmanız gerekirse ufak bir kodla düzenleme yapmak gerekiyor.

Bu örnekte eldeki formundan kendi yaptığım bir formu açmak ve InventSum ve belli boyut değerlerini aktarmak istiyorum.

Resim-1

Formun Extension’nını oluşturup bir buton ekliyorum. Bu butonun onClicked eventine kod yazacağız.

Resim-2

Yeni bir sınıf oluşturup aşağıdaki kodu yazıyorum.

class DmrInventOnhandItemFormEventHandler

{

[FormControlEventHandler(formControlStr(InventOnhandItem, DmrSwellShrink), FormControlEventType::Clicked)]

public static void DmrSwellShrink_OnClicked(FormControl sender, FormControlEventArgs e)

{

InventDim               inventDimFrom , dimValues;

InventSum               InventSum       = sender.formRun().dataSource(formDataSourceStr(InventOnhandItem, InventSum)).cursor();

dimValues.data(InventSum.joinChild( )); // Asıl işi yapan kod bu. Boyut değerlerini almamızı sağlıyor.

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = dimValues.InventSiteId;

inventDimFrom.InventLocationId  = dimValues.InventLocationId;

inventDimFrom.InventSizeId      = dimValues.InventSizeId;

inventDimFrom.inventBatchId     = dimValues.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

Args                args            = new Args();

Form                formToCall      = new Form(‘DmrSwellShrink’);

FormButtonControl   callerButton    = sender as FormButtonControl;

FormRun             form            = callerButton.formRun();

args.caller(form);

args.object(formToCall );

args.record(InventSum);

args.parm(inventDimFrom.inventDimId);

form = ClassFactory.formRunClass(args);

form.init();

form.run();

form.wait();

}

}

Açılan formun init metodunda aşağıdaki kodla gerekli bilgileri alıyorum.

inventSum       = element.args().record();

inventDimId     = element.args().parm();

inventDimArgs   = InventDim::find(InventDimId);

Bu yazıda eldeki formun boyut değerlerine nasıl ulaşırız bir örnekle göstermeye çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventSum, InventDim, InventOnHandItem, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: HTML Editor Kullanımı.

Bu yazıda Dynamics 365 Finance and Operations içinde HTML Editor nesnesi nasıl kullanılır anlatamaya çalışacağım.

Standart bir form ve tablo üzerinden nasıl oluşturulduğuna bakalım. SmmActivities formunda Identification sekmesinden HTML Editor örneği mevcut. Buradan istediğiniz gibi bir metin oluşturabilirsiniz. Source butonu ile oluşan Html kodunu görebilirsiniz. Nasıl oluşturulduğuna bakalım.

Resim-1

Öncelikle Memo tipinde bir tablonuzda bir alan açmalısınız. EDT önemli değil yeni bir tane oluşturup kullanabilirsiniz.

Resim-2

Sonra formda yeni bir nesne oluşturma kısmından HTML Editor u seçip oluşturuyoruz.

Resim-3

Oluşan Html Editor için ekteki tanımları yapabilirsiniz. Width kısmını formunuza göre ayarlayabilirsiniz.

Resim-4

Bu aşamaları uygularsanız HTML Editor kullanıma hazır olacak. Bu nesne bize özellikle tasarım ihtiyacı olan işlerde kolaylık sağlıyor. Burada oluşan metni direk SSRS raporlarınızda kullanabiliyorsunuz.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, HTML Editor, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?
Bu yazıda Dynamics 365 Finance and Operations içinde oluşturulan yeni bir tabloya adres alanı nasıl eklenir anlatmaya çalışacağım.
Öncelikle yeni bir tablo oluşturup Location alanı oluşturuyoruz. EDT olarak LogisticsLocationRecId kullanıyoruz. Relation ve Mapping’i resimdeki gibi tanımlayalım.


Resim-1
Relation özelliklerini aşağıdaki gibi tanımlıyoruz.

Resim-2
Bu aşamada sonra formunuza veri kaynağı olarak LogisticPostalAddress tablosunu ekliyoruz ve resimdeki özellikleri tanımlıyoruz. Standart Form olan CustBankAccount formundan tasarım sekmesini kopyalayabilirsiniz.

Resim-3
Aşağıdaki kodları ekliyoruz.
[Form]
public class DmrAddressTable extends FormRun
{
LogisticsPostalAddressFormHandler addressController;
public void init()
{
super();
addressController = LogisticsPostalAddressFormHandler::newParameters(DmrAddressTable_ds,LogisticsPostalAddress_ds);
addressController.callerUpdateQuery(fieldNum(DmrAddressTable,Location));
}
public LogisticsPostalAddressFormHandler getAddressController()
{
return addressController;
}
[DataSource]
class DmrAddressTable
{
public int active()
{
int ret;
ret = super();
addressController.callerActive();
addressController.callerUpdateButtons(newAddress,editAddress,clearAddress,mapButton);
return ret;
}
public void write()
{
super();
addressController.callerResearch();
}
}
[DataSource]
class LogisticsPostalAddress
{
public void write()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
// super();
}
public boolean validateWrite()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
//ret = super();
return true;
}
}
}

Derleyip formumuzu açabiliriz.

Resim-4
Bu yazıda yeni bir adres alanı nasıl eklenir anlatmaya çalıştım. Burada benim karşılaştığım bir sorun bu yapı bir tabloda bir adres alanını yönetebiliyor. İki adres alnınız varsa bu haliyle ben çalıştırmadım. Yöneten sınıflara direk alan adını yazmışlar her şeyi çoğaltım ikinci bir alanı destekleyen bir yapı kurmak gerekiyor. Astarı yüzünden pahalı oluyor.
Selamlar.
Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.
Referanslar:
www.mshowto.org
www.fatihdemirci.net
TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations OnClicked Event Handler?

Bu yazıda Dynamics 365 Finance and Operations’da Event Handler nasıl kullanılır bir örnekle anlatmaya çalışacağım.

Şöyle bir örnek olsun. Standart bir forma bir CheckBox eklemek istiyoruz. Bu CheckBox işaretlendiğinde bir filtre çalışacak. Bunun için formdan bir Extension oluşturup CheckBox eklemek gerekiyor. Bu kısımları geçiyorum daha önce anlatmıştım. Burada asıl bu işaretleme olduğunda yazacağımız koda odaklanacağım.

Öncelikle bir Class oluşturmamız gerekiyor. Adının sonuna EventHandler eklemekte fayda var.

class CustInvoiceJournalEventHandler

{

/// <summary>

///

/// </summary>

/// <param></param>

/// <param name=”e”></param>

[FormControlEventHandler(formControlStr(CustInvoiceJournal, DmrShowAllRecord), FormControlEventType::Clicked)]

public static void DmrShowAllRecord_OnClicked(FormControl sender, FormControlEventArgs e)

{

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

FormRun                 elementForm         = sender.formRun(); // DataSource için gerekecek

FormCheckBoxControl     showAllRecord      ;

FormDataSource          custInvoiceJour_ds  = elementForm.dataSource(formDataSourceStr(CustInvoiceJournal, CustInvoiceJour)) as FormDataSource;

#IsoCountryRegionCodes

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

{

showAllRecord       = elementForm.design().controlName(formControlStr(CustInvoiceJournal, DmrShowAllRecord)); // CheckBox ‘a ulaşıyoruz.

custInvoiceJourDS   = custInvoiceJour_ds.query().dataSourceTable(tableNum(custInvoiceJour));

eInvoicePoolTableDS = custInvoiceJour_ds.query().dataSourceTable(tableNum(FDEInvoicePoolTable));

if(showAllRecord.checked())

{

eInvoicePoolTableDS.enabled(false);

}

else

{

eInvoicePoolTableDS.enabled(true);

}

custInvoiceJour_ds.executeQuery();

}

}

}

Bu yazıda EventHandler nasıl kullanılır anlatmaya çalıştım. Birçok durumda Extension yerine EventHandler kullanmak daha pratik oluyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, EventHandler,Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations Yeni Bir SSRS Raporu Nasıl Yapılır?

Bu yazıda Dynamics 365 Finance and Operations içinde yeni bir SSRS raporu nasıl yapılır anlatamaya çalışacağım.

Öncelikle bu örnekte ben Query base bir format değil, Data Provider tipinde bir rapor yapacağım. Raporda PurchLine üzerinden bir çıktı tasarımı yapacağız.

Bu yüzden 3 tane sınıfı ve bir temp tabloya ihtiyaç var.

Olan bir temp tabloda kullanabilirsiniz ama ben bu rapor için DmrPurchConTmp isminde bir tablo oluşturdum. Alanları ihtiyacınıza göre ekleyebilirsiniz.

[DataContractAttribute]

class DmrPurchLinePrintContract

{

RecId  purchLineRecId;

[

DataMemberAttribute('purchLineRecId'),

SysOperationLabelAttribute(literalStr("Purchase Contract")),

SysOperationControlVisibilityAttribute(false)

]

public RecId parmpurchLineRecId(RecId _purchLineRecId = purchLineRecId)

{

purchLineRecId = _purchLineRecId;

return purchLineRecId;

}

}

class DmrPurchLinePrintController extends SrsReportRunController

{

public static DmrPurchLinePrintController construct()

{

return new DmrPurchLinePrintController ();

}

public static void main(Args _args)

{

PurchLine legalProceed;

DmrPurchLinePrintContract  contract;

DmrPurchLinePrintContract  controller = new DmrPurchLinePrintContract  ();

if (_args.record() && _args.dataset() == tableNum(PurchLine))

{

legalProceed = _args.record();

controller.parmReportName(ssrsReportStr(DmrPurchLinePrint,Report));

controller.parmDialogCaption(“Purch Cont “);

controller.parmArgs(_args);

contract = controller.parmReportContract().parmRdpContract();

contract.parmpurchLineRecId(legalProceed.RecId);

controller.parmShowDialog(false);

controller.startOperation();

}

}

}

[SRSReportParameterAttribute(classStr(DmrPurchLinePrintContract))]

class DmrPurchContLayoutPrintDP extends  SrsReportDataProviderPreProcess

{

DmrPurchConTmp  DmrPurchConTmp;

[SRSReportDataSetAttribute(tablestr(DmrPurchConTmp))]

public DmrPurchConTmp getDmrPurchConTmp()

{

select DmrPurchConTmp;

return DmrPurchConTmp;

}

public void processReport()

{

DmrPurchContLayoutPrintContract contract;

purchLine                       purchLine;

contract = this.parmDataContract() as DmrPurchLinePrintContract;

DmrPurchConTmp.setConnection(this.parmUserConnection());

purchLine = purchLine::findRecId(contract.parmpurchLineRecId());

if (purchLine)

{

this.populateDmrPurchConTmp(purchLine);

}

}

void populateDmrPurchConTmp(purchLine _purchLine)

{

DmrPurchContQuantity    purchContQuantity;

PurchLine               purchLine;

;

select firstonly purchContQuantity

where purchContQuantity.InventTransId == _purchLine.InventTransId;

DmrPurchConTmp.InventTransId  = _purchLine.InventTransId;

DmrPurchConTmp.insert();

}

}

Bu sınıfları oluşturduktan sonra raporu tasarlamaya geçebiliriz. Öncelikle yeni bir rapor oluşturuyoruz.

Resim-1

Yeni bir rapor tasarımı oluşturuyoruz. Burada çıktı olacağı için Precision Design kullandım. Ayrıca sayfa özelliklerinde A4 seçtim. Bu arada isim önemli kodumuzda bunu kullandık.

Resim-2

Çift tıklayıp tasarım ekranını açabilirsiniz. Ben basitçe eklemler yaptım. Çıktı olacağı için sabit yerler var.

Resim-3

Tasarımdan sonra bir Menu Item oluşturup Controller sınıfına bağlıyoruz.

Resim-4

Artık raporu almak istediğimiz forma ekleyip Deploy edebiliriz. Derlem ve eşitleme yapmayı unutmayın.

Resim-5

İlgili forma gelip raporu çalıştırıyorum.

Resim-6

Rapor çıktısını görebiliyorum.

Resim-7

Bu yazıda bir çıktı tasarımı için SSRS raporu nasıl yapılır anlatmaya çalıştım. 3 sayfalık bir çıktı tasarlamam gerekiyor. Sayfa sayfa yapmak pek mükün olmadı siz 3 sayfa uzunluğunu ayarlarsanız otomatik bölüyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, SSRS, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365

Page 2 of 4012345102030...Last »