Cumartesi, Kasım 13, 2010

geçecek, her şey geçer. hepsi geçer.

hatta sonra, çok sonra anılar hükmünü yitirdikten,

onu iyice unuttuktan,

içindeki acının yerini kocaman bir boşluk aldıktan,

keşke geçmeseydi dedikten sonra,

keşke acısını bir hastalık gibi yüreğimde taşısaydım desen bile geçer.

zaman insanla oynamayı seven hem zalim hem de merhametli bir tanrıdır.

ona karşı çıkamazsın.yapman gereken beklemek.

onun, derin bir unutuşla bizi rahatlatacak örtüsünü üzerimize örtmesini beklemek...


"gitme..

geçmiş zaman olursun gidince

birkaç mısra kalırsın

geleceğin ucundan

geçmez kalbimin

bir şiire tamamlanırsın"

...

Dün sabaha karşı kendimle konuştum.

Ben hep kendime çıkan bir yokuştum.

Yokusun başında bir düşman vard

ıOnu vurmaya gittim kendimle vuruştum.

Cuma, Kasım 12, 2010

Print Map Values

Use This code for write record inside your map
void printmapValues()
{
MapIterator mi;

mi = new MapIterator(mapGroupVariablesValues);

while (mi.more())
{
print mi.key();
print mi.value();

mi.next();
}
}

Create Custom Context Menu

Create Custom Context Menu

public int showContextMenu(int _menuHandle)
{

int ret,Clicked2;
PopupMenu popupMenu = PopupMenu::create(_menuHandle,element.hWnd());

;

if(!SalesLine.RecId)
{
Clicked2 = popupMenu.insertItem("Ürün Bulucu"); Ürün Bulucu is a item add standart context menu
}

ret = popupMenu.draw();

switch (ret)
{
case Clicked2 :
salesline_ds.OpenItemConfirmation();//Open my form
break;
}

return ret;


}

Sort-GroupBy-Sum

public void executeQuery()
{
query tmp;
AGC_Variablevalue value;
AGC_ItemVariableId Id;
Queryrun qr;

// AGC_VariableLinksGroup localAGC_VariableLinksGroup;
;
tmp = this.method2();//join edilmis query
while select AGC_VariableLinksGroup where AGC_VariableLinksGroup.AGC_VariableGroupID == AGC_VariableValues.AGC_VariableGroupID
{
Id = AGC_VariableLinksGroup.AGC_ItemVariableID;
if (AGC_VariableLinksGroup.AGC_Set)
{
while select AGC_VariableValues where AGC_VariableValues.AGC_ItemVariableID == AGC_VariableLinksGroup.AGC_ItemVariableID
{
select InventSum where InventSum.ItemId == AGC_VariableValues.ItemId;
if (InventSum)
{
value = AGC_VariableValues.AGC_VariableValue;
tmp.dataSourceTable(tablenum(AGC_VariableValues)).addSortField(fieldnum(AGC_VariableValues,AGC_VariableValue));
tmp.dataSourceTable(tablenum(AGC_VariableValues)).orderMode(OrderMode::GroupBy);
tmp.dataSourceTable(tablenum(InventSum)).addSelectionField(fieldnum(InventSum,PhysicalInvent),SelectionField::Sum);

}
}
}
}

qr = new QueryRun(tmp);
while (qr.next())
{
InventSum = qr.get(tablenum(InventSum));
print InventSum.ItemId;
}

}

Insert Record Set

public ItemId insertVariableValuesTable(map _mapGroupVariablesValues,AGC_VariableGroup localAGC_VariableGroup,AGC_VariableLinksGroup localAGC_VariableLinksGroup )
{

;
recordInsertList = new RecordInsertList(tablenum(AGC_VariableValues));
mi = new MapIterator(_mapGroupVariablesValues);
if (!mi.more())
{
throw error(strfmt('@AGC73'));
}
NumberSeqItemId = NumberSeq::newGetNumFromCode(localAGC_VariableGroup.AGC_ReferenceNumber);
itemId = NumberSeqItemId.num();
InventTable = inventTable::find(itemId);
if(InventTable.RecId)
{
throw error(strfmt('@AGC74',itemId));
}

else
{
do
{
//bu stok kartı daha onceden yaratılmamıssa:
if (localAGC_VariableLinksGroup.AGC_VariableMandatory)//acilan alan zorunlu olan bir alansa ve bos gecilmisse
{
if ( mi.value() == "")
throw error(strfmt('@AGC70',mi.key()));

}
if ((localAGC_VariableLinksGroup.AGC_VariableMandatory && mi.value()!="")|| (localAGC_VariableLinksGroup.AGC_VariableMandatory == false) )
{
if (localAGC_VariableLinksGroup.AGC_VariableUnique)//Uniq bir alansa
{
while select AGC_VariableValues where AGC_VariableValues.ItemId == itemId
{
if (AGC_VariableValues.AGC_VariableValue == variableValue)
{
throw error(strfmt('@AGC72',AGC_VariableValues.AGC_ItemVariableID));
}
}
}

ttsbegin;
AGC_VariableValues.ItemId = ItemId;
AGC_VariableValues.AGC_VariableGroupID = localAGC_VariableGroup.AGC_VariableGroupID;
AGC_VariableValues.AGC_ItemVariableID = mi.key();
AGC_VariableValues.AGC_VariableValue = mi.value();
AGC_VariableValues.AGC_Description = localAGC_VariableLinksGroup.AGC_Description;
recordInsertList.add(AGC_VariableValues);


}
mi.next();
}while(mi.more());
}
recordInsertList.insertDatabase();
ttscommit;
return itemId;
}

Building a query object



Query objects are used to visually build SQL statements. They are used by Dynamics AX
reports, views, forms, and other objects. Normally queries are stored in AOT, but they can also
be created from code dynamically. This is normally done when visual tools cannot handle
complex and dynamic queries. In this recipe, we will create one dynamically from code.
As an example, we will build a query that selects all active customers who belong to group 10
and have at least one sales order.

How to do it…
1. Open AOT, create a new job called CustTableSales, and enter the following code:


