Direkter Zugriff Felder

Nutzen Sie gerne das nachfolgende Beispiel. Mein Use-Case war dabei alle Namen der Ansprechpartner in eine kommaseparierte Liste in ein Feld in den aktuell angezeigten Firmen-Datensatz zu schreiben - das Script basiert auf einer combit_Large-Solution des cRM11.

// <!--#pragma debugmode-->
// <!--#pragma forcelogging-->
// <!--#include ref="System.Windows.Forms"-->
// <!--#include using="System.Windows.Forms"-->
// <!--#include ref="mscorlib.dll"-->
// <!--#include using="System.Collections.Generic"-->

#region Visual Studio only
using System.Collections.Generic;
using System.Windows.Forms;
using combit.cRM.COM;

namespace Visual_Studio_Projekt 
{ 
    class Template
    {
        static cRMApplication cRM = new cRMApplication(EApplicationStartType.GetActiveobject);
        #endregion Visual Studio only
        //-------------------------------------------------------------------------------------------------------
        //>> C# Script Code ab hier:

        public static void Main() 
        {
            // 1. Auslesen der ID des aktuell angezeigten Datensatzes (am Beispiel in der Firmen-Ansicht einer Large-Solution)
            Record currentRecord = cRM.CurrentProject.ActiveViews.ActiveView.CurrentRecordSet.CurrentRecord;
            string companyId = currentRecord.GetContentsByName("ID");

            // 2. Erstellen eines neuen RecordSets für die Ansicht Kontakte mit dem Ziel alle Datensätze anzuzeigen, die Ansprechpartner der Firma aus Schritt 1 sind
            string viewName = "Kontakte";
            ViewConfig viewConfigKontakte = cRM.CurrentProject.ViewConfigs.ItemByName(viewName);
            RecordSet recordSetKontakte = viewConfigKontakte.CreateRecordSet();
            List<string> listNamen = new List<string>();

            // 3. Filter auf alle Ansprechpartner der Firma
            if (recordSetKontakte.SetFilter("\"Kontakte\".\"CompanyID\" = " + companyId))
            {
                // 4. Gibt es Datensätze, die Ansprechpartner der dargestellten Firma sind?
                if (recordSetKontakte.MoveFirst())
                {
                    Record recordKontakt;

                    // Gibt es mehr als einen Datensatz?
                    if (recordSetKontakte.HasMultipleRecords)
                    {
                        // Durchlaufe alle Datensätze und füge die Informationen zu einer Liste hinzu
                        do
                        {
                            recordKontakt = recordSetKontakte.CurrentRecord;
                            listNamen.Add(recordKontakt.GetContentsByName("Name"));

                        } while (recordSetKontakte.MoveNext());
                    }
                    else
                    {
                        // Ansonsten nehme den ersten und einzigen Datensatz und lies den Namen des Ansprechpartners aus
                        recordKontakt = recordSetKontakte.CurrentRecord;
                        listNamen.Add(recordKontakt.GetContentsByName("Name"));
                    }
                }
                else
                {
                    cRM.DialogMessageBox("Der aktuelle Firmen-Datensatz hat keine Ansprechpartner.", "Keine Ansprechpartner", 0);
                }
            }

            // Sperre den angezeigten Firmen-Datensatz zur Bearbeitung
            if (currentRecord.Lock())
            {
                // Setze den ausgelesenen Inhalt aller Ansprechpartner in das Feld \"ListeAnsprechpartner\"
                currentRecord.SetContentsByName("ListeAnsprechpartner", string.Join(",", listNamen));
                
                // Speichere den Datensatz
                if (currentRecord.Save())
                {
                    cRM.DialogMessageBox("Es konnten Informationen von den Ansprechpartnern ausgelesen werden - es war jedoch nicht möglich das Feld \"ListeAnsprechpartner\" zu befüllen und den Firmen-Datensatz abzuspeichern.", "Kein Speichern möglich", 0);
                }

                // Gebe den Datensatz zur Bearbeitung frei
                currentRecord.Unlock();
            }
            else
            {
                if (currentRecord.Editable == false)
                {
                    cRM.DialogMessageBox("Der Datensatz ist für den aktuell angemeldeten Benutzer nicht bearbeitbar. Bitte wenden Sie sich an den Administrator.", "Keine Bearbeitbarkeit", 0);
                }
            }
        }
       
        //<< C# Script Code bis hier
        //-------------------------------------------------------------------------------------------------------
#region Visual Studio only
    }
}
#endregion Visual Studio only

Die Codebasis des Scripts kam aus dem nachfolgenden Knowledgebase-Artikel:

C# Scripting mit Microsoft Visual Studio - Knowledgebase - combit CRM Forum

1 „Gefällt mir“