Bu döküman, LPT Customization Document Number Template ile ilgili bilgi içerir
1 - LPT içinde tanımladığınız custom nesneler (CBO) için; LPT içinden özel numaralandırma şablonu tanımlayabiriz.
Konuyu bir örnek üzerinden açıklayalım;
LPT ile tanımladığımız "öğrenci kaydı" için bir numaralandırma şablonu tanımlayalım.
LPT projesi Definitions altındaki docNumberTemplate kısmından ekrandaki gibi bir tanımlama yapalım.
Bu tanım içerisindeki;
- Name ve ID tekil bilgidir. Tanımlarımızı bu bilgiler ile ayırt edebileceğiz.
- Form seçimi yardımcı bir bilgidir,
Not:Daha sonra kodlama yaparken kullanacağımız helper sınıflarında,
giden sorgular ve numarayı almak için kullandığımız metodlarda form parametresi yoktur.
Uyarlamanın deploy edildiğini farzediyoruz.
2 - Bu tanım "AdminClient"/"j-Platform Administration" uygulamasında numaralandırma
şablonu olarak kullanılabilecek bir seçenek oluşturur.
3 - Kayıt Numaralama Şablonu aynısını uyarlama kayıtları içinde için de tanımlayabiliriz.
Aynı özelliklerde birden fazla numaralandırma şablonu tanımlanamaz.
Daha önce Kayıt Numaralama Şablonu dökümanında kayıt yapıldığı için bu hata mesajı alınır.
İlgili Numaralandırma tanımını istediğimiz yerde aşağıdaki gibi kullanabiliriz. Kaynak Kod'da sadece ilgili ID ve ayırt edici parametrelerini atamamız gerekir.
try {
GregorianCalendar gdate = new GregorianCalendar();
IClientContext context=event.getClientContext();
LbsUserLoginInfo userLoginInfo = (LbsUserLoginInfo) context.getVariable(GOConstants.ms_UserInfo);
boolean permanent=false;
String number = "";
int module = 20000001;
int docId=1;
int company=userLoginInfo.getFirm().getNr();
String ouCode=null;
String dpCode=null;
int user = userLoginInfo.getFirm().getNr();
int[] userGroups = userLoginInfo.getUser().getGroups();
Calendar date=gdate;
int quarter=0;
int period=1;
int fixedSegmPos=GOConstants.LDNFX_LEFT;
String fixedSegm= null;
boolean hasParent=false;
String parentCode=null;
String tableName = "X_CTSTUDENT";//"X_$V(firm)_";
String numberColumn="SURNAME";
String typeColumn="";
String myNumber = GOHelper.getDocumentNumber(context, permanent, number, module, docId, company, ouCode, dpCode, user, userGroups,
date, quarter, period, fixedSegmPos, fixedSegm, hasParent, parentCode,
tableName, numberColumn, typeColumn);
JOptionPane.showMessageDialog(null, "alınan numara" + myNumber );
} catch (Exception exc) {
JOptionPane.showMessageDialog(null, "alınan run-time hata : " + exc.getLocalizedMessage());
}
Veri tabanı yapısının incelenmesi
Yaptığımız ürün veya özel numaralandırma şablon tanımlarımız S_RECNUMTEMPS tablosunda tutulmaktadır.
RECGROUPTYPE alanı bizim özel tanımımıza verdiğimiz ID bilgisini tuttuğundan bizim hangi özel tanımlarımıza hangi şablonları tanımladığımız ayırt edilebilmektedir.
Numaralandırma şablonlarını aşağıdaki gibi sorgulayabilirsiniz;
select
RECTYPE as docId,
RECGROUPTYPE as module,
COMPANYNR as company,
* from S_RECNUMTEMPS
WHERE CODE LIKE 'OZELTANIM'
ORDER BY LOGICALREF DESC
Numara alacak kodu yazdığınızda arka planda ürünün “AOQODocNumberSearch“ query nesnesi çalışıp, ilgili numaralama şablonunuzu arayacaktır. Bir sorun yaşarsanız trace alıp giden parametrelerinizi kontrol edebilirsiniz.
Trace sırasında tanımı bulmak için gönderilecek sorgu aşağıdaki gibidir;
SELECT *
FROM
S_RECNUMTEMPS
GODOCNUMTEMPLATES WITH(NOLOCK)
WHERE
((GODOCNUMTEMPLATES."RECTYPE" = ?) AND (GODOCNUMTEMPLATES."RECGROUPTYPE" =
?) AND ((GODOCNUMTEMPLATES."COMPANYNR" <=
0) OR (GODOCNUMTEMPLATES."COMPANYNR" =
?)) AND (GODOCNUMTEMPLATES."EFFBEGDATE" <=
?) AND (GODOCNUMTEMPLATES."EFFENDDATE" >=
?) AND ((GODOCNUMTEMPLATES."ORGUNITMASK" LIKE
?) OR (GODOCNUMTEMPLATES."ORGUNITMASK" LIKE
?) OR (GODOCNUMTEMPLATES."ORGUNITMASK" LIKE
?) OR (GODOCNUMTEMPLATES."ORGUNITMASK" LIKE
?)) AND ((GODOCNUMTEMPLATES."DEPARTMENTMASK" LIKE
?) OR (GODOCNUMTEMPLATES."DEPARTMENTMASK" LIKE
?) OR (GODOCNUMTEMPLATES."DEPARTMENTMASK" LIKE
?) OR (GODOCNUMTEMPLATES."DEPARTMENTMASK" LIKE
?)) AND ((GODOCNUMTEMPLATES."USERNR" =
0) OR (GODOCNUMTEMPLATES."USERNR" =
?)) AND ((GODOCNUMTEMPLATES."GROUPNR" =
0) OR (GODOCNUMTEMPLATES."GROUPNR" =
?)) AND ((GODOCNUMTEMPLATES."REGTYPE" =
?) OR (GODOCNUMTEMPLATES."REGTYPE" =
0))) AND ((GODOCNUMTEMPLATES."TE_DOMAINID" =
0) OR (GODOCNUMTEMPLATES."TE_DOMAINID" IS NULL))
ORDER BY
GODOCNUMTEMPLATES."LOGICALREF"
ASC
SET ROWCOUNT 0
Parameters : P_RECTYPE = 1
P_RECGRP = 0
P_COMPANY = 19
P_REFDATE = 2013-07-11 6:52:14
P_REFDATE = 2013-07-11 6:52:14
P_OUCODE_0 = '*'
P_OUCODE_1 = ''
P_OUCODE_2 = ''
P_OUCODE_3 = '*'
P_DPCODE_0 = '*'
P_DPCODE_1 = ''
P_DPCODE_2 = ''
P_DPCODE_3 = '*'
P_USER = 19
P_GROUP_0 = 1
P_REGTYPE = 0
İlgili tanımınız bulunduğunda MAX numara bulunabilmesi için aşağıdaki gibi bir sorgu daha gönderilir. Max numara gelmiyorsa ilgili tablonuz, alan veya tipi uyumlu olmayabilir
SELECT MAX(SURNAME) as MAXNUMBER
FROM X_CTSTUDENT
WHERE LEN(SURNAME)=11 AND SURNAME LIKE '131223_____%'
NOT : SURNAME alanı örnek içinde kullanılmıştır. Numarayı kaydedeceğimiz alan boyutu ve tipi yeterli herhangi bir alan olabilir. Örneğimizde yeterli bir string alan olarak SURNAME kullanılmıştır..