static void CustTableSales(Args _args)
{
Query query;
QueryBuildDataSource qbds1;
QueryBuildDataSource qbds2;
QueryBuildRange qbr1;
QueryBuildRange qbr2;
QueryRun queryRun;
CustTable custTable;
;
query = new Query();
qbds1 = query.addDataSource(tablenum(CustTable));
qbds1.addSortField(
fieldnum(CustTable, Name),
SortOrder::Ascending);
qbr1 = qbds1.addRange(fieldnum(CustTable,Blocked));
qbr1.value(queryvalue(CustVendorBlocked::No));
qbr2 = qbds1.addRange(fieldnum(CustTable,CustGroup));
qbr2.value(queryvalue(’10′));
qbds2 = qbds1.addDataSource(tablenum(SalesTable));
qbds2.relations(false);
qbds2.joinMode(JoinMode::ExistsJoin);
qbds2.addLink(
fieldnum(CustTable,AccountNum),
fieldnum(SalesTable,CustAccount));
queryRun = new QueryRun(query);
while (queryRun.next())
{
custTable = queryRun.get(tablenum(CustTable));
info(strfmt(
“%1 – %2″,
custTable.Name,
custTable.AccountNum));
}
}

2. Run the job, and the following screen should appear:
How it works…
First, we create a new query object. Next, we add a new CustTable data source to the query
by calling its addDataSource() member method. The method returns a reference to the
QueryBuildDataSource object—qbds1. Here, we call addSortField() to enable sorting by
customer name.
The following two blocks of code creates two filter ranges. The first is to show only active
customers and the second one is to list only customers belonging to a single group 10. Those
two filters are automatically added together using the SQL AND operator. QueryBuildRange
objects are created by calling the addRange() member method of the QueryBuildDataSource
object with the field ID number as argument. Range value is set by calling value() on the
QueryBuildRange object itself. It is a good practice to use queryvalue() or a similar function
to process values before applying them as a range. More functions like querynotvalue(),
queryrange(), and so on can be found in the Global application class. Note that these
functions actually process data using the SysQuery application class, which in turn has even
more interesting helper methods that might be handy for every developer.

Adding another data source to an existing one connects both data sources using the SQL
JOIN operator. It this example, we are displaying customers that have at least one sales
order. We start by adding the SalesTable table as another data source. We are going to
use custom relations between those tables, so we need to disable standard relations by
calling the relations() method with false as an argument. Calling joinMode() with
JoinMode::ExistsJoin as a parameter ensures that a record from a parent data source
will be displayed only if the relation exists in its attached data source. And finally, we create a
relation by calling addLink() and passing the field ID number of both tables.
Last thing to do is to create and run the queryRun object and show the selected data on
the screen.
There’s more…
It is worth mentioning a couple of specific cases when working with query objects from code.
One of them is how to use the OR operator and the other one is how to address array fields.
Using the OR operator
As you have already noted, regardless of how many ranges are added, all of them will be
added together using the SQL AND operator. In most cases, it is fine, but sometimes complex
user requirements demand ranges to be added using SQL OR. There might be a number of
work-arounds, like using temporary tables or similar, but I use the Dynamics AX feature that
allows passing raw SQL as a range.
In this case, the range has to be formatted like the fully qualified SQL WHERE clause including
field names, operators, and values. Each separate clause has to be in brackets. It is also very
important that filter values, especially if they are specified by the user, have to be properly
formatted before using them in a query.
Let’s replace the code from the previous example:
qbr2.value(queryValue(’10′));
with the new code:
qbr2.value(strfmt(
‘((%1 = “%2″) || (%3 = “%4″))’,
fieldstr(CustTable,CustGroup),
queryvalue(’10′),
fieldstr(CustTable,Currency),
queryvalue(‘EUR’)));
Now, the result would also include all the customers having the default currency EUR.

Using arrays fields
Some table fields in Dynamics AX are based on extended data types, which contains more
than one array element. An example in a standard application could be financial dimensions
based on the Dimension extended data type or project sorting based on ProjSortingId.
Although such fields are very much the same as normal fields, in queries, they should be
addressed slightly different. To demonstrate the usage, let’s modify the example by filtering
the query to list only customers containing a specific Purpose value. In the standard
application, Purpose is the third financial dimension, where the first is Department and the
second is Cost centre.
First, let’s declare a new QueryBuildRange object in the variable declaration section:
QueryBuildRange qbr3;
Next, we add the following code right after the qbr2.value(…) code:
qbr3 = qbds1.addRange(
fieldid2ext(fieldnum(CustTable,Dimension),3));
qbr3.value(queryvalue(‘Site1′));
Notice that we use the global fieldid2ext() function, which converts the field ID and
the array number into a valid number to be used by addRange(). This function can also be
used anywhere, where addressing the dimension fields is required. The value 3 as its second
argument here means that we are using a third dimension, that is, Purpose. In my application, I
have purposes defined as Site1, Site2, and Site3, so I simply use the first one as filter criteria.
Now, when we run this job, the customer list based on previous criteria will be reduced even
more to match customers having only a specific Purpose set.

Source

Microsoft Dynamics AX 2009 Development Cookbook Dec 2009

Pazar, Kasım 07, 2010

Ne zamandı en son belkı deyişim
belkılerden duvarlar örüşüm
çırpınışım
bır ses duvarların ardından gelen
al dıyor
al kırmızıyla sarıyı karıştır
turuncu yap
turuncuya sarıl ,
ve sonra,unutma hatırla
bır zamanlara bıraktıgın geçmişin
hala karşında
açılmamış bır kıtap gıbı
hiç okunmamış sankı
el degmemış ,adı konulmamış bır hıkaye
bıraz sarı bıraz kırmızı renkte
ne kadar kaçsanda
hep senınle
Dokmek gerekıyormuş bazen satırlara
hayatın boşlugunu
doldurulması gereken zorlugunu
ne kadar zamandır kaçıyorum
harflerı bırleştırıp kelımelerı ortaya çıkarmaktan
Ne kadardır kendımım ve de kendımdeyım
Oysakı dun akşam aglayan ben degılmıydım
Soğuktan uşuyupte yorganına sarılan
Bır dua gıbı satırları mırıldanan
Zorluguna razıyımda,kış sert geçiyor içimde
yazdı mevsım dogru pekı ben
ben kışta mı kalmışım,içimin soğuklugu ondan mı
Ondan mı duygusuzlugum
Savaş evet bır savaş var
Sesını duyuyorum ,yakalanıp esır duştugum an
Tekrar kurtuluyorum
Ordum sensızlıkten beslenıyor ya
Sonsuz orduya sahıp olan ben
Sana hiç yenılmıyorum
Tarıh atmıştım bır şıırın başına
arayıp buldum ve işaretledım takvımıme
senı olduruşumun yıldonumu gelsınde
Haykırayım hayır dıe
KAlbım beklemekte

