**New Developers Working Group** ====== The Fieldmapper ====== The fieldmapper (''fm_IDL.xml'') maps the fields! It defines objects’ fields, linked fields from other objects, and permissions needed to access various things. Most of the Evergreen code (including the reports engine) accesses the database content via the fieldmapper rather than accessing the database directly. * [[https://git.evergreen-ils.org/?p=Evergreen.git;a=blob;f=Open-ILS/examples/fm_IDL.xml;h=a4fb45b078c1f80ccfdcb82d9bc2a8ee40fc749a;hb=HEAD|fm_IDL.xml in Evergreen git repository]] The fieldmapper is installed in two locations on your server: * /openils/conf/fm_IDL.xml * /openils/var/web/reports/fm_IDL.xml To view the current fieldmapper on your own site through a browser: * https://[your domain].org/reports/fm_IDL.xml Outline of fieldmapper classes: * [[evergreen-user:reporting_data_dictionary|Reporting data dictionary]] ===== Things to Add to This Page: ===== * Information about the main fieldmapper classes * Example of how to navigate the fieldmapper * Relationship of the fieldmapper to reports * Relationship of the fieldmapper to the PostgreSQL database schemas ===== Parts of the Fieldmapper ===== ==== class header ==== === class === This is the shortened term to describe this set of information. If your class will be accessible to pcrud, this is the term you'll use to reference this class in other places in the code. === controller === There are multiple values possible for this field. They include: * open-ils.cstore * open-ils.pcrud * open-ils.reporter-store === oils_obj:fieldmapper === === oils_persist:tablename === === oils_persist:virtual === This essentially means that the class or field is not "real" in the actual database table, only in the context of the IDL. It is often used for links to other classes: It can also be used to indicate such things as a view that is defined by SQL in the IDL rather than in the database. === oils_persist:readonly === === reporter:core === If set to true, this view will show up in the list of core report sources. Only use this if the value is true. It should be written as reporter:core="true" === reporter:label === This will be the name of your view in list of available report sources in the reporter, so it should be in readable language. ==== fields ==== === oils_persist:primary === === oils_persist:sequence === === field reporter:label === === name === === reporter:datatype === ==== links ==== === link field === === reltype === These distinctions are to indicate key directionality. They are not to indicate nullability. * has_a * has_many * might_have === key === === map === === class === ==== permacrud ==== If you specified **open-ils.pcrud** in the controller, you need to have a section for permacrud. If you did __not__ specify **open-ils.pcrud** in the controller, do not include this section. This section specifies whether users should have the ability to create, update, delete, or only retrieve data from this class and its associated table (if applicable). === permacrud xmlns === This should be the opening tag for your peramcrud area. === actions === == options == * **create** - Must correspond to a permission * **retrieve** - Can be used alone without the other create/update/delete actions. Can be used without a specific permission, if appropriate for how the class is to be used * **update** - Must correspond to a permission * **delete** - Must correspond to a permission If using the create/update/delete actions, the class must also be mapped to an **[[newdevs:db:fm#oils_persist:tablename|oils_persist:tablename]].** == context_field == == context link == == field == == global_required == == owning_user ==