Javascript Kullanarak Kullanıcı Rolüne Göre Alan ve Tab Gizleme

Yazar: Volkan KORKMAZ
Kategori: Microsoft Dynamics CRM
Eklenme Tarihi: 27.1.2011 20:06:44



Merhaba Arkadaşlar, Bu makalemizde sizlere Microsoft Dynamics CRM’I kullanan kullanıcıların rollerine göre açılan formlardaki Tab’ların ve Alanların gizlenmesini anlatacağım. Not: Aşağıda yapılan işlemleri öncelikle Test server’ınızda deneyin! İlk olarak, sistemi kullanan kullanıcının Rollerini çekeceğimiz fonksiyonumuzu yazalım (KullaniciRolleri), daha sonrasında ise kullanıcının belirttiğimizi role sahip olup olmadığını control edeceğimiz fonksiyonumuzu hazırlıyoruz(KullaniciRoluKontrol). Son olarakda gizleyeceğimiz alanlar için RoleGoreAlanGizle ve tablar için RoleGoreTabGizle fonksiyonlarımızı yazıyoruz.

Merhaba Arkadaşlar,

Bu makalemizde sizlere Microsoft Dynamics CRM’I kullanan kullanıcıların rollerine göre açılan formlardaki Tab’ların ve Alanların gizlenmesini anlatacağım.

Not: Aşağıda yapılan işlemleri öncelikle Test server’ınızda deneyin!

İlk olarak, sistemi kullanan kullanıcının Rollerini çekeceğimiz fonksiyonumuzu yazalım (KullaniciRolleri), daha sonrasında ise kullanıcının belirttiğimizi role sahip olup olmadığını control edeceğimiz fonksiyonumuzu hazırlıyoruz(KullaniciRoluKontrol). Son olarakda gizleyeceğimiz alanlar için RoleGoreAlanGizle ve tablar için RoleGoreTabGizle fonksiyonlarımızı yazıyoruz.

KullanıcıRolleri Fonksiyonu

Yapmamız gereken ilk şey geçerli kullanıcı göre rollerinin bir listesini almak. Bunun için birkaç yol var. Ancak ben bütün rolleri tek bir satır halinde alıp daha sonrasında KullaniciRolu fonksiyonunda liste haline çevireceğim. Aşağıdaki fonksiyonda bir RetrieveMultiple sorgusu ile roller tek bir satır halinde çektiğimi görüyorsunuz.

1. function KullaniciRolleri()

2. {

3. var xml = "" +

4. "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +

5. "<soap:Envelope xmlns:soap=\"" +

6. "http://schemas.xmlsoap.org/soap/envelope/" +

7. "\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +

8. " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +

9. GenerateAuthenticationHeader() +

10. " <soap:Body>" +

11. " <RetrieveMultiple xmlns=\"" +

12. "http://schemas.microsoft.com/crm/2007/WebServices\">" +

13. " <query xmlns:q1=\"" +

14. "http://schemas.microsoft.com/crm/2006/Query" +

15. "\" xsi:type=\"q1:QueryExpression\">" +

16. " <q1:EntityName>role</q1:EntityName>" +

17. " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +

18. " <q1:Attributes>" +

19. " <q1:Attribute>name</q1:Attribute>" +

20. " </q1:Attributes>" +

21. " </q1:ColumnSet>" +

22. " <q1:Distinct>false</q1:Distinct>" +

23. " <q1:LinkEntities>" +

24. " <q1:LinkEntity>" +

25. " <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +

26. " <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +

27. " <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +

28. " <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +

29. " <q1:JoinOperator>Inner</q1:JoinOperator>" +

30. " <q1:LinkEntities>" +

31. " <q1:LinkEntity>" +

32. " <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +

33. " <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +

34. " <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +

35. " <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +

36. " <q1:JoinOperator>Inner</q1:JoinOperator>" +

37. " <q1:LinkCriteria>" +

38. " <q1:FilterOperator>And</q1:FilterOperator>" +

39. " <q1:Conditions>" +

40. " <q1:Condition>" +

41. " <q1:AttributeName>systemuserid</q1:AttributeName>" +

42. " <q1:Operator>EqualUserId</q1:Operator>" +

43. " </q1:Condition>" +

44. " </q1:Conditions>" +

45. " </q1:LinkCriteria>" +

46. " </q1:LinkEntity>" +

47. " </q1:LinkEntities>" +

48. " </q1:LinkEntity>" +

49. " </q1:LinkEntities>" +

50. " </query>" +

51. " </RetrieveMultiple>" +

52. " </soap:Body>" +

53. "</soap:Envelope>" +

54. "";

55.

56. var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

57.

58. xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);

