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