{"id":1986,"date":"2025-08-29T13:47:09","date_gmt":"2025-08-29T11:47:09","guid":{"rendered":"https:\/\/johannesauer.com\/en\/?p=1986"},"modified":"2025-08-29T13:59:24","modified_gmt":"2025-08-29T11:59:24","slug":"creating-a-logic-module-data-enrichment-for-sap-vim-free-template","status":"publish","type":"post","link":"https:\/\/johannesauer.com\/en\/development\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/","title":{"rendered":"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)"},"content":{"rendered":"\n<div class=\"wp-block-ainoblocks-notification-block status-warning border-all icon-outline hide-icon hide-close\" style=\"border-width:1px\" x-data=\"{ open: true }\" @click=\"open = !open\" :class=\"{'close': ! open }\"><div class=\"content-wrapper\"><span class=\"icon\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 17c0.552 0 1 0.448 1 1s-0.448 1-1 1c-0.552 0-1-0.448-1-1s0.448-1 1-1zM13 5v10h-2v-10h2z\"><\/path><\/svg><\/span>\n<p class=\"has-text-align-justify has-medium-font-size has-text-align-justify\" style=\"margin-right:var(--wp--preset--spacing--30);margin-left:var(--wp--preset--spacing--30)\">This article is intended for informational purposes only and does not supersede or replace the official documentation provided by OpenText. It serves as supplementary guidance to assist with common challenges that may arise during installation and upgrades. For authoritative instructions and compliance requirements, refer to OpenText\u2019s official documentation.<\/p>\n<\/div><\/div>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">When working with SAP Vendor Invoice Management (VIM), standard configurations often cover the majority of business needs \u2014 but not all of them. In many projects, there comes a point where additional data enrichments are required to ensure invoices are processed correctly and efficiently. This is where <strong>Logic Modules<\/strong> come into play. Logic Modules allow you to extend VIMs capabilities by injecting custom ABAP code into the document processing flow.<\/p>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">In this guide, I&#8217;ll walk you through creating a simple data enrichment logic module, step by step: from the <strong>ABAP implementation<\/strong> to configuration in <strong>\/n\/OPT\/SPRO<\/strong> and finally the mapping to document types. By the end, you&#8217;ll have a working example that you can adapt to your own project requirements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Creating the logic module class<\/h2>\n\n\n\n<p>Creating the logic module class using superclass \/OPT\/CL_D_LM_SUPER. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"504\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-29-1024x504.png\" alt=\"\" class=\"wp-image-1990\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-29-1024x504.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-29-300x148.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-29-768x378.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-29.png 1156w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Redefine method \/OPT\/IF_D_BP_MODULE~PROCESSING <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"266\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30-1024x266.png\" alt=\"\" class=\"wp-image-1991\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30-1024x266.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30-300x78.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30-768x199.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30-1536x399.png 1536w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-30.png 1710w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A very minimalistic logic module can just consist of one line:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>  METHOD \/opt\/if_d_bp_module~processing.\n    ev_success = 'X'. \"this is important!\n  ENDMETHOD.<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">METHOD<\/span><span style=\"color: #D8DEE9FF\"> \/opt\/if_d_bp_module~<\/span><span style=\"color: #88C0D0\">processing<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ev_success <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">'X'<\/span><span style=\"color: #D8DEE9FF\">. <\/span><span style=\"color: #616E88\">\"this is important!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">ENDMETHOD<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">It is important to remember giving back ev_success = &#8216;X&#8217; in logic modules as the missing success indicator can cause the following logic modules to not start. <\/p>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">&#8220;Success&#8221; in this case does not mean that actual data was enriched but just that the logic module did not encounter any issue. This is different in <a href=\"https:\/\/johannesauer.com\/en\/development\/creating-a-data-enrichment-for-sap-vim-solutions-beyond-invoice-template\/\">VIM Beyond Invoices Data Enrichments<\/a> where you only want to give the success marker back when there was really data enriched.<\/p>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">As an empty logic module does not bring any benefit so lets give it some simple logic. Here\u2019s a basic example that sets an empty reference number to &#8220;Test&#8221; + DocID::<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>  METHOD \/opt\/if_d_bp_module~processing.\n\n* in case the reference number is empty we fill it with \"Test\" and the current docid. Resulting in e. g. \"Test5\" for Doc. ID 5.\n    IF cv_index_header-xblnr IS INITIAL.\n      CONCATENATE 'Test' cv_index_header-docid INTO cv_index_header-xblnr.\n    ENDIF.\n    \n    ev_success = 'X'. \"this is important!\n\n  ENDMETHOD.<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">METHOD<\/span><span style=\"color: #D8DEE9FF\"> \/opt\/if_d_bp_module~<\/span><span style=\"color: #88C0D0\">processing<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">* in case the reference number is empty we fill it with \"Test\" and the current docid. Resulting in e. g. \"Test5\" for Doc. ID 5.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\"> IF<\/span><span style=\"color: #D8DEE9FF\"> cv_index_header-xblnr <\/span><span style=\"color: #81A1C1\">IS<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">INITIAL<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">CONCATENATE<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">'Test'<\/span><span style=\"color: #D8DEE9FF\"> cv_index_header-docid <\/span><span style=\"color: #81A1C1\">INTO<\/span><span style=\"color: #D8DEE9FF\"> cv_index_header-xblnr.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">   <\/span><span style=\"color: #81A1C1\"> ENDIF<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ev_success <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #A3BE8C\">'X'<\/span><span style=\"color: #D8DEE9FF\">. <\/span><span style=\"color: #616E88\">\"this is important!<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">ENDMETHOD<\/span><span style=\"color: #D8DEE9FF\">.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Save and activate your Logic Module class.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Defining a Logic Module<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">Now that we have created the logic module class lets head to \/n<strong>\/OPT\/SPRO<\/strong> and navigate to Document Processing Configuration <strong>><\/strong> Document Type Configuration <strong>><\/strong> Logic Module Processing <strong>><\/strong> Logic Module Processing<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"922\" height=\"682\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-31.png\" alt=\"\" class=\"wp-image-1992\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-31.png 922w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-31-300x222.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-31-768x568.png 768w\" sizes=\"auto, (max-width: 922px) 100vw, 922px\" \/><\/figure>\n\n\n\n<p>Create an entry with an unique Module ID, a meaningful descripton and the name of the class you just created:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"151\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-1024x151.png\" alt=\"\" class=\"wp-image-1993\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-1024x151.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-300x44.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-768x113.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-1536x227.png 1536w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-32-2048x302.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">It is a good practice to start custom logic modules with a &#8220;Z&#8221; and stick to the naming convention from product standard. <\/p>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">Example: &#8220;ZN_ITEM_001&#8221; is affecting NPO Invoices and updates line item information (001 is a running number) while &#8220;ZP_HEAD_001&#8221; is affecting PO-Related invoices and header information is updated. <\/p>\n\n\n\n<p>Remember the name and move on to the next step.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Processing Definition and Module Processing Steps<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">You can Imagine a &#8220;<strong>Processing Definition<\/strong>&#8221; as a <mark style=\"background-color:#FFEE58\" class=\"has-inline-color\">collection of logic modules<\/mark> which you can later assign to a DP document type like &#8220;Z_NPO&#8221; or &#8220;PO_75&#8221;. It is not possible to directly assign a logic module to a document type therefore lets create a Processing Definition. Add a Process ID and a Description and you can move on the &#8220;Module Processing Steps&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"247\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-33-1024x247.png\" alt=\"\" class=\"wp-image-1997\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-33-1024x247.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-33-300x72.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-33-768x185.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-33.png 1160w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">For a basic processing definition with just one module you can simply add a counter (We suggest using 10 so you can add something before this module later), the Module ID we defined before, the &#8220;Active&#8221; checkbox and the Processing mode (Run only at processing start, only when re-running business rules or both):<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"120\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-1024x120.png\" alt=\"\" class=\"wp-image-1998\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-1024x120.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-300x35.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-768x90.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-1536x180.png 1536w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-34-2048x240.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now we have created our collection of logic modules (with just one logic module for now) and can can move on to the next step: Process Mapping.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Mapping groups of Logic Modules (&#8220;Processing Definition&#8221;) to DP Document Types<\/h2>\n\n\n\n<p>To complete the setup you simply assign you Process ID (&#8220;Processing Definition&#8221;) to one or more DP Document Types:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"155\" src=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-1024x155.png\" alt=\"\" class=\"wp-image-1999\" srcset=\"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-1024x155.png 1024w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-300x45.png 300w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-768x116.png 768w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-1536x232.png 1536w, https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/image-35-2048x309.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Official Documentation<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">Always cross-check your setup with the official Open Text Guides. Starting with chapter &#8220;Processing logic modules&#8221; in &#8220;OpenText Vendor Invoice Management for SAP Solutions: Configuration Guide for Invoice Solution&#8221; (for your Version of VIM) is good idea. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Outro<\/h2>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">Logic Modules are a powerful way to adapt SAP VIM to the unique requirements of your organization. Even though the example shown here is very simple, the same principles can be applied to implement far more complex business logic \u2014 from tax code adjustments to automated field population.<\/p>\n\n\n\n<p class=\"has-text-align-justify has-text-align-justify\">By following the approach outlined above, you now have a blueprint for creating, configuring, and deploying your own custom Logic Modules. With this flexibility, VIM becomes not just a standard solution but a platform you can tailor precisely to your processes.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When working with SAP Vendor Invoice Management (VIM), standard configurations often cover the majority of business needs \u2014 but not all of them. In many projects, there comes a point where additional data enrichments are required to ensure invoices are processed correctly and efficiently. This is where Logic Modules come into play. Logic Modules allow [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1754,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,64,13],"tags":[30,66,25,14],"class_list":["post-1986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","category-sap-vim-customizing","category-sap-vim","tag-development","tag-logic-module","tag-opentext","tag-sap-vim"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/\"},\"author\":{\"name\":\"Johannes Auer\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#\\\/schema\\\/person\\\/5be8c8acac2d2546979a66edb36355f7\"},\"headline\":\"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)\",\"datePublished\":\"2025-08-29T11:47:09+00:00\",\"dateModified\":\"2025-08-29T11:59:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/\"},\"wordCount\":758,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/coding.png\",\"keywords\":[\"Development\",\"Logic Module\",\"Open Text\",\"SAP VIM\"],\"articleSection\":[\"Development\",\"SAP VIM Customizing\",\"SAP VIM\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/\",\"url\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/\",\"name\":\"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/coding.png\",\"datePublished\":\"2025-08-29T11:47:09+00:00\",\"dateModified\":\"2025-08-29T11:59:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#primaryimage\",\"url\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/coding.png\",\"contentUrl\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2025\\\/08\\\/coding.png\",\"width\":1659,\"height\":1297,\"caption\":\"Laptop with Eclipse.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/sap-vim\\\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#website\",\"url\":\"https:\\\/\\\/johannesauer.com\\\/\",\"name\":\"Johannes Auer\",\"description\":\"SAP VIM Consulting\",\"publisher\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/johannesauer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#organization\",\"name\":\"Johannes Auer\",\"url\":\"https:\\\/\\\/johannesauer.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Logo-2026-space-marble-picture-scaled.png\",\"contentUrl\":\"https:\\\/\\\/johannesauer.com\\\/wp-content\\\/uploads\\\/2026\\\/01\\\/Logo-2026-space-marble-picture-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"Johannes Auer\"},\"image\":{\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/auer\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/johannesauer.com\\\/#\\\/schema\\\/person\\\/5be8c8acac2d2546979a66edb36355f7\",\"name\":\"Johannes Auer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g\",\"caption\":\"Johannes Auer\"},\"sameAs\":[\"https:\\\/\\\/johannesauer.com\"],\"url\":\"https:\\\/\\\/johannesauer.com\\\/en\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)","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:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#article","isPartOf":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/"},"author":{"name":"Johannes Auer","@id":"https:\/\/johannesauer.com\/#\/schema\/person\/5be8c8acac2d2546979a66edb36355f7"},"headline":"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)","datePublished":"2025-08-29T11:47:09+00:00","dateModified":"2025-08-29T11:59:24+00:00","mainEntityOfPage":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/"},"wordCount":758,"commentCount":1,"publisher":{"@id":"https:\/\/johannesauer.com\/#organization"},"image":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#primaryimage"},"thumbnailUrl":"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/coding.png","keywords":["Development","Logic Module","Open Text","SAP VIM"],"articleSection":["Development","SAP VIM Customizing","SAP VIM"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/","url":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/","name":"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)","isPartOf":{"@id":"https:\/\/johannesauer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#primaryimage"},"image":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#primaryimage"},"thumbnailUrl":"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/coding.png","datePublished":"2025-08-29T11:47:09+00:00","dateModified":"2025-08-29T11:59:24+00:00","breadcrumb":{"@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#primaryimage","url":"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/coding.png","contentUrl":"https:\/\/johannesauer.com\/wp-content\/uploads\/2025\/08\/coding.png","width":1659,"height":1297,"caption":"Laptop with Eclipse."},{"@type":"BreadcrumbList","@id":"https:\/\/johannesauer.com\/en\/sap-vim\/creating-a-logic-module-data-enrichment-for-sap-vim-free-template\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/johannesauer.com\/en\/"},{"@type":"ListItem","position":2,"name":"How to Create a Custom Logic Module (Data Enrichment) for SAP VIM Invoice Processing (Step-by-Step Guide)"}]},{"@type":"WebSite","@id":"https:\/\/johannesauer.com\/#website","url":"https:\/\/johannesauer.com\/","name":"Johannes Auer","description":"SAP VIM Consulting","publisher":{"@id":"https:\/\/johannesauer.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/johannesauer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/johannesauer.com\/#organization","name":"Johannes Auer","url":"https:\/\/johannesauer.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/johannesauer.com\/#\/schema\/logo\/image\/","url":"https:\/\/johannesauer.com\/wp-content\/uploads\/2026\/01\/Logo-2026-space-marble-picture-scaled.png","contentUrl":"https:\/\/johannesauer.com\/wp-content\/uploads\/2026\/01\/Logo-2026-space-marble-picture-scaled.png","width":2560,"height":2560,"caption":"Johannes Auer"},"image":{"@id":"https:\/\/johannesauer.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/auer\/"]},{"@type":"Person","@id":"https:\/\/johannesauer.com\/#\/schema\/person\/5be8c8acac2d2546979a66edb36355f7","name":"Johannes Auer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/60aef692d1ef612aae869660d5783f53d98ea7fbd0396a3dc70f028c5294135c?s=96&d=mm&r=g","caption":"Johannes Auer"},"sameAs":["https:\/\/johannesauer.com"],"url":"https:\/\/johannesauer.com\/en\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/posts\/1986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/comments?post=1986"}],"version-history":[{"count":0,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/posts\/1986\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/media\/1754"}],"wp:attachment":[{"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/media?parent=1986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/categories?post=1986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/johannesauer.com\/en\/wp-json\/wp\/v2\/tags?post=1986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}