Sonra evet sana sonralarıda anlatmalıyım
Elim her uzandıgında başka ele
Dıorum kı şunu unutma
Ben bu degılım ,sende kaldıgında asıl yanım
Ben yalanım
İçime doldurdum ınsanları ,bınaları
Yepyenı şehırler kurdum
Hepsı yalan ,yalan yaşamakta bende
Ne anlatmak ısterdım aslında bılıyormusun sana
İçimden kopardıgın o parçanın adını soyle bana
Adının sen koyabıldıgın anda
Kendı romanında....

Ben zamanı 32 ye boldum uzerıne 5 ekleyım 7 çıkarttım
Bu benım zamanım
Bırşey geçiyor evet ,zaman dıyorlar kıme gore zaman
Neye gore geçiyor
Ben o zaman denen şey adı her neyse
Onu sana sabıtledım
Ve hep orda kaldım
Guluyor musun içinden
Gulme ben boyle mutluyum
Denızın kokusunu çekıyorum içime
Son duraga varıyor trenım
Son ıstasyona
Ve ındıgım anda kayboluyorum bende
En gerçek şehrın ,en yalan gürültüsünde

Çarşamba, Temmuz 14, 2010

Axapta Hakkında

AXAPTA NEDİR
• Değiştirilebilir.
Axapta geliştirilebilir yapıya sahiptir.Bunun anlamı isteğe göre kodlar eklenebilir çeşitli geliştirmeler yapılabilir.Yerleşik metodlar yazılabilir.
• Bir çok para birimini destekleyen ERP çözümüdür.Seçilen bir dil yapısıyla axapta kullanılabilir.Dil tipleri lisans ile elde edilir.
• ERP :Kurumsal kaynakların (şirket yapısına göre değişir.) planlanması,organize edilmesidir.(Zaman-Para-Makina)
• Axapta hem dış ortamla hemde kendi içerisinde entegre bir yapıya sahiptir.Bunu şu şekilde açıklayabiliriz;İçeride seçilen kayıtlar dış ortama exel gibi aktarılabilr.Şirket yapısına göre axapta içerisinde bulunan moduller dışında ihtiyaç duyulan modül tasarlanarak eklenebilir.
• Axapta hem Oracle hem de SQL Server kullanılır.
• Kayıtlar tek bir database de tutulur.(Farklı şirket dataareaid ile ayrılır.)
• Axapta da Web ara yüzü –Enterprice Portal da bulunmaktadır.
• Axapta nın ıkı onemli modul Genel Muhasebe ve Stok Yonetimidir.
AXAPTA MİMARİSİ ve KATMANLAR

