Menu

Eigene CRM-Module entwickeln

Ein neues Modul für 1CRM im Quelltext zu erstellen, erfordert am Anfang immer relativ viel Handarbeit - Ordner anlegen, Dateien anlegen, erweiterte Module hinzufügen. Nicht mit uns, haben wir uns gedacht. Aus diesem Grund haben wir vor einiger Zeit ein Shell-Script geschrieben, was uns die 08/15-Arbeit abnimmt und dabei noch sicherstellt, dass nicht versehentlich ein Buchstabendreher bei der Ordner-Benennung passiert, was später unnötiges Debugging nach sich zieht.

Voraussetzungen

Zielgruppen: Admin
Produkte: 1CRM On-Premises

Dieses Script sollte nie in einem Live-System verwendet werden – bei falscher Anwendung kann es natürlich ein funktionierendes CRM-System unbrauchbar machen! Verwenden Sie in jedem Fall ein Testsystem als Basis! Wir übernehmen keine Verantwortung (und auch keinen Support) bei der Verwendung des Scripts.

Verwendung des 1CRM Shell-Scripts

Es handelt sich hierbei um ein Shell-Script, was unter Linux oder OSX aber auch unter Windows mit einer CygWin-Shell oder MobaXTerm laufen sollte. Es hat keine grafische Oberfläche und wird auch nicht per Doppelklick gestartet.

Schritt für Schritt Anleitung

1

Speichern Sie das Script als ausführbare Datei im Hauptverzeichnis der 1CRM-Installation.

Nach dem Start werden Sie gefragt, welchen Namen Sie sich für das neue CRM-Modul wünschen und ob das Modul eigene Funktionen (d.h. eine eigene Bean und Sichten im CRM-System) mitbringen soll.

2

Im Anschluss haben Sie die Möglichkeit, bereits enthaltene CRM-Module zu wählen, die Sie mit Ihrem Plugin erweitern können. Diese wandern dann in den ext-Ordner.

Das 1CRM Modul-Kickstarter Shell-Script

#!/bin/bash
# This script is made to simplify CRM module creation
# copy it to your 1CRM root directory and make it executable
# start it in place without parameters and answer the questions
# 1. What should be the name of the new module?
# 2. Does your module bring own functionality, or will it only extend other modules?
# 3++. What other modules should be extended (empty for none)
function phpDateiErstellen {
    echo "erstelle PHP Basisdatei in $1"
    case "$1" in
        "models")
            dateiname=modules/${modulName}/$1/bean.${modulName}.php
            tabellenname=$(echo $modulName | tr '[:upper:]' '[:lower:]')
            cat <<EOF > ${dateiname}
<?php return; ?>
detail
    type: bean
    bean_file: modules/${modulName}/${modulName}.php
    unified_search: false
    activity_log_enabled: true
    duplicate_merge: false
    optimistic_locking: true
    table_name: ${tabellenname}
    primary_key: id
    reportable: true
hooks
fields
    app.id
    app.date_entered
    app.date_modified
    app.assigned_user
    app.modified_user
    app.created_by_user
    app.deleted
    name
        vname: LBL_SUBJECT
        type: name
        len: 150
        vname_list: LBL_LIST_SUBJECT
        unified_search: true
        required: true
EOF
        ;;
        "views")
        for viewType in "record" "list" #pre7.7: "edit" "view
            do
                dateiname=modules/${modulName}/$1/${viewType}.Standard.php
                zweiterTyp=${viewType}
                if [ "$viewType" == "edit" ]
                    then zweiterTyp="editview"
                fi
                cat <<EOT > ${dateiname}
<?php return; /* no output */ ?>
detail
    type: ${zweiterTyp}
    title: LBL_MODULE_TITLE
layout
EOT
                if [ "$viewType" == "view" -o "$viewType" == "edit" -o "$viewType" == "record"]
                    then
                        cat <<EO
>> ${dateiname}
    sections
        --
            id: main
            elements
                --
                    name: name
    subpanels
EOF
                fi
        done
        ;;
        "metadata")
            dateiname=modules/${modulName}/$1/module_info.php
            cat <<EOF > ${dateiname}
<?php return; /* no output */ ?&gt
detail
    primary_bean: ${modulName}
    tab_visibility: normal
    default_group: LBL_TABGROUP_TODAY_ACTIVITIES
    mobile_interface: true
basic_pdf_template: true
EOF
        ;;
        "display") suffix="bean"
            dateiname=modules/${modulName}/$1/display.${modulName}.php
            cat <<EOF > ${dateiname}
<?php return; ?&gt
EOF
        ;;
        "language")
            for sprache in "de_DE" "en_us"
                do
                    dateiname=modules/${modulName}/$1/lang.${sprache}.strings.php
                    cat <<EOF &gt
${dateiname}
<?php return; ?>
LBL_MODULE_TITLE: ${modulName}
EOF
                done
        ;;
    esac
}
function leerePHPDateiErstellen {
    echo "<?php return; ?>" > "$1"
}
function erweitereModul {
    basisOrdner="modules/${modulName}/ext/modules/${1}"
    mkdir -p ${basisOrdner}/models
    # bean kann anders heissen
    mkdir -p ${basisOrdner}/views
    #leerePHPDateiErstellen ${basisOrdner}/views/view.Standard.php #pre7.7
    #leerePHPDateiErstellen ${basisOrdner}/views/edit.Standard.php #pre7.7
    leerePHPDateiErstellen ${basisOrdner}/views/record.Standard.php
    leerePHPDateiErstellen ${basisOrdner}/views/list.Standard.php
    mkdir -p ${basisOrdner}/language
    leerePHPDateiErstellen ${basisOrdner}/language/lang.de_DE.strings.php
    leerePHPDateiErstellen ${basisOrdner}/language/lang.en_us.strings.php
    mkdir -p ${basisOrdner}/display
    mkdir -p ${basisOrdner}/metadata
}
## Hauptpart ##
read -p "Wie soll das neue Modul heissen? " modulName
#Basisverzeichnisse
read -p "Soll das Modul ${modulName} eigene Funktionalitaet haben? [J|n]: " antwort
case $antwort in
    j|J|"")
        for ordner in "models" "views" "metadata" "display" "language"
            do
                mkdir -p modules/${modulName}/${ordner}
                phpDateiErstellen ${ordner}
        done
        # die Klasse erstellen
        cat <<EOF &gt
modules/${modulName}/${modulName}.php
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('data/SugarBean.php');
class ${modulName} extends SugarBean {
}
EOF
     ;;
esac
#Erweiterung vorhandener Module
while true
    do
    read -p "Welches andere Modul soll erweitert werden? (leer fuer keins): " modulErweiterung
    if [ "$modulErweiterung" == "" ]
        then
            break
    fi
    if [ ! -d "modules/${modulErweiterung}" ]
        then
            echo "Das Modul ${modulErweiterung} existiert nicht"
            continue
    fi
    echo "Erstelle Erweiterungen fuer $modulErweiterung"
    erweitereModul $modulErweiterung
done