{"id":1225,"date":"2024-03-13T10:25:18","date_gmt":"2024-03-13T09:25:18","guid":{"rendered":"https:\/\/contecon.de\/picapportwiki\/?page_id=1225"},"modified":"2024-05-24T15:44:36","modified_gmt":"2024-05-24T13:44:36","slug":"picapport-add-on-programming-reference-2","status":"publish","type":"page","link":"https:\/\/contecon.de\/picapportwiki\/picapport-add-on-programming-reference-2\/","title":{"rendered":"PicApport Add-on Programming Reference"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1225\" class=\"elementor elementor-1225\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3de487c e-flex e-con-boxed e-con e-parent\" data-id=\"3de487c\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ae2a68 elementor-widget elementor-widget-heading\" data-id=\"6ae2a68\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.19.0 - 07-02-2024 *\/\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h2 class=\"elementor-heading-title elementor-size-default\">PicApport Add-on Programming Reference<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e45d8ec elementor-widget elementor-widget-text-editor\" data-id=\"e45d8ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.19.0 - 07-02-2024 *\/\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\t<p>This page is for programers and describes the programming of PicApport-Add-ons in the Groovy language.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0c3919c elementor-widget elementor-widget-heading\" data-id=\"0c3919c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">General<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3fad82 elementor-widget elementor-widget-text-editor\" data-id=\"c3fad82\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Add-ons have to be written in the groovy-programming language and have been introduced in PicApport V9.0.<\/p><p>All Add-ons provided by Contecon are available in source code, so it&#8217;s a good idea to understand our Add-ons before you start your own projects.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d91c6da elementor-widget elementor-widget-heading\" data-id=\"d91c6da\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Development cycle \/ infrastructure<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1eb8688 elementor-widget elementor-widget-text-editor\" data-id=\"1eb8688\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>See <a href=\"https:\/\/wiki.picapport.com\/display\/PICE\/PicApport+Add-on+Installation+Guide\">PicApport Add-on Installation Guide<\/a> for information about directory structure, naming conventions and the groovy run-time environment.<\/p><p>Because Add-ons are written in Groovy they can be updated while the PicApport-Server is running. This helps a lot to speed up the programming process of an Add-on.<\/p><p>To start we recommend to use one of our template-groovy-add-ons\u00a0 and copy it to a new directory below <em><strong>.picapport\/groovy<\/strong><\/em><\/p><p>The Add-ons will be loaded automatically during the server startup or when the <strong><em>reloadaddons<\/em> <\/strong>command is entered on the server console or automatically when an add-on of type procedure is executed.<\/p><p>An Add-on must have the file extension <em><strong>.groovy.<\/strong><\/em><\/p><p>If an Add-on needs special support of java library&#8217;s (.jar files) make sure that these jar files are in the classpath of your picapport server.<\/p><p>Best practices<\/p><ul><li>For development use a separate PicApport Server with a small amount of photos<br \/><br \/><\/li><li>Make a backup copy of the photos<br \/><br \/><\/li><li>During loading and recompiling errors and problems are reported on the PicApport server console, so it&#8217;s good to have access to the console.<br \/><br \/><\/li><li><p class=\"auto-cursor-target\">check the<em><strong> .picapport\\groovy\\logfiles\\currentConfiguration.log<\/strong><\/em> for problems and loaded configuration<\/p><div class=\"code panel pdl conf-macro output-block\" data-hasbody=\"true\" data-macro-name=\"code\"><div class=\"codeHeader panelHeader pdl hide-border-bottom\"><b class=\"code-title\">Sample currentConfiguration.log<\/b> <span class=\"collapse-source expand-control\"><span class=\"expand-control-text\"><br \/><\/span><\/span><\/div><div class=\"codeContent panelContent pdl hide-toolbar show-border-top\"><div><div id=\"highlighter_61680\" class=\"syntaxhighlighter sh-confluence nogutter  text expanded\"><table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\" title=\"Hint: double-click to select code\"><div class=\"line number1 index0 alt2\"><code class=\"text plain\">Groovy configuration log created: Fri Sep 11 09:30:53 CEST 2020<\/code><\/div><div class=\"line number2 index1 alt1\">\u00a0<\/div><div class=\"line number3 index2 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">GroovyManager.loadGroovyFromClasspath: Groovy not found on classpath. Now try to load from C:\\Users\\Eric\\.picapport\\groovy<\/code><\/div><div class=\"line number4 index3 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Search for Groovy runtime (apache-groovy-binary-*.zip) in C:\\Users\\Eric\\.picapport\\groovy<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy runtime C:\\Users\\Eric\\.picapport\\groovy\\apache-groovy-binary-3.0.5.zip<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Groovy directory C:\\Users\\Eric\\.picapport\\groovy\\groovy-3.0.5 exists<\/code><\/div><div class=\"line number7 index6 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Adding Groovy jar to new URLClassLoaderC:\\Users\\Eric\\.picapport\\groovy\\groovy-3.0.5\\lib\\groovy-3.0.5.jar<\/code><\/div><div class=\"line number8 index7 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Groovy runtime loaded from C:\\Users\\Eric\\.picapport\\groovy: 3.0.5<\/code><\/div><div class=\"line number9 index8 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code>\u00a0<\/div><div class=\"line number10 index9 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Search for new Add-ons (pag?AddonName-v.v.v.zip) in C:\\Users\\Eric\\.picapport\\groovy<\/code><\/div><div class=\"line number11 index10 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">0 Add-ons installed\/updated<\/code><\/div><div class=\"line number12 index11 alt1\">\u00a0<\/div><div class=\"line number13 index12 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Start (re)loading Groovy Addons: Fri Sep 11 09:30:54 CEST 2020<\/code><\/div><div class=\"line number14 index13 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagcPrivateFileFilter\\PrivateFileFilter.groovy Version:1.0.0 addontype:PathFilter of class:PrivateFileFilter<\/code><\/div><div class=\"line number15 index14 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagfNonJpgTitleField\\NonJpgTitleField.groovy Version:1.0.0 addontype:PhotoFieldProvider of class:NonJpgTitleField<\/code><\/div><div class=\"line number16 index15 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpExifToolSimpleInfo\\ExifToolSimpleInfo.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:ExifToolSimpleInfo<\/code><\/div><div class=\"line number17 index16 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpGroovyProceduresTestTool\\GroovyProceduresTestTool.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:GroovyProceduresTestTool<\/code><\/div><div class=\"line number18 index17 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpMetadataAnalyser\\MetadataAnalyser.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:MetadataAnalyser<\/code><\/div><div class=\"line number19 index18 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpOpenrouteGeoJSONRoute\\OpenrouteGeoJSONRoute.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:OpenroutGeoJSONRoute<\/code><\/div><div class=\"line number20 index19 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpOSMGeoReverseEncoder\\OSMFields.groovy Version:1.0.0 addontype:PhotoFieldProvider of class:OSMFields<\/code><\/div><div class=\"line number21 index20 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osm of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=true addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number22 index21 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osmCountry of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number23 index22 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osmState of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number24 index23 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osmPostcode of type DATA_TYPE_STRING index=INDEX_TYPE_ID addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number25 index24 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osmCity of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number26 index25 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:osmRoad of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number27 index26 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpOSMGeoReverseEncoder\\OSMGeoReverseEncoder.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:OSMGeoReverseEncoder<\/code><\/div><div class=\"line number28 index27 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpTagYourPhotos\\TagYourPhotos.groovy Version:1.0.0 addontype:PhotoFileProcessor of class:TagYourPhotos<\/code><\/div><div class=\"line number29 index28 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Load Groovy Addon C:\\Users\\Eric\\.picapport\\groovy\\pagpTagYourPhotos\\TagYourPhotosFields.groovy Version:1.0.0 addontype:PhotoFieldProvider of class:TagYourPhotosFields<\/code><\/div><div class=\"line number30 index29 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:TagYourPhotos of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=true addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number31 index30 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typTags of type DATA_TYPE_STRING index=INDEX_TYPE_HIERARCHICAL addToGlobalFulltext=false addToGlobalKeywords=true addToReport=true<\/code><\/div><div class=\"line number32 index31 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typLandmarks of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number33 index32 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typCountry of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number34 index33 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typState of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number35 index34 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typCity of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number36 index35 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field:typDistrict of type DATA_TYPE_STRING index=INDEX_TYPE_FULLTEXT addToGlobalFulltext=false addToGlobalKeywords=false addToReport=true<\/code><\/div><div class=\"line number37 index36 alt2\">\u00a0<\/div><div class=\"line number38 index37 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Check for new photofields.<\/code><\/div><div class=\"line number39 index38 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osm already exists.<\/code><\/div><div class=\"line number40 index39 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osmCountry already exists.<\/code><\/div><div class=\"line number41 index40 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osmState already exists.<\/code><\/div><div class=\"line number42 index41 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osmPostcode already exists.<\/code><\/div><div class=\"line number43 index42 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osmCity already exists.<\/code><\/div><div class=\"line number44 index43 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field osmRoad already exists.<\/code><\/div><div class=\"line number45 index44 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field TagYourPhotos already exists.<\/code><\/div><div class=\"line number46 index45 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typTags already exists.<\/code><\/div><div class=\"line number47 index46 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typLandmarks already exists.<\/code><\/div><div class=\"line number48 index47 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typCountry already exists.<\/code><\/div><div class=\"line number49 index48 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typState already exists.<\/code><\/div><div class=\"line number50 index49 alt1\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typCity already exists.<\/code><\/div><div class=\"line number51 index50 alt2\"><code class=\"text spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"text plain\">Field typDistrict already exists.<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/div><\/div><\/div><\/li><\/ul>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aebe454 elementor-widget elementor-widget-heading\" data-id=\"aebe454\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Add-on types<\/h3>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-69f40ac elementor-widget elementor-widget-text-editor\" data-id=\"69f40ac\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>Currently the following add-on type are supported:<\/p><h3 id=\"PicApportAdd-onProgrammingReference-Crawlerfilter(pagc)\">Crawler filter (pagc)<\/h3><p>see\u00a0<a href=\"https:\/\/contecon.de\/picapportwiki\/add-on-type-crawler-filter-pagc\/\">Add-on type: Crawler filter (pagc)<\/a> for more Information<\/p><h3 id=\"PicApportAdd-onProgrammingReference-Procedures(pagp)\">Procedures (pagp)<\/h3><p>see\u00a0<a href=\"https:\/\/contecon.de\/picapportwiki\/add-on-type-procedure-pagp\/\">Add-on type: Procedure (pagp)<\/a> for more Information<\/p><h3 id=\"PicApportAdd-onProgrammingReference-DatabaseFieldextensions(pagf)\">Database Field extensions (pagf)<\/h3><p>see\u00a0<a href=\"https:\/\/contecon.de\/picapportwiki\/add-on-type-database-field-extension-pagf\/\">Add-on type: Database Field extension (pagf)<\/a> for more Information<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a2e85e4 e-flex e-con-boxed e-con e-parent\" data-id=\"a2e85e4\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>PicApport Add-on Programming Reference This page is for programers and describes the programming of PicApport-Add-ons in the Groovy language. General Add-ons have to be written in the groovy-programming language and have been introduced in PicApport V9.0. All Add-ons provided by Contecon are available in source code, so it&#8217;s a good idea to understand our Add-ons [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1225","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/pages\/1225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/comments?post=1225"}],"version-history":[{"count":7,"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/pages\/1225\/revisions"}],"predecessor-version":[{"id":2307,"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/pages\/1225\/revisions\/2307"}],"wp:attachment":[{"href":"https:\/\/contecon.de\/picapportwiki\/wp-json\/wp\/v2\/media?parent=1225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}