====== Systems - DB: Users' contracts synchronization ====== ===== What do you need before you start ===== * You need install **CzechIdM 7.7.0** (and higher). * You need be logged in as **admin**. * You need enable **ACC** module. * You need to add users **john.roe **and **john.doe **if the already doesent exist. * You must have database **jdbcTest** with table **contracts**: CREATE DATABASE "jdbcTest" WITH OWNER = idmadmin ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'cs_CZ.UTF-8' LC_CTYPE = 'cs_CZ.UTF-8' CONNECTION LIMIT = -1; CREATE TABLE public.contracts ( id character varying(255), name character varying(255), state character varying(255), disbled character varying(255), description character varying(255), valid_from date, valid_to date, team_leader character varying(255), leader character varying(255), main character varying(255), changed character varying(255), organization_name character varying(255), organization_code character varying(255), owner character varying(255) ) WITH ( OIDS=FALSE ); ALTER TABLE public.contracts OWNER TO idmadmin; * And add two records: INSERT INTO public.contracts( id, name, state, disbled, description, valid_from, valid_to, team_leader, leader, main, changed, organization_name, organization_code, owner) VALUES ( '1','Contract one','30','false','visualize dot-com ROI','2016-05-04','2016-06-21','john.doe','john.doe','true','2016-06-25','Skinder','68016-376','john.roe'); INSERT INTO public.contracts( id, name, state, disbled, description, valid_from, valid_to, team_leader, leader, main, changed, organization_name, organization_code, owner) VALUES ( '2','Contract two','20','true','revolutionize viral experiences','2017-04-06',null,null,null,'true','2016-06-15','Einti','60429-911','john.roe'); ===== Create and edit DB system ===== * We go into **Systems** agenda and add a new system. Click on green button **Add**. {{ .:sync_02.png }} * Fill **System name** and at bottom of page there is green button **Save and continue**, so click on it. {{ .:contracts_03.png }}Go to **Configuration** tab and fill in information about your database. Ours are as such: ^ Host ^ jdbc:postgresql://localhost:5432/jdbcTest ^ | Port | 5432 | | User | idmadmin | | User Password | ******** | | Database | jdbcTest | | Table | contracts | | Key Column | id | | JDBC Driver | org.postgresql.Driver | | JDBC Connection URL | jdbc:postgresql://localhost:5432/jdbcTest | {{ .:contracts_04.png }} * Then go to tab **Scheme** and generate scheme. {{ .:contracts_05.png }} * Then go to **Mapping** and click on **Add** button. {{ .:contracts_06.png }} * Now fill in information from the picture below and click on **Save and continue**. {{ .:contracts_07.png }} * At the bottom of page, there are mapped attributes. We are going to add 7 attributes: ^ Attribute in schema ^ Name ^ Identifier ^ Entity attr. ^ Entity field ^ IdM key ^ Transform from system ^ | leader | leader | false | true | Guarantess | guarantees | does not have | | name | name | false | true | Name of position | position | does not have | | __NAME__ | __NAME__ | true | false | | | does not have | | owner | owner | false | true | Owner | identity | does not have | | state | state | false | true | State | state | has | | valid_from | valid_from | false | true | Valid from | validFrom | has | | valid_to | valid_to | false | true | Valid till | validTill | has | * In **Transformation from system** field of **state** attribute there is green button **Insert script** select **Compiles identity-relation state** and click **Select** {{ .:contracts_07_02.png }} * Paste to **Transformation from system** field of **valid\_from** and **valid\_to** attributes: import org.joda.time.LocalDate; if(attributeValue){ return new LocalDate(attributeValue); } * Two examples how to fill attributes: {{ .:contracts_08.png }}{{ .:contracts_09.png }} * Now we have 7 mapped attributes: {{ .:contracts_10.png }} * Go to tab **Synchronization** and **Add** new synchronization. {{ .:contracts_11.png }} * Fill the form as in the picture below and click on **Save and continue**, then click on green **arrow** and option **Save and run sync** will show up, so click on it: {{ .:contracts_12.png }} * Confirm start synchronization: {{ .:sync_13.png }} * Wait a few seconds, so synchronization can finish its job. And then go to **Users** section (in the left menu). And find user **john.roe**. * In tab positions there is now 3 contracts. The **Default** contract has been here since creating this user (for testing purposes) and the other two are synchronized from the database. {{ .:contracts_14.png }}If you have it in a state like in the upper picture you successfully complete this tutorial. Thank you for following this tutorial, I hope it was useful.