TIER-1 Client Client Client
| | |
TIER-2
(exe ve dosyalar AX Object Server (AOS)
AX Business Logic (Application Layer)
TIER-3 DataBase
(SQL yada Oracle Olabilir)

Yukarıda belirtilen 3 yapı tyek bir makinade olabileceği gibi farklı makinalarda da olabilir.Yazılan kodlar AOS da çalışır ,bir kısım kodlar client tarafında çalışabilir ancak esas olan AOS tarafında çalışmasıdır.
INTELLIMORPY
Kullanıcının bir çok şeyı rahatça yapmasını sağlar.Sürükle –Bırak yaparak rapor oluşturabilir.Developer tarafından eklenen bir alan kullanıcı tarafından gizlenebilir,yeri değiştirilebilir.Ancak kullanıcı yeni bir alan ekleyemez.Raporların çalışabilmesi için Output menuye ihtiyaç vardır.Bu konuya daha sonra değinilecektir.


APPLICATION OBJECT LAYER
Katmanlar
SYSGLSHFXSL1,SL2,SL3BUSVARCUSUSR
Şimdi bu katmanlardan bahsedelim :
SYS,GLS,HFX VE SL1,SL2,SL3 katmanlarına kodla mudahale edemezsınız.
HFX katmanı axaptanın 5.0 versiyonunda bulunan bir katmandır.
BUS katmanında kod geliştirebilmek için Microsoft un buyuk bir partner san kod geliştirebilirsin.
VAR katmanı müşterilerdedir.
USR kullanıcının gördüğü katmandır.Her bir katmanın kendine ait bir numarası vardır.Bu sayılar tip bazında tekrar edebilir.Neslerin İd lerı Aot tan değiştirilemez.
Axaptada .net uygulamalardan tanıdık oldugumuz overloading kavramı yoktur.Mesela bir tane Update metodu var bundan fonksiyonun parametrelerını değiştirerek bır tane daha yazamam.
Yukarıda yer alan katmanların birde pack katmanları mevcuttur,bunların ara katmanlar oldugunu soylebılırız.örneğin ; SYS-SYP GLS-GLP gibi...

DATA DICTIONARY
Axaptanın geliştirmenın başlayıp bittiği yerdir.
Geliştirme yapmak için 9 adım:
1.Sorunu anlamak ;en iyi çözüm yoluna problem iyi bir şekılde anlaşıldıktan sonra başlanılır.Bu yüzden müşterinin ne istediğinin çok iyi anlaşılması gerekir.
2.Tablolar yenı alanlar eklenırken ,Extended data typelerın (EDT)kullanılması tavsıye edilir.Axaptada yer alan ilişkiler EDT ler üzerinden kurulur.
3.Verilerin tutulması için tablo oluşturulur.
4.İş akışları ,işin gerçekleştirme yöntemleri ,iş sistemleri class lar ile ifade edilir.Yani hesaplamalar,sorgulamalar,bir sürecin bir süreci tetiklemesi gibi olaylar classlarda yer alır.Tabloya yazacagım kodlar ,o tablonun alanlaru uzerınde işlem yapıldıgında olur.Yanı verı uzerınde doğrudan bır etkıleme olucaksa onlar tabloya yazılır.Eger gerekırse başka classlar çağırabılır.Süreci yöneten şeyler classlardır.
5.Kullanıcı tarafından görülmesi için formlar yaratılır.Formun görüntülenmesi ,butonun aktif-pasif olması gibi sadece o form için gerekli olan şeyleri hazırlanan formun içerisine yazabiliriz.Ancak bazı formları kontrol eden class lar var,nereden açıldıgına gore bazı butonların gorunur olup olmaması gibi olaylara izin vermek classlarca kontrol edilir.Örn:SalesTableform
6.Kullanıcının çıktı alabilmesi için rapor design edilir.
7.Bunlar menulere eklenır.(Menulerde sadece menu item lar yer alır.Classlar-formlar yer almaz)Menu Item bir çeşit pointer.Bu pointer bir class a forma işaret edebilir.
8.Verilen security key ler güvenliği ayarlar.
9.Dokumantasyon yapılır.
Uyarı
Extended Data Type oluşturdugunda label ı boş bırakma.

Pazar, Temmuz 11, 2010

Çin Lokantası

'beni sevmene asla izin vermeyeceğim'
diye yazmıştın kapımdaki not defterime
kendi kapımı çalmak zorunda kalmıştım
içerde olmadığımı bile bile

gövdeni hatırlıyorum ansızın bu kış ormanında işte
uzun, büyük, parlak
siyah ve vahşi!
parçalayacak kadar siyah
ve onarabilecek kadar vahşi!
sanki
aşka hayattan daha fazla özen gösteren, çocuksu
ama hep parçalanmış, hırpalandıkça palazlanmış bir ziyaretçi!

gövde'nin tarihi'nde yan yana dururdu yalnızlıklarımız
plastik ve acımasız, zehirli ve karmaşık
kısaca, birbirlerine sevgiyi öğretmeye çalışırken
birbirlerine kan içirdiklerini anlayan iki serseri aşık!

ellerin saklamaya çabaladığı o şehir gecesi
başın omzumda, gözlerin kapalı, saçların açık
giderken citroen: dudaklarını döven neon gazı
dudaklarındaki kazı tozu, 'ölelim mi? ' demiştin
bak şimdi tam sırası!

dağlarda bir çin lokantasıydık senle ben
müşterisiz
mütemadiyen ağlamaklı
için için eğlenceli
temiz...
çevresinde çizgifilm hayvanlarının oynaştığı
bir çin lokantasıydık dağlarda senle ben
bir tahta masa, iki iskemleyle sınırlıydı ülkemiz!

mesela
yeni pişmiş pirinç pilavı dilinin üstünde yürürdü kokarca
ve sağ kulağındaki yabanıl bitki örtüsü
biz birbirimizin çatalı, bıçağı
biz birbirimizin incecik hırsızı, gönül süsü
ayrılık, bir yutulmaz lokma gibi kaldı boğazımızda!

sevgilim, sevdanın sevdaya ettiğini etmez et, kemiğe
sarayın çıkışlarını tutarken uyuşturucu ve kaftan
merdivenlere yığılıp ölen son şehzade
son fırsat, kaçınılmaz son düet, son soytarının son yemini
son sonsuzluğa dokunan küstah kızıl kanaviçe!

dağlar, dersini verir acının kuşkusuz
aslolan, savruk ruhlara yakışan sahici ölümler bulmakta
yoksa kimin kimin tabutunu çakacağı mühim değil!
gecenin koynuna ihanet, bir orospu gibi sokulmakta!

Işıktan ışığa geçen o tenha yolda
o karanlık nefes alışta ve o darmadağın boğulmada
seni sevmeme asla izin vermediğin o kör noktada
o hırçın, o fazla erkek, fazla kadın noktada
tanımadığım
tanımaya kalkışmadığım
izahı zor, kavranması imkansız bir hastalık gibi
ilerledim gövdenin gövdemi bulandırdığı
şaha kaldırdığı boşluklarda!
iz sürmedim
ad sormadım
dönüp bakmadım ardıma!

hatırla sevgilim, mutlaka sen de hatırla
o kadar çok kovaladık ki hayat içersinde
kendi kendimizi
mecali kalmadı hayatların başka hayatları yakalamaya!

'beni sevmene asla izin vermeyeceğim'
diye yazmıştın kapımdaki not defterine
ben de eklemiştim altına:

'aşkı dövmek lazım
kalbe terbiyesizlik ettiğinde! ..'

.

Küçük İskender

Çarşamba, Temmuz 07, 2010

Anladım ki, susmak bir cüsse işi. Derin denizlerin işi. Sığ suları en hafif rüzgârlar bile coşturabiliyor. Derin denizleri ise ancak derin sevdalar...

Derin denizlerin sükûtu büyüler beni. İçimi bir heybet hissi kaplar. Benliğimi haşyet duyguları istilâ eder. Kalbim ürpermelerle dolar.
Dalgalı denizler, durgun mavi denizler kadar heybetli gelmez bana. Göklerin suskunluğu da öyle. Gök gürlemeleri, mavi derinliklerin heybetini siler diye düşünmüşümdür hep. Sükût her zaman daha manalı, daha derindir.

Kalbe sözden cok sükuttan manalar akar. Insan evrendeki sükutu anlayabilseydi, kim bilir belki de söz olmayacakti. Insanlar sükutun dilinden anlayacak, derin ve manali bakislarla konusacaklardi. Ve ses, sükutun heybetini bozamayacakti. Konustugum zamanlar hep acze düsmüsümdür de ondan kelama sarilmisimdir. Evrendeki her varlikta sükutu bir süs, bir hikmet olarak algilamisimdir. Sözü ise ancak bir zaruret..


Anladım ki susmak bir cüsse işi...
Derin denizlerin işi...
Serin sular en hafif rüzgârları bile coşturabiliyor..
Derin denizleri ise ancak derin sevdalar…


Derin denizlerin sükutu büyüler beni. Icimi bir heybet hissi kaplar.
Benligimi hasyet duygulari istila eder.
Kalbim ürperlerle dolar.
Dalgali denizler, durgun mavi denizler kadar heybetli gelmez bana.
Göklerin suskunlugu da öyle. Gök gürlemeleri, mavi derinliklerin heybetini siler diye düsünmüsümdür hep.
Sükut her zaman daha manali, daha derindir.


Kalbe sözden cok sükuttan manalar akar. Insan evrendeki sükutu anlayabilseydi, kim bilir belki de söz olmayacakti. Insanlar sükutun dilinden anlayacak, derin ve manali bakislarla konusacaklardi. Ve ses, sükutun heybetini bozamayacakti. Konustugum zamanlar hep acze düsmüsümdür de ondan kelama sarilmisimdir. Evrendeki her varlikta sükutu bir süs, bir hikmet olarak algilamisimdir. Sözü ise ancak bir zaruret..

.. Hep derin denizler kadar heybetli bir sükut dinledim ondan. Sanki durgun ve derin bir ummanin kiyisina varmistim. Derinliklerinde gönül ve hikmet incilerinin gülümsedigi bir deniz bulmustum. Hayatin hicbir kasirgasi, hadiselerin hicbir firtinasi onu dalgalandiramiyordu. O denize imrendigim an, gözlerim su misralara takilmisti:

Gittim, gittim, denizin,
Sinir yerine vardim
Halin bana da gecsin!
Diye ona yalvardim
Bir cilgin vesvesede,
Icim didiklense de,
Olaydim o cüssede,
O’nun gibi susardim..

Gercekten de öyle olmustu. Sonsuza götüren bir denizin kiyisina varmistim. O zaman anladim ki, susmak bir cüsse isi. Derin denizlerin isi. Sig sulari en hafif rüzgarlar bile costurabiliyor. Derin denizleri ise ancak derin sevdalar..

Anladim ki, derin ve esrarengiz olan her sey susuyor. Anladim ki susan her sey derin ve heybetli.

Pazartesi, Temmuz 05, 2010

open Report with condition

Aşağıdaki job birimi Tl olan ve kusuratı olan raporları getirmede kullanılıyor,değiştirilerek uyarlanabilir:

static void Job7(Args _args)
{
custInvoiceJour CustInvoiceJour;
;
while select custInvoiceJour
where custInvoiceJour.CurrencyCode == "TL"
{
if(custInvoicejour.InvoiceAmount - real2int(CustInvoiceJour.InvoiceAmount) == 0)
{

info(custInvoiceJour.InvoiceId);


}
}

}

Open Report with a job

The below code open a report ,you give report ıd and it's invoiceid number

static void Job5(Args _args)
{
MenuFunction mf;
CustInvoiceJour custInvoicejour,custInvoicejourSELECT;
args args =new args();
str invoiceID ;

;
custInvoicejour = CustInvoiceJour::find('00000754_049',mkdate(8,2,2010),'');
args.record(custInvoiceJour);
mf = new menufunction(identifierstr(SalesInvoice_TR),MenuItemType::Output);
mf.run(args);

}

Cuma, Temmuz 02, 2010

Devrim Finlandiya'da başladı

İnterneti, elektrik, su gibi vatandaşlık hakkı olarak tanımlayıp hattın kesilmesini veya fahiş fiyat uygulanmasını yasaklayan yasa Finlandiya'da yürürlüğe girdi.

İnternet bağlantısına sahip olmayı ‘vatandaşlık hakkı’ olarak kabul eden ülkelerin sayısı hızla artarken, bu konuda ilk yasayı çıkarıp yürürlüğe sokan ülke Finlandiya oldu. 1 Temmuz’da yürürlüğe giren yasaya göre Finlandiya’daki telekomünikasyon firmaları tüm vatandaşlara en az 1 Mbps hızında genişbant internet bağlantısı sağlamakla yükümlü.

İnternet erişimini ‘insan hakkı’ olarak tanımlayan yasa uyarınca hiç bir firma veya mahkeme vatandaşların internet bağlantısını kesemeyecek veya kesilmesi yönünde karar veremeyecek. Başka deyişle ülkede internet, su, elektrik ve temiz hava gibi temel ve asla kesilemeyecek insani ihtiyaçlar arasına katılmış oldu.

Finlandiya dünyanın en çok ‘çevrimiçi’ olan ülkelerinden. Ülke nüfusunun yüzde 96’sı internet kullanıyor ve interneti sadece eğlence değil tüm gündelik yaşamlarında vazgeçilmez bir yardımcı olarak kullanıyor. Ülkedeki e-devlet uygulamaları da dünyada en sistematik ve düzenli işleyenlerden.

Yeni yasadan sonra hala internet bağlantısı olmayan 4 bin haneye de firmalar tez zamanda hat çekmek zorunda. Finlandiya hükümeti, 2015 yılına kadar herkese 100 Mbps hızında bağlantı sağlama hedefine sahip.

Kaynak:http://www.ntvmsnbc.com

NTV Tarih Nazım’ın ilk kitabını buldu

NTV Tarih Dergisi’nin Temmuz sayısında Nazım Hikmet’in Osmanlıca yazılmış ilk şiir kitabı “Dağların Havası”nın hikayesi var.


İSTANBUL - Nazım Hikmet’in ilk şiir kitabının 1928’de Bakü’de basılan “Güneşi İçenlerin Türküsü” olduğu düşünülür. Ancak kitap koleksiyoncusu Haluk Oral Nazım’ın ilk şiir kitabı “Dağların Havası”nın buldu. Kitabın ilginç hikayesi bu ayki NTV Tarih dergisinde.

Nâzım Hikmet’le ilgili kimi bilgilerin neden gizlendiği, kimi mısraların neden sansürlendiği bugüne kadar tam olarak anlaşılmamıştır bir türlü. Söz gelişi, Mehmet Âkif hakkında söylediği, “Âkif inanmış adam, büyük şair” mısralarının neden kimi kitaplarından çıkartıldığı çok fazla sorgulanmamıştır nedense.

Bu açıdan bakılınca, Nâzım Hikmet’in ilk şiir kitabının belki bilinçli olarak, belki tesadüfen gözden uzak tutulması da tuhaf gelmiyor insana. Tuhaf olan, bu tür bilgilerin yeterince değerlendirilmemesi.

Haluk Oral, bu türden bir açığı daha kapatıyor ve Nâzım Hikmet’in bugüne kadar bilinmeyen ilk kitabını gündeme getiriyor. Kitabın ismi: ‘Dağların Havası.’ Doğal olarak eski yazı yani Osmanlıca.

Akbaba Neşriyat’ın bir numaralı kitabı olarak 1925 yılında çıkmış piyasaya. Zaten içindeki şiir de Akbaba’da tefrika edilen uzun bir şiir.

Kitapla ilgili bilgi veren Haluk Oral, “Pek çok kaynakta Nâzım Hikmet’in ilk şiir kitabının, 1928’de Bakü’de basılan ‘Güneşi İçenlerin Türküsü’ olduğu belirtilir” dedikten sonra bu yanlışı şu sözlerle düzeltiyor;

“Halbuki gerçek farklı. 1925’te Akbaba Neşriyat’tan çıkan ‘Dağların Havası’ adlı kitabın kapağında veya içinde ünlü şairin ismi geçmez. Aynı yılın başında Akbaba Dergisi’nde yayımlanmaya başlayan şiir ise ‘Kartal’ mahlasını taşır. Bu ‘Kartal’ Nâzım Hikmet’tir ve şiirde ismi geçen Leman ise Şevket Süreyya Aydemir ve eşi Leman Hanım’dan başkası değildir.

kaynak:http://www.ntvmsnbc.com

Perşembe, Temmuz 01, 2010

X++ table synchronous

X++ ile oluşturulan tablonun senkronize edilmesini sağlayan bir kod,Tablo yerıne senkronıze etmek ıstedıgınz tablonun adını(Burada Sales Table kullanılmış) geçirmeniz yeterli,iyi çalışmalar=)


