Rich Seymore Account Technology Specialist Education Microsoft Corporation.
Feed me, Seymore - Supplemental User Data for IC Profiles
-
Upload
icon-uk-events-limited -
Category
Technology
-
view
55 -
download
5
Transcript of Feed me, Seymore - Supplemental User Data for IC Profiles
ICONUK 2016
Martin Leyrer, IBM Austria
London, 2016-09-15
Feed me, Seymour! Supplemental User Data For IC Profiles
Martin Leyrer - IBM
● IBM Collaboration Solutions IT-Specialist with IBM Austria
● ICS product stack since 1995
● IBM e-mail: [email protected]
● E-mail: [email protected]
● Twitter: http://www.twitter.com/leyrer
● Facebook: https://www.facebook.com/leyrer
● Blog: http://www.leyon.at
Addresses
Easy, right?
IBM United Kingdom Limited76/78 Upper Ground
South BankLondon SE1 9PZUnited Kingdom
IBM ÖsterreichHauptverwaltung
Obere Donaustraße 95,1020 Vienna
ViennaAustria
IBM 中国有限公司北京市朝阳区北四环中路 27号盘古大观写字楼
25层
Easy?
Addresses will have a reasonablenumber of characters
Say less than 100.
Department For Environment Food & Rural Affairs (D E F R A)
State Veterinary Service, Animal Health OfficeHadrian House, Wavell Drive
Rosehill Industrial EstateCarlisle, CA1 2TBUnited Kingdom
But street names will be reasonably short.Certainly less than 50 characters
Bischöflich-Geistlicher-Rat-Josef-Zinnbauer-Straße
84130 DingolfingBavaria
Germany
Five lines and country will cover all cases.
GB Technical ServicesUnit W7a
Warwick House18 Forge Lane
Minworth Industrial ParkMinworth
Sutton Coldfield B76 1AHUnited Kingdom
And what do we get in IBM Connections to cover all this?
CREATE TABLE EMPINST.EMPLOYEE (...
PROF_PHYSICAL_DELIVERY_OFFICEVARCHAR(32) ,
...
Technote #1698402
An enhancement request for increasing the limit has been raised under APAR LO33688 for
development consideration for a future release.
Former Technote #1968915
db2 "ALTER TABLE EMPINST.EMPLOYEE ALTER COLUMN
PROF_PHYSICAL_DELIVERY_OFFICE SET DATA TYPE VARCHAR(64)"
We want
“an elegant weapon, for a more civilized age.”
Supplemental User Data for Profiles
CountriesWork Locations
OrganizationDepartments
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
Countries
isocc.csv
...gb;Great Britain
gd;Grenadage;Georgia
gf;French Guyanagh;Ghanagi;Gibraltar
gl;Greenland...
ISO 3166-1 alpha-2
gb;Great Britain
gb;Great Britain
� Case Sensitve
gb;Great Britain
� Case Sensitve
� One Language Only
We Can make issoc.csv
Great Again!
We Can make issoc.csv
Great Again!
(partially)
Case Sensitivity
Directory
LDAP
map_dbrepos_from_source.properties
...calendarUrl=nullcountryCode=ccourtesyTitle=null
...
User Interface
profiles_functions.js
function func_country2lower(fieldname) { var result = work.getString("c");
result = result.toLowerCase(); return result;}
map_dbrepos_from_source.properties
...calendarUrl=null
countryCode={func_country2lower}courtesyTitle=null
...
Aaaaand ….
User Interface
Almost There!
fill_country.[bat|sh]
Aaaaand ….
User Interface
Work Location
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”
fill_workloc.[bat|sh]
Directory
LDAP
map_dbrepos_from_source.properties
...uid={func_map_to_db_UID}
workLocationCode=location# mode=
...
Aaaaand ….
User Interface
Almost There!
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>...
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>
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>
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>
Aaaaand ….
User Interface
Organization
orginfo.csv
lookupcode;name
23;"Chaos Computer Club"23;"h2g2"360;”IBM”
"RkReÜAÜG";"Rinderkennzeichnungs- und Rindfleischetikettierungsüberwachungsaufgabe
nübertragungsgesetz"
fill_organization.[bat|sh]
Directory
LDAP
map_dbrepos_from_source.properties
...nativeLastName=null
orgId=companynamepagerNumber=null
...
Aaaaand ….
User Interface
Department
deptinfo.csv
lookupcode;name
42;"Local Planning Department, Subdivision Alpha Centauri"
43;"Sirius Cybernetics Corporation Marketing Department"
fill_department.[bat|sh]
Directory
LDAP
map_dbrepos_from_source.properties
...courtesyTitle=null
deptNumber=departmentdescription=null
...
Database
Aaaaand ….
User Interface
Almost There!
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>
User Interface
Still not done
Although deptNumber is listed in the documentation, the field is actually not
defined in profiles-types.xml.
=> It will never display on UI.
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>
User Interface
Business Card?
Almost There!
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/>, </@util.renderProperty>
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>
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>
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>
Business Card?
SEARCH
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>
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>
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>
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>
SEARCH
METRICS
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>
Tools
Codes Connector
Sync
profiles-config.xml
<templateReloading>5</templateReloading>
PITFALLS
Draw a Blank
Draw a Blank in ProfileDetails.ftl
<@util.renderProperty ...><@util.renderValue ref=ref dataId=dataId dataKey=dataKey/>, </@util.renderProperty>
Draw a Blank
Search vs. Search
No Customization in “Search All Content → Limit to Profiles”
Questions?
117
Martin Leyrer
IT-Specialist at IBM Austria
E-mail: [email protected]
Twitter: http://www.twitter.com/leyrer
FB: https://www.facebook.com/leyrer
Blog: http://www.leyon.at
Slideshare:http://www.slideshare.net/Martin.Leyrer
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
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_metrics_mng_map_report.html