Autor Beitrag
stephaaan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 05.06.09 11:59 
Hallo C#'ler,

ich bin aktuell an der Programmierung eines Add-Ins, welches die Kunden-Daten aus unserem Dynamics CRM-System dynamisch in ein Word-Dokument schreiben soll.

Die CRM-Anbindung ist soweit fertig und ich kann Kunden inkl. deren Daten auslesen. Allerdings scheitere ich beim Schreiben der Werte in das Dokument.

Der Aufbau des Programms ist wie folgt:

UserControl1.cs:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
private void button2_Click(object sender, EventArgs e)
{
            CRMTest.ThisDocument set = new ThisDocument();
            set.ThisDocument_setTheText("Firmenname");
}


ThisDocument.cs:

Wenn ich den Text beim Laden des Dokuments ändern will, funktioniert es tadellos.
ausblenden C#-Quelltext
1:
2:
3:
4:
public void ThisDocument_Startup(object sender, System.EventArgs e)
{
        crmCompanyName.Text = "Musterfirma";
}


Bei crmCompanyName handelt es sich um besagte PlainTextContentControl. Ändere ich den Text aber in einer anderen Methode, erhalte ich eine Null reference exception und ich weiß echt nicht warum.
ausblenden C#-Quelltext
1:
2:
3:
4:
public void ThisDocument_setTheText(string theCompanyName)
{
      crmCompanyName.Text = theCompanyName;
}


Auch mit...

ausblenden C#-Quelltext
1:
2:
            ThisDocument doc = new ThisDocument();
            doc.crmCompanyName.Text = theCompanyName;


...funktioniert das ganze nicht. Zum heulen :)

Wäre super, wenn mir einer sagen könnte, wie ich das beheben kann. Ich sitze jetzt schon zwei Wochen an dem Programm und komme einfach nicht weiter :/

Man könnte zwar die Textfelder einfach

Kann doch nicht sein, dass es beim starten einwandfrei geht und nachher nichtmehr...

// sollte das thema hier falsch sein, kanns gern verschoben werden, ich war mir nicht sicher, ob's hier richtig ist :)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.06.09 12:46 
Dein Grundproblem ist der Gültigkeitsbereich von Variablen (bzw. deren Objekten).

Mittels
ausblenden C#-Quelltext
1:
2:
CRMTest.ThisDocument set = new ThisDocument();
set.ThisDocument_setTheText("Firmenname");

erzeugst du ein lokales Document-Object namens 'set', welches nach der Methode nicht mehr existiert (d.h. irgendwann vom GC bereinigt wird).

Und woher kommt denn die Instanz 'crmCompanyName' in der anderen Methode, d.h. Deklaration sowie Initialisierung?
stephaaan Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 05.06.09 14:00 
crmCompanyName ist der Name der PlainTextContentControl, die im Dokument eingefügt wurde.

Wie gesagt, in der ThisDocument_Startup-Methode (welche vorgegeben ist) kann ich den Text ganz normal ändern über

crmCompanyName.Text = "Firmenname";

Ich will ihn aber in der ThisDocument_setTheText-Methode ändern :D Ist doch bestimmt nur eine Kleinigkeit, die ich übersehen / nicht bedacht habe...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 05.06.09 14:33 
crmCompanyName hast du also einfach auf den Designer von ThisDocument gezogen? Dann ist das wirklich komisch.
Sagt der Debugger, dass es wirklich crmCompanyName ist, das null wird? Dann wären kompletter Quelltext von ThisDocument + Code-Behind-Datei nützlich.

_________________
>λ=
stephaaan Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 08.06.09 09:25 
Jop, habe ich...

Hier mal die Quelltexte von ThisDocument.cs und UserControl1.cs...

ThisDocument.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
using System;
using System.IO;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Office = Microsoft.Office.Core;
using Word = Microsoft.Office.Interop.Word;
using Microsoft.Crm;
using Microsoft.Crm.Sdk;
using CrmLibrary.CrmSdk;
using CrmLibrary.MetadataServiceSdk;

namespace CRMTest
{
    public partial class ThisDocument
    {
        public void ThisDocument_Startup(object sender, System.EventArgs e)
        {
            
            //initialisieren von uc1
            UserControl1 uc1 = new UserControl1();
            this.ActionsPane.Controls.Add(uc1);
            this.ActionsPane.Visible = true;
            this.ActionsPane.Width = 250;

            // funktioniert
            crmCompanyName.Text = "Musterfirma";
        }

        public void ThisDocument_Shutdown(object sender, System.EventArgs e)
        {
        }

        public void ThisDocument_setTheText(string theCompanyName)
        {
            // funktioniert nicht
            // wirft "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt."
            crmCompanyName.Text = "Testfirma";

            
        }
        #region Vom VSTO-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InternalStartup()
        {
           // this.plainTextContentControl1.Entering += new System.EventHandler<Microsoft.Office.Tools.Word.ContentControlEnteringEventArgs>(this.plainTextContentControl1_Entering);
            this.Shutdown += new System.EventHandler(this.ThisDocument_Shutdown);
            this.Startup += new System.EventHandler(this.ThisDocument_Startup);

        }

        #endregion

    }
}


UserControl1.cs
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.IO;
using System.Text;
using System.Windows.Forms;
using CrmLibrary;
using CrmLibrary.CrmSdk;
using CrmLibrary.MetadataServiceSdk;
using CRMTest;
using Microsoft.Crm;

namespace CRMTest
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {    
            CRMTest.ThisDocument doc = new CRMTest.ThisDocument();

            // listbox löschen
            crmResults.Items.Clear();

            // Datensätze aus CRM holen
            BusinessEntityCollection retrieved = Retrieve.RetriveAccount(crmSearch.Text.ToString());


            // Firmennamen in Liste eintragen
            foreach (account a in retrieved.BusinessEntities)
            {
                crmResults.Items.Add(a.name);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
           CRMTest.ThisDocument set = new ThisDocument();
           
           //funktioniert nicht
           set.ThisDocument_setTheText("Musterfirma");
        }
    }
}


Mehr brauchts eigentlich garnicht, um den Fehler herbeizuführen, oder?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 08.06.09 19:25 
user profile iconstephaaan hat folgendes geschrieben Zum zitierten Posting springen:
Mehr brauchts eigentlich garnicht, um den Fehler herbeizuführen, oder?
Öhm, es geht doch darum, dass crmCompanyName null ist. Also wäre die Stelle, bei der das Feld gefüllt wird, nicht schlecht ;) . Und das ist wie gesagt die Code-Behind-Datei: ThisDocument.Designer.cs

_________________
>λ=