static void tableSynchJob(Args _args)
{
;

if (appl.dbSynchronize(tablename2id("SalesTable")))
{
info("yes Synched");
}
}

Salı, Haziran 29, 2010

Invent Menu Item Create with X++

static void CreateInventMenu(AGC_InventParameters _inventParameters)
{

#AOT
TreeNode treeMenuItem;
TreeNode treeDisplayMenu;
TreeNode treeCreatedMenu;
TreeNode treeMenus;
TreeNode treeMenu;
str myMenuItem;

;
// myMenuItem = _inventParameters.Kodu + "Form_Agc";
// treeMenuItem = TreeNode::findNode(#MenuItemsDisplayPath);
//treeNode = TreeNode::findNode('\\Menus\\Invent\\setup');
treeDisplayMenu = TreeNode::findNode(#MenuItemsDisplayPath + "\\" + "InventParameters");
treeCreatedMenu = TreeNode::findNode(#MenuItemsDisplayPath+"\\"+_inventParameters.Kodu + "Form_Agc");

if (treeDisplayMenu)
{
//treeMenuItem.AOTadd(_inventParameters.Kodu+"Form_Agc");
treedisplayMenu.AOTinsert(treeCreatedMenu);
//treeDisplayMenu.AOTaddSubNode(str2int(myMenuItem));
//treeDisplayMenu = treeMenuItem.AOTfindChild(_inventParameters.Kodu+"Form_Agc");
treeDisplayMenu.AOTsave();
info ("Menuitem" + myMenuItem+ "Form_AGC" + "sub menu eklendi");
}


}

Create Form with X++

static void CreateForm()
{
Form form = new Form();
FormBuildDataSource fbds;
FormBuildDesign fbd;
FormBuildGridControl fgc;
FormBuildStringControl fsc;

FormRun fr;
str FormName;
args args = new ARgs();
;
//create design
fbd = form.addDesign("mydesign");
fbd.caption("AGC_InventParameters");
//info("Create Design");

//create datasource
fbds = form.addDataSource("myTable");
fbds.table(tablenum(AGC_InventParameters));
//info ("Create Design");


//add GridControl
fgc = fbd.addControl(FormControlType::Grid, "mygrid");
fgc.dataSource(fbds.name());
//info ("Add grid Control");

//add StringControl to Grid

//Kodu
fsc = fgc.addControl(FormControlType::String,"StringEdit1");
fsc.dataSource('AGC_InventParameters' );
fsc.dataField(fieldnuM(AGC_InventParameters, Kodu));
fsc.label("Kodu");
//Adi
fsc = fgc.addControl(FormControlType::String,"StringEdit2");
fsc.dataSource('AGC_InventParameters' );
fsc.dataField(fieldnuM(AGC_InventParameters, Adi));
fsc.label("Adi");
//EDT_Tipi
fsc = fgc.addControl(FormControlType::String,"StringEdit3");
fsc.dataSource('AGC_InventParameters' );
fsc.dataField(fieldnuM(AGC_InventParameters, EDT_tipi));
fsc.label("EDT_tipi");
//Yeni_EDT
fsc = fgc.addControl(FormControlType::String,"StringEdit4");
fsc.dataSource('AGC_InventParameters' );
fsc.dataField(fieldnuM(AGC_InventParameters, Yeni_EDT));
fsc.label("Yeni_EDT");
//Genişlik
fsc = fgc.addControl(FormControlType::String,"StringEdit5");
fsc.dataSource('AGC_InventParameters' );
fsc.dataField(fieldnuM(AGC_InventParameters, Genislik));
fsc.label("Genislik");


FormName = fsc.name("NEW");
//info (" Form " +FormName+ "olusturuldu");


//Open Form
args.object(form);
fr = new FormRun(args);
fr.run();
fr.wait();

}

Create MenuItem with X++

static void CreateMenuItem(AGC_InventParameters _inventParameters)
{
#AOT
TreeNode treeMenuItem;
TreeNode treeDisplayMenu;
TreeNode treeMenus;
TreeNode treeMenu;

;

treeMenuItem = TreeNode::findNode(#MenuItemsDisplayPath);
treeDisplaymenu = TreeNode::findNode(#MenuItemsDisplayPath + "\\" + "AGC_InventParameters");

if (treeDisplayMenu)
{
treeMenuItem.AOTadd(_inventParameters.Kodu+"Form_Agc");
treeDisplayMenu = treeMenuItem.AOTfindChild(_inventParameters.Kodu+"Form_Agc");
treeDisplayMenu.AOTsave();
}
//info ("Menuitem" + _inventParameters.Kodu+ "Form_AGC" + "olusturuldu.");

}

AXapta & X++

x++ kullanarak yaptıgım ilk gelıştırmeyı blogumda yayınlamaktan gurur ve de onur duyarım =)
Başlangıç konumunda olanlar için (benim gibi=)) faydalı olacagına emınım..


//Class declaration kısmında çalışacagımız tablonun aşağıda goruldugu gıbı nesnesını yaratıyoruz.
class FeatureManagement
{
AGC_InventParameters aGC_InventParameters;
}
//new kısmına çalışacagımız tabloyu parametre alacak şekılde ,atama yapıyoruz
void new(AGC_InventParameters _AGC_InventParameters)
{
;
aGC_InventParameters = _AGC_InventParameters;
}

//run methodu klasik olarak .net ortamında da kullanılan bir method,bu kodda kendı oluşturdugumuz methodları çağırabılıyoruz

public void run()
{
#OCCRetryCount

try
{
ttsbegin;

FeatureManagement::CreateEdt(aGC_InventParameters);
FeatureManagement::SetExtendDataType(aGC_InventParameters);
FeatureManagement::CreateTable(aGC_InventParameters);
FeatureManagement::AddNameField(aGC_InventParameters);
FeatureManagement::AddCodeField(aGC_InventParameters);
FeatureManagement::ChangeNameFieldExtend(aGC_InventParameters);
ttscommit;
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= #RetryNum)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}

}
//Aşağıdaki kod x++ ile tablo oluşturmayı sağlıyor
static void CreateTable(AGC_InventParameters _inventParameters)
{
#AOT
#TreeNodeSysNodeType
TreeNode treenode;
TreeNode fieldsnode,field;
AOTTableFieldList FList,Flist1;
str props,prop;
str tablename,fieldname;

;


treenode=TreeNode::findNode(#TablesPath);
treenode.AOTadd(_inventParameters.Kodu + "Table_AGC").applObjectType();

treenode.AOTsave();
treenode=null;

//Add Code and Name Field
/* Flist=TreeNode::findNode("Data Dictionary\\Tables\\" + _inventParameters.Kodu+"Table_AGC" +"\\Fields");
Flist.AOTaddExtendedDataType("Code",typeof(_inventParameters.Kodu+"EDT_AGC"));
Flist.AOTaddExtendedDataType("Name",typeof(_inventParameters.EDT_Tipi));
//Flist.addString('Code');
//Flist.addString('Name');
Flist.AOTsave();*/
/*
//Code --< ExtendedDataType--<
tablename= _inventParameters.Kodu+"Table_AGC";
//info (tablename);
fieldsnode=TreeNode::findNode(@'\DataDictionary\Tables\tablename\Fields');
fieldname="Code";
field=fieldsnode.AOTfindChild(fieldname);
prop=field.AOTgetProperties(false,false);
prop=Global::setProperty(prop,'ExtendedDataType',_inventParameters.Kodu+"EDT_AGC");
field.AOTsetProperties(prop);
field.AOTsave();
field=null;
fieldsnode=null;
*/


}
//Aşağıdaki kod belırlı ozellıkleri taşıyan name isimli alanın oluşturulan tabloya eklenmesını sağlıyor
static void AddNameField(AGC_InventParameters _inventParameters)
{
TreeNode fieldNode;
TreeNode fieldNodeId;
TreeNode fieldNodename;
TreeNode treeNode;
TreeNode treeNode1;
Name fieldName =_inventParameters.Kodu+"EDT_AGC";

#Properties
#AOT
str properties,prop2, strAllowEdit,extend ;
;
treeNode = TreeNode::findNode("Data Dictionary\\Tables\\" +_inventParameters.Kodu+"Table_AGC" );
treeNode1 = treenode.AOTfindChild("fields");
fieldNode= treeNode1.AOTfindChild(fieldName);


if(!fieldNode)
{
fieldNode = TreeNode::findNode(#ExtendedDataTypesPath+"\\"+fieldName);
if(fieldNode)
treeNode1.AOTDrop(fieldNode);
fieldNode= treeNode1.AOTfindChild(fieldName);
properties =fieldNode.AOTgetProperties();
properties = SetProperty(properties, 'Name', 'Name');
fieldNode.AOTsetProperties(properties);
fieldNode = TreeNode::findNode("Data Dictionary\\Tables\\" + _inventParameters.Kodu+"Table_AGC" );
fieldNode.AOTsave();
treeNode.AOTsave();

}

treeNode.AOTsave();
}
//Eklenen name alanının ExtendedDataType özelliğinin değiştirilmesini sağlıyor
static void ChangeNameFieldExtend(AGC_InventParameters _inventParameters)
{
#AOT
#TreeNodeSysNodeType
#Properties;

TreeNode treeNode;
Name fieldName="Name";
str props;

;

treeNode = TreeNode::findNode("Data Dictionary\\Tables\\" +_inventParameters.Kodu+"Table_AGC" );
treeNode = treeNode.AOTfindChild("fields");
treeNode= treeNode.AOTfindChild(fieldName);
props = treenode.AOTgetProperties(false,false);
props = Global::setProperty(Props,'ExtendedDataType',_inventParameters.EDT_Tipi);
treenode.AOTsetProperties(props);
treenode.AOTsave();
}
//Aşağıdaki kod Code isimli alanın tabloya eklenmesını sağlıyor
static void AddCodeField(AGC_InventParameters _inventParameters)
{
TreeNode fieldNode;
TreeNode fieldNodeId;
TreeNode fieldNodename;
TreeNode treeNode;
TreeNode treeNode1;
Name fieldName =_inventParameters.Kodu+"EDT_AGC";

#Properties
#AOT
str properties,properties2, strAllowEdit ;
;
treeNode = TreeNode::findNode("Data Dictionary\\Tables\\" +_inventParameters.Kodu+"Table_AGC" );
treeNode1 = treenode.AOTfindChild("fields");
fieldNode= treeNode1.AOTfindChild(fieldName);


if(!fieldNode)
{
fieldNode = TreeNode::findNode(#ExtendedDataTypesPath+"\\"+fieldName);
if(fieldNode)
treeNode1.AOTDrop(fieldNode);
fieldNode= treeNode1.AOTfindChild(fieldName);
properties =fieldNode.AOTgetProperties();
if (hasProperty(properties, #PropertyAllowedit) == true)
{
properties="PROPERTIES\n" +
" Name #Code\n" +
"ENDPROPERTIES\n " ;
fieldNode.AOTsetProperties(properties);
}
treeNode.AOTsave();
}

treeNode.AOTsave();
}
//Aşağıdaki kod X++ ile EDT yaratmayı sağlıyor(Bu class client ortamında çalışmalı)
static void CreateEdt(AGC_InventParameters _inventParameters)
{
#AOT
#TreeNodeSysNodeType
treenode treenode;
xInfo xInfo= new xinfo();

;
treeNode = xInfo.rootNode();
treeNode = treeNode.AOTfindChild('Data Dictionary');
treeNode = treeNode.AOTfindChild('Extended Data Types');
treeNode=treeNode.AOTaddExtendedDataType(_inventParameters.Kodu+"EDT_AGC",Types::String);
treeNode.AOTsave();

}
//Aşağıdaki kod oluşturulan EDT nın belırlı ozellıklerının degıştırılmesını sağlıyor
static void SetExtendDataType(AGC_InventParameters _inventParameters)
{
#AOT
#TreeNodeSysNodeType
#Properties;

TreeNode treenode;
AOTTableFieldList FList;
str props,props2;

;

treenode=TreeNode::findNode(#ExtendedDataTypesPath).AOTfindChild(_inventParameters.Kodu+ "EDT_AGC");
Props = treenode.AOTgetProperties(false,false);
if (_inventParameters.EDT_Tipi)
{
Props = Global::setProperty(Props,'Extends',_inventParameters.EDT_Tipi);
}
else
{ if (_inventParameters.Yeni_EDT && _inventParameters.EDT_Tipi=="")
Props = Global::setProperty(Props,'Extends',_inventParameters.Yeni_EDT);
}
treenode.AOTsetProperties(props);
treenode.AOTsave();
treenode=null;


//label
treenode=TreeNode::findNode(#ExtendedDataTypesPath).AOTfindChild(_inventParameters.Kodu + "EDT_AGC");
props2=treenode.AOTgetProperties();
props2 = SetProperty(props2, "Label", _inventParameters.Adi);
treenode.AOTsetProperties(props2);
treenode.AOTsave();
treenode=null;


}
//

Pazartesi, Haziran 28, 2010

Pazar, Haziran 13, 2010

Yüzün

Benim kaderim bu,
öylece karşına oturup seyrediyorum
yüzünden geçen zamanları...

Küçük bir çocuk olan yüzün
annesinin kalbinin kapılarında kalmış...
Kırgın düşlerinde sakladığın...
İlk gençlik oluyor sonra yüzün
öyle eksik, öyle yarım kalmış büyümelerden durgun...

Sevdayla ışıyan,
çaresiz aşkların şiirlerinde mısra mısra yaşlanan yüzün...

Benim kaderim bu
öylece karşına oturup
seyrediyorum zamanın içinden geçen yüzlerini...

Bana sevdalı bir yüzün vardı eskiden
o şimdi yalnız içimde saklı...

CEZMİ ERSÖZ

ŞİMDİ BURADA DEĞİLSİN

şimdi burda değilsin....
ama beni duyuyosun...biliyorum...
kapat gözlerini benim için ve dinle n'olur...
bak yoksun...
bunun anlamını biliyomusunn....
yokluğun
yüreğimmdeki bu yıldızsız,
bu dipsiz, karanlık gece...
yokluğun, odamın duvarlarına astığım suretlerine bakarken,
unuttuğum dalgın gözlerim....
yokluğun yastığımda bıraktığın bu kimsesiz saç telleri...
sırf kalemini değdirdiğin için atmaya kıyamadığım bu kağıtlar...
her an gözümün önünde sakladığım mektupların,
peçetelere yazdığın şiirlerin,
hediyelerini sardığın paket kağıtların...
sen gidince,
hala sen kokuyodur, diye üzerime giydiğim
ve derinn derinn
soluduğumm giysilerin....
bu yarı deli...
bu hayattan kopuk ruhum...
kapat gözlerini ve bana baak....
ben ne diye varsa gördüğün, işte o senin yokluğun....
söyle.!
sana neyi anlatayımm...
sabaha karşı çalan telefonumun ucunda,
n'luuur bana hayattan kötü davranma diyen...sayıklayan..
o kırgın, o kendine çarpan sesini mi..! !

CEZMİ ERSÖZ

Cumartesi, Haziran 12, 2010

Şimdi biz neyiz biliyor musun?
Akıp giden zamana göz kırpan yorgun yıldızlar gibiyiz.
Birbirine uzanamayan
Boşlukta iki yalnız yıldız gibi
Acı çekiyor ve kendimize gömülüyoruz
Bir zaman sonra batık bir aşktan geriye kalan iki enkaz olacağız yalnızca
Kendi denizlerimizde sessiz sedasız boğulacağız
Ne kalacak bizden?
Bir mektup, bir kart, birkaç satır ve benim şu kırık dökük şiirim
Sessizce alacak yerini nesnelerin dünyasında
Ne kalacak geriye savrulmuş günlerimizden
Bizden diyorum, ikimizden
Ne kalacak?

Cuma, Mayıs 07, 2010

Sana güzel bir yaz günü gelmiştim.Karlı bir sabahta gidiyorum.
Beş mevsim yaşamışız beraber.Beş mevsim bir iç denizi kurutmaya yetti.
İşte böyle sevgili...Biz artık seninle haritada iki küçük su lekesi.Hiçbir nehir kavuşturamaz bizi...

İclâl Aydın - Bitmiş Aşklar Emanetçisi