59. xmlHttpRequest.setRequestHeader("SOAPAction",

60. " http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");

61. xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

62. xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

63. xmlHttpRequest.send(xml);

64.

65. var resultXml = xmlHttpRequest.responseXML;

66. return(resultXml);

67. }

KullaniciRoluKontrol

Aşağıdaki fonksiyonumuzda Kullanicinin belirtilen role sahip olup olmadığı kontrolunu yapıyoruz.

function GetCurrentUserRoles()

{

var xml = "" +

"<?xml version=\"1.0\" encoding=\"utf-8\"?>" +

"<soap:Envelope xmlns:soap=\"" +

"http://schemas.xmlsoap.org/soap/envelope/" +

"\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +

" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +

GenerateAuthenticationHeader() +

" <soap:Body>" +

" <RetrieveMultiple xmlns=\"" +

"http://schemas.microsoft.com/crm/2007/WebServices\">" +

" <query xmlns:q1=\"" +

"http://schemas.microsoft.com/crm/2006/Query" +

"\" xsi:type=\"q1:QueryExpression\">" +

" <q1:EntityName>role</q1:EntityName>" +

" <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +

" <q1:Attributes>" +

" <q1:Attribute>name</q1:Attribute>" +

" </q1:Attributes>" +

" </q1:ColumnSet>" +

" <q1:Distinct>false</q1:Distinct>" +

" <q1:LinkEntities>" +

" <q1:LinkEntity>" +

" <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>" +

" <q1:LinkFromEntityName>role</q1:LinkFromEntityName>" +

" <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>" +

" <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>" +

" <q1:JoinOperator>Inner</q1:JoinOperator>" +

" <q1:LinkEntities>" +

" <q1:LinkEntity>" +

" <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>" +

" <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>" +

" <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>" +

" <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>" +

" <q1:JoinOperator>Inner</q1:JoinOperator>" +

" <q1:LinkCriteria>" +

" <q1:FilterOperator>And</q1:FilterOperator>" +

" <q1:Conditions>" +

" <q1:Condition>" +

" <q1:AttributeName>systemuserid</q1:AttributeName>" +

" <q1:Operator>EqualUserId</q1:Operator>" +

" </q1:Condition>" +

" </q1:Conditions>" +

" </q1:LinkCriteria>" +

" </q1:LinkEntity>" +

" </q1:LinkEntities>" +

" </q1:LinkEntity>" +

" </q1:LinkEntities>" +

" </query>" +

" </RetrieveMultiple>" +

" </soap:Body>" +

"</soap:Envelope>" +

"";

var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");

xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);

xmlHttpRequest.setRequestHeader("SOAPAction",

" http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");

xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

xmlHttpRequest.send(xml);

var resultXml = xmlHttpRequest.responseXML;

return(resultXml);

}

1. function KullaniciRoluKontrol(roleIsimleri, rolesXML)

2. {

3. // Rol isimlerini split ediyoruz

4. var eslesenroller = roleIsimleri.split('|');

5.

6. if(rolesXML != null)

7. {

8. //node seçimini yapıyoruz

9. var roller = rolesXML.selectNodes("//BusinessEntity/q1:name");

10. if(roller != null)

11. {

12. for( i = 0; i < roller.length; i++)

13. {

14. for (j = 0; j < eslesenroller .length; j++)

15. {

16. // eğer bir eşleşme varsa true dönüyoruz

17. if (roller[i].text == eslesenroller[j]) return true;

18. }

19. }

20. }

21. }

22. //eğer bulunamazsa false dönüyoruz

23. return false;

24. }

function UserHasRole(roleNames, rolesXML)

