{"id":673,"date":"2010-03-18T05:35:34","date_gmt":"2010-03-18T09:35:34","guid":{"rendered":"http:\/\/www.tridens.si\/?p=673"},"modified":"2021-12-01T15:36:43","modified_gmt":"2021-12-01T15:36:43","slug":"campi-personalizzati-in-oracle-brm","status":"publish","type":"post","link":"https:\/\/tridenstechnology.com\/it\/custom-fields-in-oracle-brm\/","title":{"rendered":"Campi personalizzati in Oracle BRM"},"content":{"rendered":"<div id=\"_mcePaste\">Oracle Communications Billing and Revenue Management (Oracle BRM \\ formally known as Portal Infranet) offers two methods for creating, editing and deleting custom fields and storable classes. One approach is by using Storable Class Editor, part of the Developer Center application, and the other is by using SDK opcodes. For a number of reasons, I prefer the latter choice, and in this post I will address manipulating custom fields with SDK opcodes.<\/div>\n<div id=\"_mcePaste\">Before beginning, one change needs to be made first: making\u00a0the data dictionary writable. Here&#8217;s how to do it:<\/div>\n<div id=\"_mcePaste\">1. Open the Oracle DM or Microsoft SQL Server DM configuration file (BRM_HOME\/sys\/dm_oracle\/pin.conf or BRM_HOME\/sys\/dm_odbc\/pin.conf) in a text editor.<\/div>\n<div id=\"_mcePaste\">2. Enable field manipulation in the data dictionary, by setting the following entry to 1:- dm dd_write_enable_fields 1<\/div>\n<div id=\"_mcePaste\">Our objectives are as follows:<\/div>\n<div id=\"_mcePaste\">1. To create a custom field<\/div>\n<div id=\"_mcePaste\">2. To edit the custom field description<\/div>\n<div id=\"_mcePaste\">3. To delete the custom field from the database<\/div>\n<div id=\"_mcePaste\">4. To make the custom field available to BRM<\/div>\n<div id=\"_mcePaste\"><strong>Creating a New Custom Field<\/strong><\/div>\n<div id=\"_mcePaste\">Creating a new custom field and committing it to the database can be accomplished with SDK opcodes or with a pin deploy utility. As developers know, SDK opcodes provide a more flexible way to create, edit, and delete custom fields at the development stage. The pin deploy\u00a0utility, on the other hand, uses PODL (Portal Object Definition Language) to export and import \u00a0field and storable class definitions. This is more useful, especially at the administrative level, because the process can be streamlined by putting field definitions into source code management and thus lower any possibility of damaging the Oracle BRM production database data dictionary.<\/div>\n<div id=\"_mcePaste\">The following SDK opcodes can be used to manage field specifications:<\/div>\n<div id=\"_mcePaste\">1. PCM_OP_SDK_SET_FLD_SPECS &#8211; create or modify a field,<\/div>\n<div id=\"_mcePaste\">2. PCM_OP_SDK_GET_FLD_SPECS &#8211; retrieve a field specs,<\/div>\n<div id=\"_mcePaste\">3. PCM_OP_SDK_DEL_FLD_SPECS &#8211; delete a field.<\/div>\n<div id=\"_mcePaste\">To create a field, it\u2019s necessary to write an input flist for PCM_OP_SDK_SET_FLD_SPECS opcode:<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_POID \u00a0 \u00a0 \u00a0 \u00a0 \u00a0POID [0] 0.0.0.1 \/dd\/fields 0 0<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_FIELD \u00a0 \u00a0 \u00a0ARRAY [0]<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_DESCR \u00a0 \u00a0 \u00a0 \u00a0 \u00a0STR [0] &#8220;custom field for holding a VAT number&#8221;<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NAME \u00a0 \u00a0 \u00a0STR [0] &#8220;C_FLD_VAT_NUMBER&#8221;<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NUM \u00a0 \u00a0 \u00a0ENUM [0] 10000<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_TYPE \u00a0 \u00a0 \u00a0INT [0] 5<\/div>\n<div id=\"_mcePaste\">Now, verify that the field created exists in the database data dictionary by feeding the following input flist to PCM_OP_SDK_GET_FLD_SPECS opcode:<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_POID \u00a0 \u00a0 \u00a0POID [0] 0.0.0.1 \/dd\/objects 0 0<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_FIELD \u00a0 \u00a0ARRAY [0]<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NAME \u00a0 \u00a0STR [0] &#8220;C_FLD_VAT_NUMBER&#8221;<\/div>\n<div id=\"_mcePaste\"><strong>Editing the Custom Field Description<\/strong><\/div>\n<div id=\"_mcePaste\">Now, having confirmed that the new custom field exists, the description can be altered by calling PCM_OP_SDK_SET_FLD_SPECS opcode with the following input flist:<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_POID \u00a0 \u00a0 \u00a0 \u00a0 \u00a0POID [0] 0.0.0.1 \/dd\/fields 0 0<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_FIELD \u00a0 \u00a0 \u00a0ARRAY [0]<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_DESCR \u00a0 \u00a0 \u00a0 \u00a0 \u00a0STR [0] &#8220;custom field &#8211; VAT number&#8221;<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NAME \u00a0 \u00a0 \u00a0STR [0] &#8220;C_FLD_VAT_NUMBER&#8221;<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NUM \u00a0 \u00a0 \u00a0ENUM [0] 10000<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_TYPE \u00a0 \u00a0 \u00a0INT [0] 5<\/div>\n<div id=\"_mcePaste\">Again, the field&#8217;s specifications can be retrieved so as to verify that the change has been accomplished.<\/div>\n<div id=\"_mcePaste\"><strong>After that, delete the custom field from the database.<\/strong><\/div>\n<div id=\"_mcePaste\">Finally, assume a mistake has been made, and it\u2019s necessary to delete a field. Provide the following input flist to PCM_OP_SDK_DEL_FLD_SPECS opcode, deletes the field:<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_POID \u00a0 \u00a0 \u00a0 \u00a0POID [0] 0.0.0.1 \/dd\/fields 0 0<\/div>\n<div id=\"_mcePaste\">0 PIN_FLD_FIELD \u00a0 \u00a0 \u00a0ARRAY [0]<\/div>\n<div id=\"_mcePaste\">1 \u00a0 \u00a0PIN_FLD_FIELD_NAME \u00a0 \u00a0 \u00a0STR [0] &#8220;C_FLD_VAT_NUMBER&#8221;<\/div>\n<div id=\"_mcePaste\">If the opcode for retrieving the field&#8217;s specifications returns an empty flist (only POID obj),then that signifies the field was not found in the database data dictionary.<\/div>\n<div id=\"_mcePaste\"><strong>Making the Custom Fields Available to BRM<\/strong><\/div>\n<div id=\"_mcePaste\">Standard practice dictates that everything custom developed goes into the BRM_HOME\/custom directory, and since, in this case, BRM_HOME\/include\/pin_flds.h, is being extended, a new custom header file BRM_HOME\/custom\/include\/custom_flds.h. needs to be created<\/div>\n<div id=\"_mcePaste\">Now, the new custom field can be introduced by appending the following line to custom_flds.h:<\/div>\n<div id=\"_mcePaste\">#define C_FLD_VAT_NUMBER PIN_MAKE_FLD(PIN_FLDT_STR, 10000)<\/div>\n<div id=\"_mcePaste\">The line above defines a custom field named &#8220;C_FLD_VAT_NUMBER&#8221; (mind the naming practice,<\/div>\n<div id=\"_mcePaste\">PIN_* for BRM fields and C_* for custom fields) with data type &#8220;PIN_FLDT_STR&#8221; (STR stands for string)<\/div>\n<div id=\"_mcePaste\">and unique identifier &#8220;10000&#8221; (in regards to BRM_HOME\/include\/pin_flds.h). Data types are static,<\/div>\n<div id=\"_mcePaste\">and defined by the BRM version you are running; please see BRM_HOME\/include\/pcm.h for definitions.<\/div>\n<div id=\"_mcePaste\">Next, run the parse_custom_ops_fields.pl perl script on the custom_flds.h using this command:<\/div>\n<div id=\"_mcePaste\">$BRM_HOME\/bin\/parse_custom_ops_fields.pl -L pcmc -I custom_flds.h -O $BRM_HOME\/custom\/include\/custom_mapping.m<\/div>\n<div id=\"_mcePaste\">And finally, include the following line to every pin.conf where it\u2019s desired that these field be seen: &#8211; &#8211; ops_fields_extension_file ${BRM_HOME}\/custom\/include\/custom_mapping.m<\/div>\n<div id=\"_mcePaste\">NOTE: When introducing new functionalities using custom fields, it is necessary to include the custom_flds.h header file in the FMs that use these fields<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Oracle Communications Billing and Revenue Management (Oracle BRM \\ formally known as Portal Infranet) offers two methods for creating, editing and deleting custom fields and storable classes. One approach is by using Storable Class Editor, part of the Developer Center application, and the other is by using SDK opcodes. For a number of reasons, I&hellip;<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-673","post","type-post","status-publish","format-standard","hentry","category-oracle-billing","category-38","description-off"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.5 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Custom Fields in Oracle BRM - Tridens<\/title>\n<meta name=\"description\" content=\"Oracle Communications Billing and Revenue Management offer two methods for creating, editing and deleting custom fields and storable classes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tridenstechnology.com\/it\/campi-personalizzati-in-oracle-brm\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Custom Fields in Oracle BRM\" \/>\n<meta property=\"og:description\" content=\"Oracle Communications Billing and Revenue Management offer two methods for creating, editing and deleting custom fields and storable classes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tridenstechnology.com\/it\/campi-personalizzati-in-oracle-brm\/\" \/>\n<meta property=\"og:site_name\" content=\"Tridens\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/tridenstechnology\" \/>\n<meta property=\"article:published_time\" content=\"2010-03-18T09:35:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-01T15:36:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/tridens-monetization-black.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1504\" \/>\n\t<meta property=\"og:image:height\" content=\"493\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ale\u0161\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:site\" content=\"@TridensTech\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ale\u0161\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Campi personalizzati in Oracle BRM - Tridens","description":"Oracle Communications Billing and Revenue Management offre due metodi per creare, modificare ed eliminare i campi personalizzati e le classi memorizzabili.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tridenstechnology.com\/it\/campi-personalizzati-in-oracle-brm\/","og_locale":"it_IT","og_type":"article","og_title":"Custom Fields in Oracle BRM","og_description":"Oracle Communications Billing and Revenue Management offer two methods for creating, editing and deleting custom fields and storable classes.","og_url":"https:\/\/tridenstechnology.com\/it\/campi-personalizzati-in-oracle-brm\/","og_site_name":"Tridens","article_publisher":"https:\/\/www.facebook.com\/tridenstechnology","article_published_time":"2010-03-18T09:35:34+00:00","article_modified_time":"2021-12-01T15:36:43+00:00","og_image":[{"width":1504,"height":493,"url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/09\/tridens-monetization-black.png","type":"image\/png"}],"author":"Ale\u0161","twitter_card":"summary_large_image","twitter_creator":"@TridensTech","twitter_site":"@TridensTech","twitter_misc":{"Scritto da":"Ale\u0161","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/#article","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/"},"author":{"name":"Ale\u0161","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358"},"headline":"Custom Fields in Oracle BRM","datePublished":"2010-03-18T09:35:34+00:00","dateModified":"2021-12-01T15:36:43+00:00","mainEntityOfPage":{"@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/"},"wordCount":858,"commentCount":14,"publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"articleSection":["Oracle Billing"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/","url":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/","name":"Campi personalizzati in Oracle BRM - Tridens","isPartOf":{"@id":"https:\/\/tridenstechnology.com\/#website"},"datePublished":"2010-03-18T09:35:34+00:00","dateModified":"2021-12-01T15:36:43+00:00","description":"Oracle Communications Billing and Revenue Management offre due metodi per creare, modificare ed eliminare i campi personalizzati e le classi memorizzabili.","breadcrumb":{"@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tridenstechnology.com\/custom-fields-in-oracle-brm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tridenstechnology.com\/"},{"@type":"ListItem","position":2,"name":"Custom Fields in Oracle BRM"}]},{"@type":"WebSite","@id":"https:\/\/tridenstechnology.com\/#website","url":"https:\/\/tridenstechnology.com\/","name":"Tridens","description":"Monetizzazione, fatturazione e ricarica EV","publisher":{"@id":"https:\/\/tridenstechnology.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tridenstechnology.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/tridenstechnology.com\/#organization","name":"Tridens","url":"https:\/\/tridenstechnology.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/","url":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","contentUrl":"https:\/\/d2xqcz296oofyv.cloudfront.net\/wp-content\/uploads\/2019\/02\/tridens_logo_invert.png","width":600,"height":191,"caption":"Tridens"},"image":{"@id":"https:\/\/tridenstechnology.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/tridenstechnology","https:\/\/x.com\/TridensTech","https:\/\/www.instagram.com\/tridenstechnology\/","https:\/\/www.linkedin.com\/company\/tridens","https:\/\/www.youtube.com\/user\/TridensIT"]},{"@type":"Person","@id":"https:\/\/tridenstechnology.com\/#\/schema\/person\/ccd247e07a5e0f856ec13af63d611358","name":"Ale\u0161","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0df040b8c52446051022ab32cd2ac1dc64d3c7eed18d5bd5ab9f2992b8935fc8?s=96&d=mm&r=g","caption":"Ale\u0161"},"description":"Ales Pristovnik \u00e8 il CEO di Tridens Technology, un'azienda slovena specializzata nello sviluppo di soluzioni software per l'industria automobilistica. Ha una lunga esperienza nel settore IT, avendo lavorato in passato per diverse grandi aziende. Ha una passione per la tecnologia e l'innovazione, e la sua attenzione attuale \u00e8 rivolta allo sviluppo di soluzioni che migliorino la sicurezza e l'efficienza dell'industria automobilistica. Ha un forte background di leadership e di gestione e si impegna a far progredire la sua azienda nel settore tecnologico in continua evoluzione.","url":"https:\/\/tridenstechnology.com\/it\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/posts\/673","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/comments?post=673"}],"version-history":[{"count":0,"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/posts\/673\/revisions"}],"wp:attachment":[{"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/media?parent=673"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/categories?post=673"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tridenstechnology.com\/it\/wp-json\/wp\/v2\/tags?post=673"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}