Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Feed me, Seymour! Supplemental User Data For IBM Connections Profiles

271 views

Published on

Presentation given at ICONUK 2016-09-15 in London
If you have tried to map a long office name and adress into the officeName of the PEOPLEDB, you probably stumbled upon the chapter "Supplemental user data for Profiles" in the IBM Connections documentation. What is described as "supplemental tables within the Profiles database" are in fact rather essential tables that can help you with adoption by providing more data within a users profile. Also, their use cuts down on the number of customizations needed as well as providing more information to the Cognos reports.

I will talk you through the countries, departments, organization, enmployee and worklocation tables, how the can be filled with data either through csv files as well as custom assembly lines and how to reference them efficiently. Also we will take a look on what is necessary to expose the additional data in search, business cards and the profile pages.
After this session you should be able to easily and quickly add more data to your IBM Connections profiles.

Buzzword Bingo for this session: fill-scripts, profiles, tdi, csv workplace, address, department, reports, cognos, search.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Feed me, Seymour! Supplemental User Data For IBM Connections Profiles

  1. 1. ICONUK 2016 Martin Leyrer, IBM Austria London, 2016-09-15 Feed me, Seymour! Supplemental User Data For IC Profiles
  2. 2. Martin Leyrer - IBM ● IBM Collaboration Solutions IT-Specialist with IBM Austria ● ICS product stack since 1995 ● IBM e-mail: martin.leyrer@at.ibm.com ● E-mail: leyrer@gmail.com ● Twitter: http://www.twitter.com/leyrer ● Facebook: https://www.facebook.com/leyrer ● Blog: http://www.leyon.at
  3. 3. Addresses
  4. 4. Easy, right?
  5. 5. IBM United Kingdom Limited 76/78 Upper Ground South Bank London SE1 9PZ United Kingdom
  6. 6. IBM Österreich Hauptverwaltung Obere Donaustraße 95, 1020 Vienna Vienna Austria
  7. 7. IBM 中国有限公司 北京市朝阳区北四环中路 27 号盘古大观写字楼 25 层
  8. 8. Easy?
  9. 9. Addresses will have a reasonable number of characters Say less than 100.
  10. 10. Department For Environment Food & Rural Affairs (D E F R A) State Veterinary Service, Animal Health Office Hadrian House, Wavell Drive Rosehill Industrial Estate Carlisle, CA1 2TB United Kingdom
  11. 11. But street names will be reasonably short. Certainly less than 50 characters
  12. 12. Bischöflich-Geistlicher-Rat-Josef-Zinnbauer- Straße 84130 Dingolfing Bavaria Germany
  13. 13. Five lines and country will cover all cases.
  14. 14. GB Technical Services Unit W7a Warwick House 18 Forge Lane Minworth Industrial Park Minworth Sutton Coldfield B76 1AH United Kingdom
  15. 15. And what do we get in IBM Connections to cover all this?
  16. 16. CREATE TABLE EMPINST.EMPLOYEE ( ... PROF_PHYSICAL_DELIVERY_OFFICE VARCHAR(32) , ...
  17. 17. Technote #1698402 An enhancement request for increasing the limit has been raised under APAR LO33688 for development consideration for a future release.
  18. 18. Former Technote #1968915 db2 "ALTER TABLE EMPINST.EMPLOYEE ALTER COLUMN PROF_PHYSICAL_DELIVERY_OFFICE SET DATA TYPE VARCHAR(64)"
  19. 19. We want “an elegant weapon, for a more civilized age.”
  20. 20. Supplemental User Data for Profiles
  21. 21. Countries Work Locations Organization Departments
  22. 22. profiles_tdi.properties country_table_csv_separator=; country_table_csv_file=isocc.csv department_table_csv_separator=; department_table_csv_file=deptinfo.csv organization_table_csv_separator=; organization_table_csv_file=orginfo.csv workloc_table_csv_separator=; workloc_table_csv_file=workloc.csv
  23. 23. Countries
  24. 24. isocc.csv ... gb;Great Britain gd;Grenada ge;Georgia gf;French Guyana gh;Ghana gi;Gibraltar gl;Greenland ...
  25. 25. ISO 3166-1 alpha-2
  26. 26. gb;Great Britain
  27. 27. gb;Great Britain � Case Sensitve
  28. 28. gb;Great Britain � Case Sensitve � One Language Only
  29. 29. We Can make issoc.csv Great Again!
  30. 30. We Can make issoc.csv Great Again! (partially)
  31. 31. Case Sensitivity
  32. 32. Directory
  33. 33. LDAP
  34. 34. map_dbrepos_from_source.properties ... calendarUrl=null countryCode=c courtesyTitle=null ...
  35. 35. User Interface
  36. 36. profiles_functions.js function func_country2lower(fieldname) { var result = work.getString("c"); result = result.toLowerCase(); return result; }
  37. 37. map_dbrepos_from_source.properties ... calendarUrl=null countryCode={func_country2lower} courtesyTitle=null ...
  38. 38. Aaaaand ….
  39. 39. User Interface
  40. 40. Almost There!
  41. 41. fill_country.[bat|sh]
  42. 42. Aaaaand ….
  43. 43. User Interface
  44. 44. Work Location
  45. 45. workloc.csv lookupcode;addr1;addr2;city;state;zip 007;"76/78 Upper Ground";"South Bank";"Lambeth";"Greater London";”SE1 9PZ” 042;”Obere Donaustraße 95”;;”Vienna”;”Vienna”; “1020”
  46. 46. fill_workloc.[bat|sh]
  47. 47. Directory
  48. 48. LDAP
  49. 49. map_dbrepos_from_source.properties ... uid={func_map_to_db_UID} workLocationCode=location # mode= ...
  50. 50. Aaaaand ….
  51. 51. User Interface
  52. 52. Almost There!
  53. 53. ProfileDetails.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="city" nlsKey="label.workLocation.city" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle> … </@util.renderProperty> <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="state" nlsKey="label.workLocation.state" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle> ...
  54. 54. ProfileDetails.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address1" nlsKey="label.workLocation.address1" hideIfEmpty=true; ref, dataId, dataKey, nlsKey,nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
  55. 55. ProfileDetails.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address2" nlsKey="label.workLocation.address2" hideIfEmpty=true; ref, dataId, dataKey, nlsKey,nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
  56. 56. ProfileDetails.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="postalCode" nlsKey="label.workLocation.address1" hideIfEmpty=true; ref, dataId, dataKey, nlsKey, nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/> </@util.renderProperty>
  57. 57. Aaaaand ….
  58. 58. User Interface
  59. 59. Organization
  60. 60. orginfo.csv lookupcode;name 23;"Chaos Computer Club" 23;"h2g2" 360;”IBM” "RkReÜAÜG";"Rinderkennzeichnungs- und Rindfleischetikettierungsüberwachungsaufgabe nübertragungsgesetz"
  61. 61. fill_organization.[bat|sh]
  62. 62. Directory
  63. 63. LDAP
  64. 64. map_dbrepos_from_source.properties ... nativeLastName=null orgId=companyname pagerNumber=null ...
  65. 65. Aaaaand ….
  66. 66. User Interface
  67. 67. Department
  68. 68. deptinfo.csv lookupcode;name 42;"Local Planning Department, Subdivision Alpha Centauri" 43;"Sirius Cybernetics Corporation Marketing Department"
  69. 69. fill_department.[bat|sh]
  70. 70. Directory
  71. 71. LDAP
  72. 72. map_dbrepos_from_source.properties ... courtesyTitle=null deptNumber=department description=null ...
  73. 73. Database
  74. 74. Aaaaand ….
  75. 75. User Interface
  76. 76. Almost There!
  77. 77. ProfileDetails.ftl <@util.renderProperty ref="deptNumber" dataId="department" dataKey="departmentTitle" nlsKey="label.departmentDisplayValue" hideIfEmpty=true; ref, dataId, dataKey, nlsKey, nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/> <br/> </@util.renderProperty>
  78. 78. User Interface
  79. 79. Still not done
  80. 80. Although deptNumber is listed in the documentation, the field is actually not defined in profiles-types.xml. => It will never display on UI.
  81. 81. Profiles-type.xml <property> <ref>workLocationCode</ref> <updatability>read</updatability> <hidden>false</hidden> </property> <property> <ref>deptNumber</ref> <updatability>read</updatability> <hidden>false</hidden> </property>
  82. 82. User Interface
  83. 83. Business Card?
  84. 84. Almost There!
  85. 85. businessCardInfo.ftl <@util.renderProperty ref="orgId" dataId="organization" dataKey="organizationTitle" nlsKey="label.organizationTitle" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>,&nbsp; </@util.renderProperty>
  86. 86. businessCardInfo.ftl <@util.renderProperty ref="deptNumber" dataId="department" dataKey="departmentTitle" nlsKey="label.departmentDisplayValue" ; ref, dataId, dataKey, nlsKey, nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/> <br/> </@util.renderProperty>
  87. 87. businessCardInfo.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address1" nlsKey="label.workLocation.address1" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle><@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>,</@util.renderProperty> <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address2" nlsKey="label.workLocation.address2" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle><@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>,</@util.renderProperty>
  88. 88. businessCardInfo.ftl <<@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="postalCode" nlsKey="label.workLocation.address1" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle><@util.renderValue ref=ref dataId=dataId dataKey=dataKey/></@util.renderProperty>
  89. 89. Business Card?
  90. 90. SEARCH
  91. 91. SearchResults.ftl <@util.renderProperty ref="deptNumber" dataId="department" dataKey="departmentTitle" nlsKey="label.departmentDisplayValue" ; ref, dataId, dataKey, nlsKey, nlsBundle> <div class='bidiAware'> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/> </div> </@util.renderProperty>
  92. 92. SearchResults.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address1" nlsKey="label.workLocation.address1" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle> <div class='bidiAware'> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
  93. 93. SearchResults.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="address2" nlsKey="label.workLocation.address2" hideIfEmpty=true ; ref, dataId, dataKey, nlsKey, nlsBundle> <div class='bidiAware'> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
  94. 94. SearchResults.ftl <@util.renderProperty ref="workLocationCode" dataId="workLocation" dataKey="postalCode" nlsKey="label.workLocation.address1" hideIfEmpty=true; ref, dataId, dataKey, nlsKey, nlsBundle> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/> </@util.renderProperty>
  95. 95. SEARCH
  96. 96. METRICS
  97. 97. Mapping user profile attributes to report dimensions <userAttributesMappings> <!-- <mapping metricsName="attribute1" profilesName="com.ibm.snx_profiles.base.countryCode"/> <mapping metricsName="attribute2" profilesName="com.ibm.snx_profiles.base.orgId"/> <mapping metricsName="attribute3" profilesName="com.ibm.snx_profiles.base.title"/> --> <mapping metricsName="attribute1" profilesName="com.ibm.snx_profiles.base.countryCode"/> <mapping metricsName="attribute2" profilesName="com.ibm.snx_profiles.base.workLocationCode"/> <mapping metricsName="attribute3" profilesName="com.ibm.snx_profiles.ext.customAttribute"/> </userAttributesMappings>
  98. 98. Tools
  99. 99. Codes Connector
  100. 100. Sync
  101. 101. profiles-config.xml <templateReloading>5</templateReloading>
  102. 102. PITFALLS
  103. 103. Draw a Blank
  104. 104. Draw a Blank in ProfileDetails.ftl <@util.renderProperty ...> <@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
  105. 105. Draw a Blank
  106. 106. Search vs. Search
  107. 107. No Customization in “Search All Content → Limit to Profiles”
  108. 108. Questions? 117 Martin Leyrer IT-Specialist at IBM Austria E-mail: martin.leyrer@at.ibm.com Twitter: http://www.twitter.com/leyrer FB: https://www.facebook.com/leyrer Blog: http://www.leyon.at Slideshare: http://www.slideshare.net/Martin.Leyrer
  109. 109. Links ● Falsehoods programmers believe about addresses: https://www.mjt.me.uk/posts/falsehoods-programmers-believe-about-addresses/ ● Country Codes - ISO 3166: http://www.iso.org/iso/country_codes ● Customizing Profiles: http://www.ibm.com/support/knowledgecenter/SSYGQH_5.5.0/admin/customize/c_admin _profiles_customizing.html ● CodesConnector: http://www.ibm.com/support/knowledgecenter/en/SSYGQH_5.5.0/admin/admin/t_admin_ profiles_using_codes_connector.html ● Technote #1698402: Some users cannot be populated as PROF_PHYSICAL_DELIVERY_OFFICE limited to 32 characters: http://www- 01.ibm.com/support/docview.wss?uid=swg21698402
  110. 110. Links ● Supplemental user data for Profiles http://www.ibm.com/support/knowledgecenter/SSYGQH_5.5.0/admin/install/r_prof_fill- tables.html ● Mapping user profile attributes to report dimensions http://www.ibm.com/support/knowledgecenter/SSYGQH_5.5.0/admin/admin/t_admin_met rics_mng_map_report.html

×