{

// split roleNames on pipe

var matchon = roleNames.split('|');

if(rolesXML != null)

{

//select the node text

var roles = rolesXML.selectNodes("//BusinessEntity/q1:name");

if(roles != null)

{

for( i = 0; i < roles.length; i++)

{

for (j = 0; j < matchon.length; j++)

{

// If there is a match, return true, found

if (roles[i].text == matchon[j]) return true;

}

}

}

}

//otherwise return false

return false;

}

Son Son olarak aşağıdaki fonksiyonlarımızı kullanarak istediğimi role sahip olmayan kullanıcılar için belirli Tab ve Alanları gizleyebiliyoruz..

1. function RoleGoreTabGizle(role, roller, tabno)

2. // Tab numarası O’dan başlar

3. {

4. var tab = document.getElementById('tab'+ tabno +'Tab');

5. var usrRole = KullaniciRoluKontrol(role, roller);

6. if(!usrRole)

7. {

8. tab.style.display = "none";

9. }

10. }

11.

12. function RoleGoreAlanGizle (role, roller, field,cfield,dfield)

13. {

14. var usrRole = KullaniciRoluKontrol (role, roller);

15. if(!usrRole)

16. {

17. field.style.visibility = 'hidden';

18. field.style.position = 'absolute';

19. cfield.style.visibility = 'hidden';

20. cfield.style.position = 'absolute';

21. dfield.visibility = 'hidden';

22. dfield.style.position = 'absolute';

23. }

24. }

function HideTabByRole(role, roles, tabnumber)

// Tab number starts on 0

{

var tab = document.getElementById('tab'+tabnumber+'Tab');

var usrRole = UserHasRole(role, roles);

if(!usrRole)

{

tab.style.display = "none";

}

}

function HideFieldByRole(role, roles, field,cfield,dfield)

{

var usrRole = UserHasRole(role, roles);

if(!usrRole)

{

field.style.visibility = 'hidden';

field.style.position = 'absolute';

cfield.style.visibility = 'hidden';

cfield.style.position = 'absolute';

dfield.visibility = 'hidden';

dfield.style.position = 'absolute';

}

}

Yukarıdaki işlemlerin hepsini Form’un onload eventine yazmanız gerekmektedir. Aşağıda da örnek bir kullanım örneği bulunmaktadır.

1. var KullaniciRol = KullaniciRolleri();

2. // Account Manager ve System Administrators için 4. Tab gizleniyor

3. RoleGoreTabGizle ('Account Managers|SystemAdministrators', KullaniciRol , 3);

4. // Account Manager rolü için Firma’da ana firma alanı gizleniyor

5. RoleGoreAlanGizle ('Account Managers', KullaniciRol ,

6. crmForm.all.parentcustomerid,

7. crmForm.all.parentcustomerid_c,

8. crmForm.all.parentcustomerid_d);

var UserRoles = GetCurrentUserRoles();

HideTabByRole('Account Managers|SystemAdministrators', UserRoles, 3);

HideFieldByRole('Account Managers', UserRoles,

crmForm.all.parentcustomerid,

crmForm.all.parentcustomerid_c,

crmForm.all.parentcustomerid_d);

Eğer yukarıdaki kodlarla ilgili kafanıza takılan veya merak ettiğiniz konular ve sorular varsa bana aşağıdaki irtibat bilgilerimden ulaşabilirsiniz.

Volkan KORKMAZ
Microsoft Certified Business Management Solutions Specialist
volkankorkmaz@gmail.com
http://www.volkankorkmaz.net


Volkan KORKMAZ

Bilgisayar mühendisliği mezunu olan, Volkan KORKMAZ 2004'den beri sektörde birçok projede yazılımcı ve danışman olarak görev almıştır. Özellikle Microsoft Dynamics ,MOSS ve Web projeleri alanlarında yapılan entegrasyonlar üzerine uzmanlaşmıştır.

Diğer uzmanlık alanları içinde HP ServiceDesk ve ERP(logo, netsis) programları bulunmaktadır. MCSD.NET ve Microsoft Certified Business Management Solutions Specialist sertifikalarına sahiptir.

Şu an sektöründe lider bir yazılım firmasında yazılım geliştirme müdürü olarak çalışmaktadır. Ayrıca kurumsal ve bireysel olarak eğitim vermektedir.
Bu makaleye ilk yorum yapan siz olun.

Yorumunuz