[{"data":1,"prerenderedAt":2168},["ShallowReactive",2],{"docs-list":3},[4,503,716,1025,1541,1840],{"id":5,"title":6,"body":7,"category":493,"description":494,"draft":495,"extension":496,"meta":497,"navigation":174,"order":498,"path":499,"seo":500,"stem":501,"__hash__":502},"docs\u002Fdocs\u002Fci-cd-opmbuild.md","Build .opm in CI\u002FCD mit opmbuild",{"type":8,"value":9,"toc":486},"minimark",[10,14,31,36,58,65,69,145,149,435,439,455,459,482],[11,12,6],"h1",{"id":13},"build-opm-in-cicd-mit-opmbuild",[15,16,17,21,22,25,26,30],"p",{},[18,19,20],"code",{},"OPM::Maker"," ist ein eigenständiges Perl-CPAN-Modul, das die ",[18,23,24],{},".opm","-Werkzeuge ",[27,28,29],"strong",{},"ohne"," vollständige OTOBO-\u002FZnuny-Installation bereitstellt. Das macht es ideal für CI\u002FCD-Pipelines.",[32,33,35],"h2",{"id":34},"installation","Installation",[37,38,43],"pre",{"className":39,"code":40,"language":41,"meta":42,"style":42},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cpanm OPM::Maker\n","bash","",[18,44,45],{"__ignoreMap":42},[46,47,50,54],"span",{"class":48,"line":49},"line",1,[46,51,53],{"class":52},"sBMFI","cpanm",[46,55,57],{"class":56},"sfazB"," OPM::Maker\n",[15,59,60,61,64],{},"Das stellt den Befehl ",[18,62,63],{},"opmbuild"," bereit.",[32,66,68],{"id":67},"befehle","Befehle",[70,71,72,86],"table",{},[73,74,75],"thead",{},[76,77,78,83],"tr",{},[79,80,82],"th",{"align":81},"left","Befehl",[79,84,85],{"align":81},"Zweck",[87,88,89,100,110,120,132],"tbody",{},[76,90,91,97],{},[92,93,94],"td",{"align":81},[18,95,96],{},"opmbuild sopmtest MyPackage.sopm",[92,98,99],{"align":81},"Manifest-XML und Struktur prüfen",[76,101,102,107],{},[92,103,104],{"align":81},[18,105,106],{},"opmbuild filetest MyPackage.sopm",[92,108,109],{"align":81},"Abgleich der Filelist mit den Dateien auf der Festplatte",[76,111,112,117],{},[92,113,114],{"align":81},[18,115,116],{},"opmbuild dependencies MyPackage.sopm",[92,118,119],{"align":81},"Abhängigkeiten auflisten",[76,121,122,127],{},[92,123,124],{"align":81},[18,125,126],{},"opmbuild build --output dist\u002F MyPackage.sopm",[92,128,129,131],{"align":81},[18,130,24],{},"-Datei erzeugen",[76,133,134,139],{},[92,135,136],{"align":81},[18,137,138],{},"opmbuild index repo\u002F",[92,140,141,142,144],{"align":81},"Repository-Index-XML für ein Verzeichnis mit ",[18,143,24],{},"-Dateien erstellen",[32,146,148],{"id":147},"github-actions-beispiel","GitHub Actions Beispiel",[37,150,154],{"className":151,"code":152,"language":153,"meta":42,"style":42},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","name: Build OPM package\n\non:\n  push:\n    tags: ['v*']\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    container: perl:5.40\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Install OPM::Maker\n        run: cpanm --notest OPM::Maker\n\n      - name: Validate manifest\n        run: |\n          opmbuild sopmtest MyPackage.sopm\n          opmbuild filetest MyPackage.sopm\n\n      - name: Build .opm\n        run: opmbuild build --output dist\u002F MyPackage.sopm\n\n      - name: Upload artifact\n        uses: actions\u002Fupload-artifact@v4\n        with:\n          name: opm-package\n          path: dist\u002F*.opm\n","yaml",[18,155,156,169,176,186,194,216,221,229,237,248,259,267,281,286,299,310,315,327,338,344,350,355,367,377,382,394,405,413,424],{"__ignoreMap":42},[46,157,158,162,166],{"class":48,"line":49},[46,159,161],{"class":160},"swJcz","name",[46,163,165],{"class":164},"sMK4o",":",[46,167,168],{"class":56}," Build OPM package\n",[46,170,172],{"class":48,"line":171},2,[46,173,175],{"emptyLinePlaceholder":174},true,"\n",[46,177,179,183],{"class":48,"line":178},3,[46,180,182],{"class":181},"sfNiH","on",[46,184,185],{"class":164},":\n",[46,187,189,192],{"class":48,"line":188},4,[46,190,191],{"class":160},"  push",[46,193,185],{"class":164},[46,195,197,200,202,205,208,211,213],{"class":48,"line":196},5,[46,198,199],{"class":160},"    tags",[46,201,165],{"class":164},[46,203,204],{"class":164}," [",[46,206,207],{"class":164},"'",[46,209,210],{"class":56},"v*",[46,212,207],{"class":164},[46,214,215],{"class":164},"]\n",[46,217,219],{"class":48,"line":218},6,[46,220,175],{"emptyLinePlaceholder":174},[46,222,224,227],{"class":48,"line":223},7,[46,225,226],{"class":160},"jobs",[46,228,185],{"class":164},[46,230,232,235],{"class":48,"line":231},8,[46,233,234],{"class":160},"  build",[46,236,185],{"class":164},[46,238,240,243,245],{"class":48,"line":239},9,[46,241,242],{"class":160},"    runs-on",[46,244,165],{"class":164},[46,246,247],{"class":56}," ubuntu-latest\n",[46,249,251,254,256],{"class":48,"line":250},10,[46,252,253],{"class":160},"    container",[46,255,165],{"class":164},[46,257,258],{"class":56}," perl:5.40\n",[46,260,262,265],{"class":48,"line":261},11,[46,263,264],{"class":160},"    steps",[46,266,185],{"class":164},[46,268,270,273,276,278],{"class":48,"line":269},12,[46,271,272],{"class":164},"      -",[46,274,275],{"class":160}," uses",[46,277,165],{"class":164},[46,279,280],{"class":56}," actions\u002Fcheckout@v4\n",[46,282,284],{"class":48,"line":283},13,[46,285,175],{"emptyLinePlaceholder":174},[46,287,289,291,294,296],{"class":48,"line":288},14,[46,290,272],{"class":164},[46,292,293],{"class":160}," name",[46,295,165],{"class":164},[46,297,298],{"class":56}," Install OPM::Maker\n",[46,300,302,305,307],{"class":48,"line":301},15,[46,303,304],{"class":160},"        run",[46,306,165],{"class":164},[46,308,309],{"class":56}," cpanm --notest OPM::Maker\n",[46,311,313],{"class":48,"line":312},16,[46,314,175],{"emptyLinePlaceholder":174},[46,316,318,320,322,324],{"class":48,"line":317},17,[46,319,272],{"class":164},[46,321,293],{"class":160},[46,323,165],{"class":164},[46,325,326],{"class":56}," Validate manifest\n",[46,328,330,332,334],{"class":48,"line":329},18,[46,331,304],{"class":160},[46,333,165],{"class":164},[46,335,337],{"class":336},"s7zQu"," |\n",[46,339,341],{"class":48,"line":340},19,[46,342,343],{"class":56},"          opmbuild sopmtest MyPackage.sopm\n",[46,345,347],{"class":48,"line":346},20,[46,348,349],{"class":56},"          opmbuild filetest MyPackage.sopm\n",[46,351,353],{"class":48,"line":352},21,[46,354,175],{"emptyLinePlaceholder":174},[46,356,358,360,362,364],{"class":48,"line":357},22,[46,359,272],{"class":164},[46,361,293],{"class":160},[46,363,165],{"class":164},[46,365,366],{"class":56}," Build .opm\n",[46,368,370,372,374],{"class":48,"line":369},23,[46,371,304],{"class":160},[46,373,165],{"class":164},[46,375,376],{"class":56}," opmbuild build --output dist\u002F MyPackage.sopm\n",[46,378,380],{"class":48,"line":379},24,[46,381,175],{"emptyLinePlaceholder":174},[46,383,385,387,389,391],{"class":48,"line":384},25,[46,386,272],{"class":164},[46,388,293],{"class":160},[46,390,165],{"class":164},[46,392,393],{"class":56}," Upload artifact\n",[46,395,397,400,402],{"class":48,"line":396},26,[46,398,399],{"class":160},"        uses",[46,401,165],{"class":164},[46,403,404],{"class":56}," actions\u002Fupload-artifact@v4\n",[46,406,408,411],{"class":48,"line":407},27,[46,409,410],{"class":160},"        with",[46,412,185],{"class":164},[46,414,416,419,421],{"class":48,"line":415},28,[46,417,418],{"class":160},"          name",[46,420,165],{"class":164},[46,422,423],{"class":56}," opm-package\n",[46,425,427,430,432],{"class":48,"line":426},29,[46,428,429],{"class":160},"          path",[46,431,165],{"class":164},[46,433,434],{"class":56}," dist\u002F*.opm\n",[32,436,438],{"id":437},"ohne-eigene-pipeline-der-hub-build-service","Ohne eigene Pipeline: der Hub-Build-Service",[15,440,441,442,444,445,448,449,454],{},"Open ITSM Hub betreibt optional einen zustandslosen Dienst, der ",[18,443,63],{}," hinter einer HTTP-API kapselt (siehe ",[18,446,447],{},"backend\u002Fopmbuild-service","). Wenn er aktiviert ist, führen der ",[450,451,453],"a",{"href":452},"\u002Ftools\u002Fsopm-validator",".sopm-Validator"," und die Generatoren die echte Perl-Prüfung serverseitig aus — ganz ohne lokale Perl-Installation.",[32,456,458],{"id":457},"tipp-multi-framework-builds","Tipp: Multi-Framework-Builds",[15,460,461,462,465,466,469,470,473,474,476,477,481],{},"Da ein ",[18,463,464],{},".sopm"," mehrere ",[18,467,468],{},"\u003CFramework>","-Zeilen enthalten kann, erzeugt ",[27,471,472],{},"ein"," Build ein ",[18,475,24],{},", das auf allen deklarierten Forks installierbar ist. Prüfen Sie die Abdeckung vorab mit dem ",[450,478,480],{"href":479},"\u002Ftools\u002Fcompatibility-checker","Kompatibilitäts-Checker",".",[483,484,485],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}",{"title":42,"searchDepth":171,"depth":171,"links":487},[488,489,490,491,492],{"id":34,"depth":171,"text":35},{"id":67,"depth":171,"text":68},{"id":147,"depth":171,"text":148},{"id":437,"depth":171,"text":438},{"id":457,"depth":171,"text":458},"Automatisierung","Bauen und testen Sie OTOBO-\u002FZnuny-Pakete automatisiert ohne installiertes Ticket-System — mit dem CPAN-Tool OPM::Maker (opmbuild) in GitHub Actions.",false,"md",{},60,"\u002Fdocs\u002Fci-cd-opmbuild",{"title":6,"description":494},"docs\u002Fci-cd-opmbuild","Uvek-bkbkwUEpHdpKjiEGQkXPKwhbBWB_RULgIBBaY4",{"id":504,"title":505,"body":506,"category":708,"description":709,"draft":495,"extension":496,"meta":710,"navigation":174,"order":711,"path":712,"seo":713,"stem":714,"__hash__":715},"docs\u002Fdocs\u002Fotobo-znuny-kompatibilitaet.md","Läuft mein Paket auf OTOBO und Znuny?",{"type":8,"value":507,"toc":702},[508,511,529,533,599,609,613,635,641,645,654,680,687,691,699],[11,509,505],{"id":510},"läuft-mein-paket-auf-otobo-und-znuny",[15,512,513,514,517,518,520,521,525,526,528],{},"Kurze Antwort: ",[27,515,516],{},"meistens ja"," — aber Sie müssen es korrekt deklarieren. OTOBO, Znuny und die OTRS Community Edition stammen alle vom selben OTRS-Code ab und teilen sich das ",[18,519,24],{},"-Format. Der häufigste Grund, warum ein Paket ",[522,523,524],"em",{},"nicht"," auf einem Fork installierbar ist, ist eine fehlende ",[18,527,468],{},"-Zeile — nicht der Code selbst.",[32,530,532],{"id":531},"die-versionslinien-unterscheiden-sich","Die Versionslinien unterscheiden sich",[70,534,535,545],{},[73,536,537],{},[76,538,539,542],{},[79,540,541],{"align":81},"Fork",[79,543,544],{"align":81},"Versionslinien",[87,546,547,567,587],{},[76,548,549,552],{},[92,550,551],{"align":81},"OTOBO",[92,553,554,557,558,557,561,557,564],{"align":81},[18,555,556],{},"10.0.x",", ",[18,559,560],{},"10.1.x",[18,562,563],{},"11.0.x",[18,565,566],{},"11.1.x",[76,568,569,572],{},[92,570,571],{"align":81},"Znuny",[92,573,574,577,578,557,581,557,584],{"align":81},[18,575,576],{},"6.0.x"," … ",[18,579,580],{},"6.5.x",[18,582,583],{},"7.0.x",[18,585,586],{},"7.1.x",[76,588,589,592],{},[92,590,591],{"align":81},"OTRS Community Edition",[92,593,594,557,597],{"align":81},[18,595,596],{},"5.0.x",[18,598,576],{},[15,600,601,602,605,606,608],{},"Ein Paket, das nur ",[18,603,604],{},"\u003CFramework>6.0.x\u003C\u002FFramework>"," deklariert, wird vom ",[27,607,551],{},"-Paketmanager abgelehnt — obwohl derselbe Code dort oft problemlos läuft. Der Paketmanager prüft ausschließlich die deklarierte Version.",[32,610,612],{"id":611},"lösung-mehrere-frameworks-deklarieren","Lösung: mehrere Frameworks deklarieren",[37,614,618],{"className":615,"code":616,"language":617,"meta":42,"style":42},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CFramework>11.0.x\u003C\u002FFramework>   \u003C!-- OTOBO -->\n\u003CFramework>7.0.x\u003C\u002FFramework>    \u003C!-- Znuny -->\n\u003CFramework>6.0.x\u003C\u002FFramework>    \u003C!-- OTRS CE -->\n","xml",[18,619,620,625,630],{"__ignoreMap":42},[46,621,622],{"class":48,"line":49},[46,623,624],{},"\u003CFramework>11.0.x\u003C\u002FFramework>   \u003C!-- OTOBO -->\n",[46,626,627],{"class":48,"line":171},[46,628,629],{},"\u003CFramework>7.0.x\u003C\u002FFramework>    \u003C!-- Znuny -->\n",[46,631,632],{"class":48,"line":178},[46,633,634],{},"\u003CFramework>6.0.x\u003C\u002FFramework>    \u003C!-- OTRS CE -->\n",[15,636,637,638,640],{},"Der ",[450,639,480],{"href":479}," zeigt sofort, welche Forks Ihr Paket adressiert, und schlägt fehlende Schwester-Versionen vor.",[32,642,644],{"id":643},"deklaration-ist-kein-freifahrtschein","Deklaration ist kein Freifahrtschein",[15,646,647,648,650,651,653],{},"Eine passende ",[18,649,468],{},"-Zeile erlaubt nur die ",[522,652,35],{},". Vor der Freigabe für einen weiteren Fork prüfen Sie:",[655,656,657,668,674],"ul",{},[658,659,660,663,664,667],"li",{},[27,661,662],{},"Interne API-Aufrufe"," — einige ",[18,665,666],{},"Kernel::System::*","-Module unterscheiden sich zwischen OTOBO und Znuny.",[658,669,670,673],{},[27,671,672],{},"Templates"," — OTOBO hat Teile des Frontends modernisiert.",[658,675,676,679],{},[27,677,678],{},"Datenbank-Schema"," — selten, aber möglich bei Core-nahen Paketen.",[15,681,682,683,686],{},"Testen Sie auf jeder Ziel-Version, idealerweise automatisiert (siehe ",[450,684,685],{"href":499},"CI\u002FCD mit opmbuild",").",[32,688,690],{"id":689},"verbreitung-erhöhen","Verbreitung erhöhen",[15,692,693,694,698],{},"Wenn Ihr Paket mehrere Forks unterstützt, ",[450,695,697],{"href":696},"\u002Fdocs\u002Fpaket-veroeffentlichen","listen Sie es auf Open ITSM Hub"," mit allen kompatiblen Systemen — so finden es Nutzer aller drei Communities.",[483,700,701],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":42,"searchDepth":171,"depth":171,"links":703},[704,705,706,707],{"id":531,"depth":171,"text":532},{"id":611,"depth":171,"text":612},{"id":643,"depth":171,"text":644},{"id":689,"depth":171,"text":690},"Kompatibilität","Warum OTOBO-, Znuny- und OTRS-Pakete meist forkübergreifend laufen — und wie Sie Ihr .opm mit den richtigen \u003CFramework>-Angaben für alle drei Forks verfügbar machen.",{},40,"\u002Fdocs\u002Fotobo-znuny-kompatibilitaet",{"title":505,"description":709},"docs\u002Fotobo-znuny-kompatibilitaet","xdbNq8KNE-RtWZkM3FWB0yilcVr1LTEcY3UfmkMq4QA",{"id":717,"title":718,"body":719,"category":1018,"description":1019,"draft":495,"extension":496,"meta":1020,"navigation":174,"order":250,"path":1021,"seo":1022,"stem":1023,"__hash__":1024},"docs\u002Fdocs\u002Fotobo-znuny-paket-bauen.md","OTOBO- & Znuny-Paket bauen (.opm)",{"type":8,"value":720,"toc":1011},[721,724,743,747,750,758,762,770,855,865,869,872,917,928,955,961,965,971,986,990,1008],[11,722,718],{"id":723},"otobo-znuny-paket-bauen-opm",[15,725,726,727,729,730,735,736,739,740,686],{},"Ein ",[18,728,24],{},"-Paket ist ein XML-Container, der Perl-Code, Konfiguration, Datenbank-Änderungen und Frontend-Dateien bündelt. Gebaut wird es aus einem ",[27,731,732,734],{},[18,733,464],{},"-Quellmanifest"," plus den zugehörigen Dateien. OTOBO, Znuny und die OTRS Community Edition nutzen dasselbe Format — der wesentliche Unterschied ist das Wurzelelement (",[18,737,738],{},"otobo_package"," vs. ",[18,741,742],{},"otrs_package",[32,744,746],{"id":745},"_1-verzeichnisstruktur-anlegen","1. Verzeichnisstruktur anlegen",[15,748,749],{},"Legen Sie Ihre Dateien an den Pfaden an, an denen sie später im Ziel-System liegen sollen:",[37,751,756],{"className":752,"code":754,"language":755,"meta":42},[753],"language-text","MyPackage\u002F\n├── MyPackage.sopm\n├── Kernel\u002F\n│   └── Config\u002F\n│       └── Files\u002F\n│           └── XML\u002F\n│               └── MyPackage.xml\n└── var\u002F\n    └── httpd\u002F\n        └── htdocs\u002F\n            └── js\u002F\n                └── MyPackage.js\n","text",[18,757,754],{"__ignoreMap":42},[32,759,761],{"id":760},"_2-das-sopm-manifest-erstellen","2. Das .sopm-Manifest erstellen",[15,763,764,765,769],{},"Das Manifest deklariert Metadaten, kompatible Frameworks und die vollständige Dateiliste. Nutzen Sie den ",[450,766,768],{"href":767},"\u002Ftools\u002Fsopm-generator",".sopm-Generator",", um ein gültiges Manifest per Formular zu erzeugen:",[37,771,773],{"className":615,"code":772,"language":617,"meta":42,"style":42},"\u003C?xml version=\"1.0\" encoding=\"utf-8\" ?>\n\u003Cotobo_package version=\"1.1\">\n    \u003CName>MyPackage\u003C\u002FName>\n    \u003CVersion>1.0.0\u003C\u002FVersion>\n    \u003CFramework>11.0.x\u003C\u002FFramework>\n    \u003CFramework>7.0.x\u003C\u002FFramework>\n    \u003CVendor>Example GmbH\u003C\u002FVendor>\n    \u003CURL>https:\u002F\u002Fexample.com\u002F\u003C\u002FURL>\n    \u003CLicense>GPL-3.0\u003C\u002FLicense>\n    \u003CDescription Lang=\"en\">A short description.\u003C\u002FDescription>\n    \u003CDescription Lang=\"de\">Eine kurze Beschreibung.\u003C\u002FDescription>\n    \u003CFilelist>\n        \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n        \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n    \u003C\u002FFilelist>\n\u003C\u002Fotobo_package>\n",[18,774,775,780,785,790,795,800,805,810,815,820,825,830,835,840,845,850],{"__ignoreMap":42},[46,776,777],{"class":48,"line":49},[46,778,779],{},"\u003C?xml version=\"1.0\" encoding=\"utf-8\" ?>\n",[46,781,782],{"class":48,"line":171},[46,783,784],{},"\u003Cotobo_package version=\"1.1\">\n",[46,786,787],{"class":48,"line":178},[46,788,789],{},"    \u003CName>MyPackage\u003C\u002FName>\n",[46,791,792],{"class":48,"line":188},[46,793,794],{},"    \u003CVersion>1.0.0\u003C\u002FVersion>\n",[46,796,797],{"class":48,"line":196},[46,798,799],{},"    \u003CFramework>11.0.x\u003C\u002FFramework>\n",[46,801,802],{"class":48,"line":218},[46,803,804],{},"    \u003CFramework>7.0.x\u003C\u002FFramework>\n",[46,806,807],{"class":48,"line":223},[46,808,809],{},"    \u003CVendor>Example GmbH\u003C\u002FVendor>\n",[46,811,812],{"class":48,"line":231},[46,813,814],{},"    \u003CURL>https:\u002F\u002Fexample.com\u002F\u003C\u002FURL>\n",[46,816,817],{"class":48,"line":239},[46,818,819],{},"    \u003CLicense>GPL-3.0\u003C\u002FLicense>\n",[46,821,822],{"class":48,"line":250},[46,823,824],{},"    \u003CDescription Lang=\"en\">A short description.\u003C\u002FDescription>\n",[46,826,827],{"class":48,"line":261},[46,828,829],{},"    \u003CDescription Lang=\"de\">Eine kurze Beschreibung.\u003C\u002FDescription>\n",[46,831,832],{"class":48,"line":269},[46,833,834],{},"    \u003CFilelist>\n",[46,836,837],{"class":48,"line":283},[46,838,839],{},"        \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n",[46,841,842],{"class":48,"line":288},[46,843,844],{},"        \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n",[46,846,847],{"class":48,"line":301},[46,848,849],{},"    \u003C\u002FFilelist>\n",[46,851,852],{"class":48,"line":312},[46,853,854],{},"\u003C\u002Fotobo_package>\n",[15,856,857,858,861,862,864],{},"Jede Datei auf der Festplatte muss in der ",[18,859,860],{},"\u003CFilelist>"," stehen — und umgekehrt. Der ",[450,863,453],{"href":452}," prüft die wichtigsten Regeln direkt im Browser.",[32,866,868],{"id":867},"_3-das-paket-bauen","3. Das Paket bauen",[15,870,871],{},"Mit einer laufenden OTOBO-\u002FZnuny-Installation:",[37,873,875],{"className":39,"code":874,"language":41,"meta":42,"style":42},"# OTOBO\nbin\u002Fotobo.Console.pl Dev::Package::Build \u002Fpfad\u002Fzu\u002FMyPackage.sopm \u002Fziel\u002Fverzeichnis\u002F\n\n# Znuny \u002F OTRS\nbin\u002Fotrs.Console.pl Dev::Package::Build \u002Fpfad\u002Fzu\u002FMyPackage.sopm \u002Fziel\u002Fverzeichnis\u002F\n",[18,876,877,883,897,901,906],{"__ignoreMap":42},[46,878,879],{"class":48,"line":49},[46,880,882],{"class":881},"sHwdD","# OTOBO\n",[46,884,885,888,891,894],{"class":48,"line":171},[46,886,887],{"class":52},"bin\u002Fotobo.Console.pl",[46,889,890],{"class":56}," Dev::Package::Build",[46,892,893],{"class":56}," \u002Fpfad\u002Fzu\u002FMyPackage.sopm",[46,895,896],{"class":56}," \u002Fziel\u002Fverzeichnis\u002F\n",[46,898,899],{"class":48,"line":178},[46,900,175],{"emptyLinePlaceholder":174},[46,902,903],{"class":48,"line":188},[46,904,905],{"class":881},"# Znuny \u002F OTRS\n",[46,907,908,911,913,915],{"class":48,"line":196},[46,909,910],{"class":52},"bin\u002Fotrs.Console.pl",[46,912,890],{"class":56},[46,914,893],{"class":56},[46,916,896],{"class":56},[15,918,919,922,923,925,926,165],{},[27,920,921],{},"Ohne"," installiertes Ticket-System (z. B. in CI\u002FCD) nutzen Sie ",[18,924,63],{}," aus dem CPAN-Modul ",[18,927,20],{},[37,929,931],{"className":39,"code":930,"language":41,"meta":42,"style":42},"cpanm OPM::Maker\nopmbuild build --output \u002Fziel\u002Fverzeichnis\u002F \u002Fpfad\u002Fzu\u002FMyPackage.sopm\n",[18,932,933,939],{"__ignoreMap":42},[46,934,935,937],{"class":48,"line":49},[46,936,53],{"class":52},[46,938,57],{"class":56},[46,940,941,943,946,949,952],{"class":48,"line":171},[46,942,63],{"class":52},[46,944,945],{"class":56}," build",[46,947,948],{"class":56}," --output",[46,950,951],{"class":56}," \u002Fziel\u002Fverzeichnis\u002F",[46,953,954],{"class":56}," \u002Fpfad\u002Fzu\u002FMyPackage.sopm\n",[15,956,957,958,481],{},"Details dazu in der ",[450,959,960],{"href":499},"CI\u002FCD-Anleitung",[32,962,964],{"id":963},"_4-installieren-testen","4. Installieren & testen",[15,966,967,968,970],{},"Installieren Sie das erzeugte ",[18,969,24],{}," über den Paketmanager (Admin → Paketverwaltung → Paket installieren) oder per Konsole:",[37,972,974],{"className":39,"code":973,"language":41,"meta":42,"style":42},"bin\u002Fotobo.Console.pl Admin::Package::Install \u002Fziel\u002Fverzeichnis\u002FMyPackage-1.0.0.opm\n",[18,975,976],{"__ignoreMap":42},[46,977,978,980,983],{"class":48,"line":49},[46,979,887],{"class":52},[46,981,982],{"class":56}," Admin::Package::Install",[46,984,985],{"class":56}," \u002Fziel\u002Fverzeichnis\u002FMyPackage-1.0.0.opm\n",[32,987,989],{"id":988},"nächste-schritte","Nächste Schritte",[655,991,992,999,1003],{},[658,993,994,998],{},[450,995,997],{"href":996},"\u002Fdocs\u002Fsopm-referenz",".sopm-Referenz"," — alle Elemente im Detail",[658,1000,1001],{},[450,1002,505],{"href":712},[658,1004,1005],{},[450,1006,1007],{"href":696},"Paket auf Open ITSM Hub veröffentlichen",[483,1009,1010],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":42,"searchDepth":171,"depth":171,"links":1012},[1013,1014,1015,1016,1017],{"id":745,"depth":171,"text":746},{"id":760,"depth":171,"text":761},{"id":867,"depth":171,"text":868},{"id":963,"depth":171,"text":964},{"id":988,"depth":171,"text":989},"Pakete","Schritt-für-Schritt: von der Verzeichnisstruktur über das .sopm-Manifest bis zur fertigen .opm-Datei für OTOBO, Znuny und OTRS CE.",{},"\u002Fdocs\u002Fotobo-znuny-paket-bauen",{"title":718,"description":1019},"docs\u002Fotobo-znuny-paket-bauen","xt4ZNkrrmpCM2JSSmLCNAls84siuxrYy3TKjqQ_N1YM",{"id":1026,"title":1007,"body":1027,"category":1534,"description":1535,"draft":495,"extension":496,"meta":1536,"navigation":174,"order":1537,"path":696,"seo":1538,"stem":1539,"__hash__":1540},"docs\u002Fdocs\u002Fpaket-veroeffentlichen.md",{"type":8,"value":1028,"toc":1528},[1029,1032,1049,1053,1082,1089,1093,1099,1118,1125,1129,1140,1488,1492,1519,1525],[11,1030,1007],{"id":1031},"paket-auf-open-itsm-hub-veröffentlichen",[15,1033,1034,1035,1038,1039,1045,1046,481],{},"Open ITSM Hub ist ein offenes, versioniertes Verzeichnis: Jedes Paket lebt als JSON-Datei unter ",[18,1036,1037],{},"content\u002Fpackages\u002F"," im ",[450,1040,1044],{"href":1041,"rel":1042},"https:\u002F\u002Fgithub.com\u002FSoftoft-Orga\u002Fopen-itsm-hub",[1043],"nofollow","GitHub-Repository",". „Veröffentlichen\" bedeutet also schlicht: eine JSON-Datei per Pull-Request hinzufügen. Es gibt ",[27,1047,1048],{},"keine Registrierung und kein separates Backend",[32,1050,1052],{"id":1051},"weg-1-direkt-aus-dem-sopm-generator-empfohlen","Weg 1: Direkt aus dem .sopm-Generator (empfohlen)",[1054,1055,1056,1062,1072,1079],"ol",{},[658,1057,1058,1059,1061],{},"Öffnen Sie den ",[450,1060,768],{"href":767}," und füllen Sie das Formular aus.",[658,1063,1064,1065,1068,1069,481],{},"Klicken Sie im Abschnitt ",[27,1066,1067],{},"„Auf Open ITSM Hub veröffentlichen\""," auf ",[27,1070,1071],{},"Pull-Request vorbereiten",[658,1073,1074,1075,1078],{},"GitHub öffnet die Ansicht „neue Datei\" mit ",[27,1076,1077],{},"bereits vorausgefülltem"," Katalog-JSON.",[658,1080,1081],{},"Committen Sie in einen Branch und öffnen Sie den Pull-Request — fertig.",[15,1083,1084,1085,1088],{},"Der Generator übernimmt Name, Version, Vendor, Lizenz und — dank Kompatibilitäts-Analyse — automatisch alle passenden ",[18,1086,1087],{},"compatibility.systems","-Einträge.",[32,1090,1092],{"id":1091},"weg-2-aus-einem-bestehenden-sopm-cli","Weg 2: Aus einem bestehenden .sopm (CLI)",[15,1094,1095,1096,1098],{},"Wenn Sie bereits ein ",[18,1097,464],{}," haben, konvertieren Sie es mit dem mitgelieferten Skript:",[37,1100,1102],{"className":39,"code":1101,"language":41,"meta":42,"style":42},"python data-scrape\u002Fsopm_to_catalogue.py pfad\u002Fzu\u002FMyPackage.sopm --write\n",[18,1103,1104],{"__ignoreMap":42},[46,1105,1106,1109,1112,1115],{"class":48,"line":49},[46,1107,1108],{"class":52},"python",[46,1110,1111],{"class":56}," data-scrape\u002Fsopm_to_catalogue.py",[46,1113,1114],{"class":56}," pfad\u002Fzu\u002FMyPackage.sopm",[46,1116,1117],{"class":56}," --write\n",[15,1119,1120,1121,1124],{},"Das schreibt ",[18,1122,1123],{},"content\u002Fpackages\u002F\u003Cslug>.json",". Anschließend committen und einen Pull-Request öffnen.",[32,1126,1128],{"id":1127},"der-katalog-eintrag","Der Katalog-Eintrag",[15,1130,1131,1132,1135,1136,1139],{},"Das erzeugte JSON folgt dem ",[18,1133,1134],{},"packages","-Schema (siehe ",[18,1137,1138],{},"content.config.ts",") und enthält u. a.:",[37,1141,1145],{"className":1142,"code":1143,"language":1144,"meta":42,"style":42},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"basic_info\": { \"title\": \"MyPackage\", \"slug\": \"my-package\", \"summary\": \"...\" },\n  \"provider\": { \"vendor_name\": \"Example GmbH\", \"vendor_type\": \"community\" },\n  \"compatibility\": {\n    \"systems\": [\n      { \"system_id\": \"otobo\", \"system_name\": \"OTOBO\", \"supported_versions\": [\"11.0.x\"] },\n      { \"system_id\": \"znuny\", \"system_name\": \"Znuny\", \"supported_versions\": [\"7.0.x\"] }\n    ]\n  },\n  \"technical_details\": { \"latest_version\": \"1.0.0\", \"package_type\": \".opm\" }\n}\n","json",[18,1146,1147,1152,1226,1275,1289,1304,1367,1425,1430,1435,1483],{"__ignoreMap":42},[46,1148,1149],{"class":48,"line":49},[46,1150,1151],{"class":164},"{\n",[46,1153,1154,1157,1161,1164,1166,1169,1172,1175,1177,1179,1181,1184,1186,1189,1191,1194,1196,1198,1200,1203,1205,1207,1209,1212,1214,1216,1218,1221,1223],{"class":48,"line":171},[46,1155,1156],{"class":164},"  \"",[46,1158,1160],{"class":1159},"spNyl","basic_info",[46,1162,1163],{"class":164},"\"",[46,1165,165],{"class":164},[46,1167,1168],{"class":164}," {",[46,1170,1171],{"class":164}," \"",[46,1173,1174],{"class":52},"title",[46,1176,1163],{"class":164},[46,1178,165],{"class":164},[46,1180,1171],{"class":164},[46,1182,1183],{"class":56},"MyPackage",[46,1185,1163],{"class":164},[46,1187,1188],{"class":164},",",[46,1190,1171],{"class":164},[46,1192,1193],{"class":52},"slug",[46,1195,1163],{"class":164},[46,1197,165],{"class":164},[46,1199,1171],{"class":164},[46,1201,1202],{"class":56},"my-package",[46,1204,1163],{"class":164},[46,1206,1188],{"class":164},[46,1208,1171],{"class":164},[46,1210,1211],{"class":52},"summary",[46,1213,1163],{"class":164},[46,1215,165],{"class":164},[46,1217,1171],{"class":164},[46,1219,1220],{"class":56},"...",[46,1222,1163],{"class":164},[46,1224,1225],{"class":164}," },\n",[46,1227,1228,1230,1233,1235,1237,1239,1241,1244,1246,1248,1250,1253,1255,1257,1259,1262,1264,1266,1268,1271,1273],{"class":48,"line":178},[46,1229,1156],{"class":164},[46,1231,1232],{"class":1159},"provider",[46,1234,1163],{"class":164},[46,1236,165],{"class":164},[46,1238,1168],{"class":164},[46,1240,1171],{"class":164},[46,1242,1243],{"class":52},"vendor_name",[46,1245,1163],{"class":164},[46,1247,165],{"class":164},[46,1249,1171],{"class":164},[46,1251,1252],{"class":56},"Example GmbH",[46,1254,1163],{"class":164},[46,1256,1188],{"class":164},[46,1258,1171],{"class":164},[46,1260,1261],{"class":52},"vendor_type",[46,1263,1163],{"class":164},[46,1265,165],{"class":164},[46,1267,1171],{"class":164},[46,1269,1270],{"class":56},"community",[46,1272,1163],{"class":164},[46,1274,1225],{"class":164},[46,1276,1277,1279,1282,1284,1286],{"class":48,"line":188},[46,1278,1156],{"class":164},[46,1280,1281],{"class":1159},"compatibility",[46,1283,1163],{"class":164},[46,1285,165],{"class":164},[46,1287,1288],{"class":164}," {\n",[46,1290,1291,1294,1297,1299,1301],{"class":48,"line":196},[46,1292,1293],{"class":164},"    \"",[46,1295,1296],{"class":52},"systems",[46,1298,1163],{"class":164},[46,1300,165],{"class":164},[46,1302,1303],{"class":164}," [\n",[46,1305,1306,1309,1311,1315,1317,1319,1321,1324,1326,1328,1330,1333,1335,1337,1339,1341,1343,1345,1347,1350,1352,1354,1356,1358,1360,1362,1365],{"class":48,"line":218},[46,1307,1308],{"class":164},"      {",[46,1310,1171],{"class":164},[46,1312,1314],{"class":1313},"sbssI","system_id",[46,1316,1163],{"class":164},[46,1318,165],{"class":164},[46,1320,1171],{"class":164},[46,1322,1323],{"class":56},"otobo",[46,1325,1163],{"class":164},[46,1327,1188],{"class":164},[46,1329,1171],{"class":164},[46,1331,1332],{"class":1313},"system_name",[46,1334,1163],{"class":164},[46,1336,165],{"class":164},[46,1338,1171],{"class":164},[46,1340,551],{"class":56},[46,1342,1163],{"class":164},[46,1344,1188],{"class":164},[46,1346,1171],{"class":164},[46,1348,1349],{"class":1313},"supported_versions",[46,1351,1163],{"class":164},[46,1353,165],{"class":164},[46,1355,204],{"class":164},[46,1357,1163],{"class":164},[46,1359,563],{"class":56},[46,1361,1163],{"class":164},[46,1363,1364],{"class":164},"]",[46,1366,1225],{"class":164},[46,1368,1369,1371,1373,1375,1377,1379,1381,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422],{"class":48,"line":223},[46,1370,1308],{"class":164},[46,1372,1171],{"class":164},[46,1374,1314],{"class":1313},[46,1376,1163],{"class":164},[46,1378,165],{"class":164},[46,1380,1171],{"class":164},[46,1382,1383],{"class":56},"znuny",[46,1385,1163],{"class":164},[46,1387,1188],{"class":164},[46,1389,1171],{"class":164},[46,1391,1332],{"class":1313},[46,1393,1163],{"class":164},[46,1395,165],{"class":164},[46,1397,1171],{"class":164},[46,1399,571],{"class":56},[46,1401,1163],{"class":164},[46,1403,1188],{"class":164},[46,1405,1171],{"class":164},[46,1407,1349],{"class":1313},[46,1409,1163],{"class":164},[46,1411,165],{"class":164},[46,1413,204],{"class":164},[46,1415,1163],{"class":164},[46,1417,583],{"class":56},[46,1419,1163],{"class":164},[46,1421,1364],{"class":164},[46,1423,1424],{"class":164}," }\n",[46,1426,1427],{"class":48,"line":231},[46,1428,1429],{"class":164},"    ]\n",[46,1431,1432],{"class":48,"line":239},[46,1433,1434],{"class":164},"  },\n",[46,1436,1437,1439,1442,1444,1446,1448,1450,1453,1455,1457,1459,1462,1464,1466,1468,1471,1473,1475,1477,1479,1481],{"class":48,"line":250},[46,1438,1156],{"class":164},[46,1440,1441],{"class":1159},"technical_details",[46,1443,1163],{"class":164},[46,1445,165],{"class":164},[46,1447,1168],{"class":164},[46,1449,1171],{"class":164},[46,1451,1452],{"class":52},"latest_version",[46,1454,1163],{"class":164},[46,1456,165],{"class":164},[46,1458,1171],{"class":164},[46,1460,1461],{"class":56},"1.0.0",[46,1463,1163],{"class":164},[46,1465,1188],{"class":164},[46,1467,1171],{"class":164},[46,1469,1470],{"class":52},"package_type",[46,1472,1163],{"class":164},[46,1474,165],{"class":164},[46,1476,1171],{"class":164},[46,1478,24],{"class":56},[46,1480,1163],{"class":164},[46,1482,1424],{"class":164},[46,1484,1485],{"class":48,"line":261},[46,1486,1487],{"class":164},"}\n",[32,1489,1491],{"id":1490},"warum-das-gut-ist","Warum das gut ist",[655,1493,1494,1507,1513],{},[658,1495,1496,1499,1500,557,1503,1506],{},[27,1497,1498],{},"Auffindbarkeit"," — Ihr Paket erscheint in den Fork-spezifischen Verzeichnissen (",[18,1501,1502],{},"\u002Fotobo-plugins",[18,1504,1505],{},"\u002Fznuny-plugins",", …) und in der Suche.",[658,1508,1509,1512],{},[27,1510,1511],{},"Mehr Reichweite"," — cross-kompatible Pakete werden allen passenden Communities gezeigt.",[658,1514,1515,1518],{},[27,1516,1517],{},"Transparenz"," — die Datenherkunft ist versioniert und nachvollziehbar.",[15,1520,1521,1522,1524],{},"Tipp: Prüfen Sie vorher mit dem ",[450,1523,480],{"href":479},", welche Forks Sie deklarieren sollten.",[483,1526,1527],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":42,"searchDepth":171,"depth":171,"links":1529},[1530,1531,1532,1533],{"id":1051,"depth":171,"text":1052},{"id":1091,"depth":171,"text":1092},{"id":1127,"depth":171,"text":1128},{"id":1490,"depth":171,"text":1491},"Veröffentlichen","Listen Sie Ihr OTOBO-\u002FZnuny-Paket kostenlos im Open ITSM Hub-Verzeichnis — per vorausgefülltem GitHub-Pull-Request, ganz ohne Backend-Login.",{},50,{"title":1007,"description":1535},"docs\u002Fpaket-veroeffentlichen","zhlufH0sDx7fTlfVLVss-8AkYKEq4jhnU2t9A0o08a0",{"id":1542,"title":1543,"body":1544,"category":1832,"description":1833,"draft":495,"extension":496,"meta":1834,"navigation":174,"order":1835,"path":1836,"seo":1837,"stem":1838,"__hash__":1839},"docs\u002Fdocs\u002Fskin-entwicklung.md","OTOBO\u002FZnuny Skin-Entwicklung",{"type":8,"value":1545,"toc":1825},[1546,1549,1559,1563,1569,1580,1584,1590,1670,1688,1692,1699,1790,1794,1808,1812,1822],[11,1547,1543],{"id":1548},"otoboznuny-skin-entwicklung",[15,1550,1551,1552,1554,1555,1558],{},"Ein Skin überschreibt das Standard-Aussehen der Agent- oder Customer-Oberfläche mit eigenem CSS. Skins werden als reguläres ",[18,1553,24],{},"-Paket ausgeliefert und über die ",[27,1556,1557],{},"SysConfig"," registriert.",[32,1560,1562],{"id":1561},"verzeichnisstruktur","Verzeichnisstruktur",[37,1564,1567],{"className":1565,"code":1566,"language":755,"meta":42},[753],"var\u002Fhttpd\u002Fhtdocs\u002Fskins\u002FAgent\u002FMySkin\u002Fcss\u002FMySkin.css\nvar\u002Fhttpd\u002Fhtdocs\u002Fskins\u002FCustomer\u002FMySkin\u002Fcss\u002FMySkin.css\n",[18,1568,1566],{"__ignoreMap":42},[15,1570,1571,1572,1575,1576,1579],{},"Der Verzeichnisname (",[18,1573,1574],{},"MySkin",") ist der ",[27,1577,1578],{},"interne Name"," des Skins.",[32,1581,1583],{"id":1582},"sysconfig-registrierung","SysConfig-Registrierung",[15,1585,1586,1587,165],{},"Registrieren Sie den Skin in ",[18,1588,1589],{},"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml",[37,1591,1593],{"className":615,"code":1592,"language":617,"meta":42,"style":42},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n\u003Cotobo_config version=\"2.0\" init=\"Application\">\n    \u003CSetting Name=\"Loader::Agent::Skin###100-MySkin\" Required=\"0\" Valid=\"1\">\n        \u003CDescription Translatable=\"1\">Agent-Skin bereitgestellt vom Paket MyPackage.\u003C\u002FDescription>\n        \u003CNavigation>Frontend::Agent::View\u003C\u002FNavigation>\n        \u003CValue>\n            \u003CHash>\n                \u003CItem Key=\"InternalName\">MySkin\u003C\u002FItem>\n                \u003CItem Key=\"VisibleName\">My Skin\u003C\u002FItem>\n                \u003CItem Key=\"Description\">Ein individueller Agent-Skin.\u003C\u002FItem>\n                \u003CItem Key=\"HomePage\">https:\u002F\u002Fexample.com\u003C\u002FItem>\n            \u003C\u002FHash>\n        \u003C\u002FValue>\n    \u003C\u002FSetting>\n\u003C\u002Fotobo_config>\n",[18,1594,1595,1600,1605,1610,1615,1620,1625,1630,1635,1640,1645,1650,1655,1660,1665],{"__ignoreMap":42},[46,1596,1597],{"class":48,"line":49},[46,1598,1599],{},"\u003C?xml version=\"1.0\" encoding=\"utf-8\"?>\n",[46,1601,1602],{"class":48,"line":171},[46,1603,1604],{},"\u003Cotobo_config version=\"2.0\" init=\"Application\">\n",[46,1606,1607],{"class":48,"line":178},[46,1608,1609],{},"    \u003CSetting Name=\"Loader::Agent::Skin###100-MySkin\" Required=\"0\" Valid=\"1\">\n",[46,1611,1612],{"class":48,"line":188},[46,1613,1614],{},"        \u003CDescription Translatable=\"1\">Agent-Skin bereitgestellt vom Paket MyPackage.\u003C\u002FDescription>\n",[46,1616,1617],{"class":48,"line":196},[46,1618,1619],{},"        \u003CNavigation>Frontend::Agent::View\u003C\u002FNavigation>\n",[46,1621,1622],{"class":48,"line":218},[46,1623,1624],{},"        \u003CValue>\n",[46,1626,1627],{"class":48,"line":223},[46,1628,1629],{},"            \u003CHash>\n",[46,1631,1632],{"class":48,"line":231},[46,1633,1634],{},"                \u003CItem Key=\"InternalName\">MySkin\u003C\u002FItem>\n",[46,1636,1637],{"class":48,"line":239},[46,1638,1639],{},"                \u003CItem Key=\"VisibleName\">My Skin\u003C\u002FItem>\n",[46,1641,1642],{"class":48,"line":250},[46,1643,1644],{},"                \u003CItem Key=\"Description\">Ein individueller Agent-Skin.\u003C\u002FItem>\n",[46,1646,1647],{"class":48,"line":261},[46,1648,1649],{},"                \u003CItem Key=\"HomePage\">https:\u002F\u002Fexample.com\u003C\u002FItem>\n",[46,1651,1652],{"class":48,"line":269},[46,1653,1654],{},"            \u003C\u002FHash>\n",[46,1656,1657],{"class":48,"line":283},[46,1658,1659],{},"        \u003C\u002FValue>\n",[46,1661,1662],{"class":48,"line":288},[46,1663,1664],{},"    \u003C\u002FSetting>\n",[46,1666,1667],{"class":48,"line":301},[46,1668,1669],{},"\u003C\u002Fotobo_config>\n",[15,1671,1672,1673,1676,1677,1680,1681,1684,1685,481],{},"Für Kunden-Skins verwenden Sie ",[18,1674,1675],{},"Loader::Customer::Skin###..."," mit ",[18,1678,1679],{},"Navigation"," ",[18,1682,1683],{},"Frontend::Customer::View",". Bei Znuny\u002FOTRS lautet das Wurzelelement ",[18,1686,1687],{},"otrs_config",[32,1689,1691],{"id":1690},"css-schreiben","CSS schreiben",[15,1693,1694,1695,1698],{},"Das Skin-CSS wird ",[27,1696,1697],{},"zusätzlich"," zum Default-Skin geladen — Sie überschreiben nur, was Sie ändern möchten:",[37,1700,1704],{"className":1701,"code":1702,"language":1703,"meta":42,"style":42},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight",":root {\n    --oitsm-skin-accent: #10b981;\n}\n\n#Navigation > li.Selected > a {\n    background-color: var(--oitsm-skin-accent);\n}\n","css",[18,1705,1706,1715,1732,1736,1740,1765,1786],{"__ignoreMap":42},[46,1707,1708,1710,1713],{"class":48,"line":49},[46,1709,165],{"class":164},[46,1711,1712],{"class":1159},"root",[46,1714,1288],{"class":164},[46,1716,1717,1721,1723,1726,1729],{"class":48,"line":171},[46,1718,1720],{"class":1719},"sTEyZ","    --oitsm-skin-accent",[46,1722,165],{"class":164},[46,1724,1725],{"class":164}," #",[46,1727,1728],{"class":1719},"10b981",[46,1730,1731],{"class":164},";\n",[46,1733,1734],{"class":48,"line":178},[46,1735,1487],{"class":164},[46,1737,1738],{"class":48,"line":188},[46,1739,175],{"emptyLinePlaceholder":174},[46,1741,1742,1745,1747,1750,1753,1755,1758,1760,1763],{"class":48,"line":196},[46,1743,1744],{"class":164},"#",[46,1746,1679],{"class":1313},[46,1748,1749],{"class":164}," >",[46,1751,1752],{"class":52}," li",[46,1754,481],{"class":164},[46,1756,1757],{"class":52},"Selected",[46,1759,1749],{"class":164},[46,1761,1762],{"class":52}," a",[46,1764,1288],{"class":164},[46,1766,1767,1771,1773,1777,1780,1783],{"class":48,"line":218},[46,1768,1770],{"class":1769},"sqsOY","    background-color",[46,1772,165],{"class":164},[46,1774,1776],{"class":1775},"s2Zo4"," var",[46,1778,1779],{"class":164},"(",[46,1781,1782],{"class":1719},"--oitsm-skin-accent",[46,1784,1785],{"class":164},");\n",[46,1787,1788],{"class":48,"line":223},[46,1789,1487],{"class":164},[32,1791,1793],{"id":1792},"schnell-starten","Schnell starten",[15,1795,637,1796,1800,1801,1803,1804,1807],{},[450,1797,1799],{"href":1798},"\u002Ftools\u002Fskin-generator","Skin-Generator"," erzeugt das komplette Gerüst — ",[18,1802,464],{},", SysConfig-XML und CSS — in einem Schritt. Danach bauen Sie das Paket wie in ",[450,1805,1806],{"href":1021},"OTOBO- & Znuny-Paket bauen"," beschrieben.",[32,1809,1811],{"id":1810},"aktivieren","Aktivieren",[15,1813,1814,1815,1818,1819,481],{},"Nach der Installation wählen Agenten den Skin unter ",[27,1816,1817],{},"Persönliche Einstellungen → Oberfläche",", oder Sie setzen den Default über ",[18,1820,1821],{},"Loader::Agent::DefaultSelectedSkin",[483,1823,1824],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":42,"searchDepth":171,"depth":171,"links":1826},[1827,1828,1829,1830,1831],{"id":1561,"depth":171,"text":1562},{"id":1582,"depth":171,"text":1583},{"id":1690,"depth":171,"text":1691},{"id":1792,"depth":171,"text":1793},{"id":1810,"depth":171,"text":1811},"Skins","Eigene Agent- und Customer-Skins für OTOBO, Znuny und OTRS CE erstellen: SysConfig-Loader-Einträge, Verzeichnisstruktur und CSS-Overrides.",{},30,"\u002Fdocs\u002Fskin-entwicklung",{"title":1543,"description":1833},"docs\u002Fskin-entwicklung","got6xk1M7wNuTMj2ptA5cgTGQM6B2xzVOo5aeBr-Zcw",{"id":1841,"title":997,"body":1842,"category":1018,"description":2163,"draft":495,"extension":496,"meta":2164,"navigation":174,"order":346,"path":996,"seo":2165,"stem":2166,"__hash__":2167},"docs\u002Fdocs\u002Fsopm-referenz.md",{"type":8,"value":1843,"toc":2153},[1844,1847,1856,1860,1902,1905,1909,1944,1950,1953,1968,1978,1983,1990,2015,2019,2034,2051,2055,2109,2135,2139,2151],[11,1845,997],{"id":1846},"sopm-referenz",[15,1848,1849,1850,1852,1853,1855],{},"Das ",[18,1851,464],{}," (Source OPM) ist die XML-Quelldatei eines Pakets. Beim Build wird daraus die ",[18,1854,24],{},"-Datei erzeugt. Diese Referenz beschreibt die gängigsten Elemente.",[32,1857,1859],{"id":1858},"wurzelelement","Wurzelelement",[70,1861,1862,1873],{},[73,1863,1864],{},[76,1865,1866,1868,1870],{},[79,1867,541],{"align":81},[79,1869,1859],{"align":81},[79,1871,1872],{"align":81},"Beispiel",[87,1874,1875,1888],{},[76,1876,1877,1879,1883],{},[92,1878,551],{"align":81},[92,1880,1881],{"align":81},[18,1882,738],{},[92,1884,1885],{"align":81},[18,1886,1887],{},"\u003Cotobo_package version=\"1.1\">",[76,1889,1890,1893,1897],{},[92,1891,1892],{"align":81},"Znuny \u002F OTRS CE",[92,1894,1895],{"align":81},[18,1896,742],{},[92,1898,1899],{"align":81},[18,1900,1901],{},"\u003Cotrs_package version=\"1.0\">",[15,1903,1904],{},"Der Inhalt ist ansonsten identisch — deshalb ist ein Paket meist forkübergreifend portierbar.",[32,1906,1908],{"id":1907},"pflichtelemente","Pflichtelemente",[37,1910,1912],{"className":615,"code":1911,"language":617,"meta":42,"style":42},"\u003CName>MyPackage\u003C\u002FName>                 \u003C!-- CamelCase, keine Leerzeichen -->\n\u003CVersion>1.0.0\u003C\u002FVersion>               \u003C!-- major.minor.patch -->\n\u003CFramework>11.0.x\u003C\u002FFramework>          \u003C!-- mind. eine, Format major.minor.x -->\n\u003CVendor>Example GmbH\u003C\u002FVendor>\n\u003CLicense>GPL-3.0\u003C\u002FLicense>\n\u003CDescription Lang=\"en\">...\u003C\u002FDescription>\n",[18,1913,1914,1919,1924,1929,1934,1939],{"__ignoreMap":42},[46,1915,1916],{"class":48,"line":49},[46,1917,1918],{},"\u003CName>MyPackage\u003C\u002FName>                 \u003C!-- CamelCase, keine Leerzeichen -->\n",[46,1920,1921],{"class":48,"line":171},[46,1922,1923],{},"\u003CVersion>1.0.0\u003C\u002FVersion>               \u003C!-- major.minor.patch -->\n",[46,1925,1926],{"class":48,"line":178},[46,1927,1928],{},"\u003CFramework>11.0.x\u003C\u002FFramework>          \u003C!-- mind. eine, Format major.minor.x -->\n",[46,1930,1931],{"class":48,"line":188},[46,1932,1933],{},"\u003CVendor>Example GmbH\u003C\u002FVendor>\n",[46,1935,1936],{"class":48,"line":196},[46,1937,1938],{},"\u003CLicense>GPL-3.0\u003C\u002FLicense>\n",[46,1940,1941],{"class":48,"line":218},[46,1942,1943],{},"\u003CDescription Lang=\"en\">...\u003C\u002FDescription>\n",[1945,1946,1948],"h3",{"id":1947},"framework",[18,1949,468],{},[15,1951,1952],{},"Deklariert die kompatiblen Framework-Versionslinien. Mehrere Zeilen sind erlaubt und der Schlüssel zur Fork-Kompatibilität:",[37,1954,1956],{"className":615,"code":1955,"language":617,"meta":42,"style":42},"\u003CFramework Minimum=\"11.0.9\">11.0.x\u003C\u002FFramework>\n\u003CFramework>7.0.x\u003C\u002FFramework>\n",[18,1957,1958,1963],{"__ignoreMap":42},[46,1959,1960],{"class":48,"line":49},[46,1961,1962],{},"\u003CFramework Minimum=\"11.0.9\">11.0.x\u003C\u002FFramework>\n",[46,1964,1965],{"class":48,"line":171},[46,1966,1967],{},"\u003CFramework>7.0.x\u003C\u002FFramework>\n",[15,1969,1970,1971,1974,1975,481],{},"Das optionale Attribut ",[18,1972,1973],{},"Minimum"," erzwingt eine Mindest-Patch-Version. Mehr dazu im ",[450,1976,1977],{"href":712},"Kompatibilitäts-Leitfaden",[32,1979,1981],{"id":1980},"filelist",[18,1982,860],{},[15,1984,1985,1986,1989],{},"Listet ",[27,1987,1988],{},"alle"," im Paket enthaltenen Dateien mit Pfad und Unix-Berechtigung:",[37,1991,1993],{"className":615,"code":1992,"language":617,"meta":42,"style":42},"\u003CFilelist>\n    \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n    \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n\u003C\u002FFilelist>\n",[18,1994,1995,2000,2005,2010],{"__ignoreMap":42},[46,1996,1997],{"class":48,"line":49},[46,1998,1999],{},"\u003CFilelist>\n",[46,2001,2002],{"class":48,"line":171},[46,2003,2004],{},"    \u003CFile Permission=\"660\" Location=\"Kernel\u002FConfig\u002FFiles\u002FXML\u002FMyPackage.xml\" \u002F>\n",[46,2006,2007],{"class":48,"line":178},[46,2008,2009],{},"    \u003CFile Permission=\"644\" Location=\"var\u002Fhttpd\u002Fhtdocs\u002Fjs\u002FMyPackage.js\" \u002F>\n",[46,2011,2012],{"class":48,"line":188},[46,2013,2014],{},"\u003C\u002FFilelist>\n",[32,2016,2018],{"id":2017},"abhängigkeiten","Abhängigkeiten",[37,2020,2022],{"className":615,"code":2021,"language":617,"meta":42,"style":42},"\u003CPackageRequired Version=\"11.0.1\">ITSMCore\u003C\u002FPackageRequired>\n\u003CModuleRequired Version=\"3.0\">JSON::XS\u003C\u002FModuleRequired>\n",[18,2023,2024,2029],{"__ignoreMap":42},[46,2025,2026],{"class":48,"line":49},[46,2027,2028],{},"\u003CPackageRequired Version=\"11.0.1\">ITSMCore\u003C\u002FPackageRequired>\n",[46,2030,2031],{"class":48,"line":171},[46,2032,2033],{},"\u003CModuleRequired Version=\"3.0\">JSON::XS\u003C\u002FModuleRequired>\n",[655,2035,2036,2045],{},[658,2037,2038,2041,2042,2044],{},[18,2039,2040],{},"PackageRequired"," — ein anderes ",[18,2043,24],{},"-Paket muss installiert sein.",[658,2046,2047,2050],{},[18,2048,2049],{},"ModuleRequired"," — ein Perl-Modul (CPAN) muss vorhanden sein.",[32,2052,2054],{"id":2053},"install-upgrade-sektionen","Install-\u002FUpgrade-Sektionen",[37,2056,2058],{"className":615,"code":2057,"language":617,"meta":42,"style":42},"\u003CDatabaseInstall Type=\"post\">\n    \u003CTableCreate Name=\"my_table\">\n        \u003CColumn Name=\"id\" Required=\"true\" PrimaryKey=\"true\" AutoIncrement=\"true\" Type=\"INTEGER\" \u002F>\n        \u003CColumn Name=\"name\" Required=\"true\" Size=\"200\" Type=\"VARCHAR\" \u002F>\n    \u003C\u002FTableCreate>\n\u003C\u002FDatabaseInstall>\n\n\u003CCodeInstall Type=\"post\">\u003C![CDATA[\n    $Kernel::OM->Get('Kernel::System::MyModule')->Setup();\n]]>\u003C\u002FCodeInstall>\n",[18,2059,2060,2065,2070,2075,2080,2085,2090,2094,2099,2104],{"__ignoreMap":42},[46,2061,2062],{"class":48,"line":49},[46,2063,2064],{},"\u003CDatabaseInstall Type=\"post\">\n",[46,2066,2067],{"class":48,"line":171},[46,2068,2069],{},"    \u003CTableCreate Name=\"my_table\">\n",[46,2071,2072],{"class":48,"line":178},[46,2073,2074],{},"        \u003CColumn Name=\"id\" Required=\"true\" PrimaryKey=\"true\" AutoIncrement=\"true\" Type=\"INTEGER\" \u002F>\n",[46,2076,2077],{"class":48,"line":188},[46,2078,2079],{},"        \u003CColumn Name=\"name\" Required=\"true\" Size=\"200\" Type=\"VARCHAR\" \u002F>\n",[46,2081,2082],{"class":48,"line":196},[46,2083,2084],{},"    \u003C\u002FTableCreate>\n",[46,2086,2087],{"class":48,"line":218},[46,2088,2089],{},"\u003C\u002FDatabaseInstall>\n",[46,2091,2092],{"class":48,"line":223},[46,2093,175],{"emptyLinePlaceholder":174},[46,2095,2096],{"class":48,"line":231},[46,2097,2098],{},"\u003CCodeInstall Type=\"post\">\u003C![CDATA[\n",[46,2100,2101],{"class":48,"line":239},[46,2102,2103],{},"    $Kernel::OM->Get('Kernel::System::MyModule')->Setup();\n",[46,2105,2106],{"class":48,"line":250},[46,2107,2108],{},"]]>\u003C\u002FCodeInstall>\n",[15,2110,2111,2112,557,2115,557,2118,557,2121,2124,2125,2128,2129,2131,2132,686],{},"Gegenstücke: ",[18,2113,2114],{},"DatabaseUninstall",[18,2116,2117],{},"CodeUninstall",[18,2119,2120],{},"DatabaseUpgrade",[18,2122,2123],{},"CodeUpgrade",". Der ",[18,2126,2127],{},"Type"," steuert den Zeitpunkt (",[18,2130,37],{},"\u002F",[18,2133,2134],{},"post",[32,2136,2138],{"id":2137},"werkzeuge","Werkzeuge",[655,2140,2141,2146],{},[658,2142,2143,2145],{},[450,2144,768],{"href":767}," — Manifest per Formular erzeugen",[658,2147,2148,2150],{},[450,2149,453],{"href":452}," — bestehendes Manifest prüfen",[483,2152,701],{},{"title":42,"searchDepth":171,"depth":171,"links":2154},[2155,2156,2159,2160,2161,2162],{"id":1858,"depth":171,"text":1859},{"id":1907,"depth":171,"text":1908,"children":2157},[2158],{"id":1947,"depth":178,"text":468},{"id":1980,"depth":171,"text":860},{"id":2017,"depth":171,"text":2018},{"id":2053,"depth":171,"text":2054},{"id":2137,"depth":171,"text":2138},"Referenz aller wichtigen .sopm-Elemente für OTOBO, Znuny und OTRS CE: Name, Version, Framework, Filelist, Abhängigkeiten und Install-Sektionen.",{},{"title":997,"description":2163},"docs\u002Fsopm-referenz","dAc6Z7EmoW2LjLfuKoZQV3sbHKBmGFleV-xRSUr6ACs",1785427340150]