Tuesday, September 9, 2008

Membuat Limited Access Per Group di Axapta 4.0

Sebetulnya, saya tidak tertarik untuk menulis yang berbau teknikal. Apalagi kerjaan. Tapi, berhubung kerjaan saya kali ini sedikit merangsang alias menantang, ada sedikit unsur-unsur nge-hack Axapta, maka hasil dari kerjaan ini kepingin saya share ke umum melalui blog ini.

Saya ditugaskan untuk memberi batasan bagi user yang masuk ke axapta per group. Misal, kalau group sales, punya jumlah user = 10, tapi ingin dibatesin yang boleh login cuma 5, jadi kalau orang ke 6 login untuk group tersebut, langsung di tendang oleh Axapta. nah, pembatasan seperti ini, di aplikasi Standar axapta tidak ada. Wajib membuat modifikasinya.

Pertama, rancang dulu table untuk menampung group yang dikhususkan bagi modifikasi limited user per group ini. Contohnya bisa dilihat di table sysUserGroupList dan SysUserGroupInfo.

Table: ABCUserGroupList
userid - string
ABCgroupid - string

Table: ABCUserGroupInfo
id - string
name - string
total - int (maximum user login)

Kedua, Buat form untuk user interface table ABCUserGroupInfo. Contohnya:



Buat form untuk user interface table ABCUserGroupList. Untuk membuat form ini, bisa mencontek dari Form tutorial_ListPanel. Hasilnya:



Selanjutnya, mulai buat code di class SysStartupCmd untuk proses menjalankan perintah kala startup Axapta.

case 'limitABCuser':
sysStartupCmd = new SysStartupCmdLimitABCUser(s,parm);
break;



Buat class baru SysStartupCmdLimitABCUser :

class SysStartupCmdLimitABCUser extends SysStartupCmd

{
}


void applInit()
{
Args args;
FormRun formRun;

SysClientSessions _SysClientSessions;
ABCUserGroupList _ABCUserGroupList;
ABCUserGroupList _ABCUserGroupList2;
ABCUserGroupInfo _ABCUserGroupInfo;
xSession session;
int x, y;
int maxSession ;
;


session = new xSession();
x = 0;
y = 0;
while select * from _ABCUserGroupList
where _ABCUserGroupList.userid == session.userId()
{
x++;
}

if ( x > 0 )
{
select ABCgroupid from _ABCUserGroupList
where _ABCUserGroupList.userid == session.userId() ;

select total from _ABCUserGroupInfo
where _ABCUserGroupInfo.id == _ABCUserGroupList.ABCgroupid;

maxSession = _ABCUserGroupInfo.total;

// cek di syssession

while select * from _SysClientSessions
join _ABCUserGroupList2
where _SysClientSessions.userId == _ABCUserGroupList2.userid
&& _SysClientSessions.Status == 1
&& _ABCUserGroupList2.ABCgroupid == _ABCUserGroupList.ABCgroupid
{
y++;
}

if ( y > maxSession )
{
this.shutdown();
}
}
}


---
Jika sudah menambahkan code diatas, sekarang masuk ke Axapta configuration utility, lalu tambahkan perintah "limitABCuser" di Command to run at application startup.

Setelah itu, tinggal ditutup Axapta clientnya lalu dibuka kembali untuk melihat hasilnya.

***

Note: Kode ABC adalah kode untuk kode projek anda. Bisa diganti sesuai kode projek.

No comments:

Post a Comment