119
ICONUK 2016 Martin Leyrer, IBM Austria London, 2016-09-15 Feed me, Seymour! Supplemental User Data For IC Profiles

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

Embed Size (px)

Citation preview

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/>,&nbsp; </@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