Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Zusätzliche Beziehung zwischen Systementitäten



In Microsoft Dynamics CRM 3.0 ist es normalerweile nicht möglich, zwischen Systementitäten neue Beziehungen zu erstellen. Das wäre beispielsweise wünscheswert, wenn man bei einer Firma einen zusätzlichen Kontakt hinzufügen wollte, der beispielweise den Kontakt zur Firma hergestellt hat.


Als Lösung bietet sich an, bei der Firma drei zusätzliche Felder hinzuzufügen, die beziehungsrelevante Daten aufnehmen. Außerdem wird bei der FIrma über ein IFrame die Visualisierung sichergestellt.


Folgende Vorgehensweise kann dazu verwendet werden:
  
1. Verzeichnis und Datei anlegen:
Speichern der angehangenen Datei CrmRelation.aspx in ein neues Unterverzeichnis "MsCrmExtension" der CRM-Anwendung.



2. Auf dem Formular, welches das Lookup-Feld beherbergen soll, wird ein IFrame angelegt.
 
Beispiel:
 Name: IFRAME_introducer
 URL: /_root/Blank.aspx
 Anzahl Zeilen: 1
 Bildlauf: niemals
 


3. Drei Felder in einer (neuen) Registerkarte mit dem Namen „hidden“ anlegen.


Erstes Feld (für GUID):
 Name: introducerid
 Schemaname: new_introducerid
 Einschränkung: keine
 Typ: nvarchar, Text, 36 (36 für Länge der GUID)
 Beschriftung im Formular: keine
 
Zweites Feld (Für visualisierung des Namens und für Suchen):
 Name: introducername
 Schemaname: new_introducername
 Einschränkung: keine
 Typ: nvarchar, Text, 160 (beispielhafte Länge, kann auch anders gewählt werden)
 Beschriftung im Formular: keine
 
Drittes Feld (für Datentyp):
 Name: introducertype
 Schemaname: new_introducertype
 Einschränkung: keine
 Typ: int, keine, -21474… - +21474…
 Beschriftung im Formular: keine
 



4. In den Formulareigenschaften des entsprechenden Formulars wird folgendes OnLoad-Ereignis hinterlegt:
 
var tabName = "hidden";
var spans = crmForm.getElementsByTagName("span");
for (var i=0; i<spans.length; i++) {
  var span = spans[i];
  if (span.innerText == tabName) {
    span.style.visibility = "hidden";
  }
}
crmForm.all.IFRAME_Introducer.parentElement.parentElement.height = 27;
crmForm.all.IFRAME_Introducer.style.borderColor = "#eef0f6";
crmForm.all.IFRAME_Introducer.src = "/MsCrmExtension/CrmRelation.aspx"
            + "?oid=" + crmForm.all.new_introducerid.DataValue
            + "&otype=" + crmForm.all.new_introducertype.DataValue
            + "&oname=" + crmForm.all.new_introducername.DataValue
            + "&oidfield=" + "new_introducerid"
            + "&otypefield=" + "new_introducertype"
            + "&onamefield=" + "new_introducername"
            + "&lookuptypes=" + "1,2"
            + "&lookuptypenames=" + "account:1,contact:2"
            + "&lookuptypeicons=" + "/_imgs/ico_16_1.gif:/_imgs/ico_16_2.gif"
            + "&lookupClass=" + "BasicCustomer";
 
 
Folgende LookupClasses sind beispielsweise verfügbar:
BasicCustomer (Firma, Kontakt)
SystemUsers (Benutzer)
BasicOwner
BasicSubject (Betreff)
ActivityRegarding (Anfrage)
  



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Kann es sein das die aspx Seite im Anhang vom Webserver geparst wird und nicht mehr alles ankommt?


Da steht doch etwas wenig Code drin.


 


Interessant wäre auch wie man die selbe Methode zwischen System und Benutzerdefinierten Entitäten anwendet da hier ja keine LookupClasses existieren (zumindest nach meinem derzeitigen Wissensstand in MSCRM)



Re: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Stimmt, die asp-Datei wurde interessanterweise geparst. Ich habe die aspx-Datei nun gezippt angehangen.


Auch für benutzerdefinierte Entitäten sollte es eine LookupClass geben. Um das herauszufinden würde ich mir den HTML-Code eines bestehenden Formulars nehmen. Dort sollte eigentlich alles entsprechende stehen.



AW: Re: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Wusst ich doch das selbst .NET nicht solchen Voodoo beherscht aus etwas html+jscript die Funktionalität zu basteln die beschrieben ist :)


Naja mit dem Code sollte es ja auch wesentlich klarer werden was da eigentlich passiert.


Danke schon mal auf alle fälle



AW: Re: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Habe jetzt mal einen Lookup auf ein Formular gemacht(von Benutzerdef zu Benutzerdef) und im HTML Code steht leider keine LookupClass für den Knopf(auch nichts vergleichbares). Das ist dahin gehend komisch, das eine LookupClass für den Besitzer da ist(natürlich vom System erzeugt).
Ergo werden Benutzerdefinierte Lookups irgendwie anders angesprochen?!


AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Ich habe das Beispiel wie beschrieben ausprobiert für die Firmen und Opportunities ausprobiert. Bekomme aber nie das gewünschte Ergebnis.


Beim Aufruf der Opportunity wird nach einer langen "Ladezeit" (http://localhost:5555/MsCRM Extension/CrmRelation.aspx?oid=null&otype=null .....) im IFRAME zwar die Lupe angezeigt,
diese kann aber nicht "angeklickt" werden.


Die Darstellung der Lupe ist bei Zeilengröße 1 im IFRAME auch abgeschnitten.


Wo liegt hier der Fehler?


Vielen Dank
Stefan


 


 



 



Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Was passiert denn, wenn man in einem Browser direkt die URL eingibt?


AW: Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)



AW: Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo Jürgen,


sehr schöne Erweiterung, funktioniert wunderbar; habe aber noch einige Ergänzungen:


- statt dem IFrame "root/blank.aspx" als Quelle zu geben, tut es auch "about:blank"; das Ergebnis ist dasselbe, about:blank sollte aber im Aufbau schneller sein, da der Server nicht kontaktiert wird


- das Feld für die zu speichernde ID/GUID muss 38 Zeichen aufnehmen können, { und } müssen schließlich auch gespeichert werden


- im IFrame muss außerdem das Frame-übergreifende Skripting zugelassen werden (das könnte Stefans Problem beheben)


Die langen Ladezeiten kommen evtl. durch die Pfadangaben... http://crm/... *.js etc., die müssen natürlich angepasst werden.


 


Gruß



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

[quote user="Stefan Gross"]

Ich habe das Beispiel wie beschrieben ausprobiert für die Firmen und Opportunities ausprobiert. Bekomme aber nie das gewünschte Ergebnis.


Beim Aufruf der Opportunity wird nach einer langen "Ladezeit" (http://localhost:5555/MsCRM Extension/CrmRelation.aspx?oid=null&otype=null .....) im IFRAME zwar die Lupe angezeigt,
diese kann aber nicht "angeklickt" werden.

[/quote]



Hallo zusammen,



ich konnte diesen Fehler ebenfalls beobachten.



Das Problem scheinen  unterschiediche  Konfigurationen oder Versionen des Internet Explorers zu sein.



Beim Aufruf der Seite von dem Lokalen Server (Windows 2003 Server /
Verstärtkte Sicherheitskonfiguration deaktiviert) ist die Lupe nicht
anklickbar, auch der Name der verknüpften Entität escheint in schwarzer
Schrift anstellen von blau. Der Name der verknüpften Entität ist
allerdings anklickbar.



Beim Aufruf der Seite von einem externen Rechner (Windows XP Pro SP2)
ist die Lupe anklickbar und der Name der verknüpften Entität wird auch
in blau angezeigt.



Beim Aufruf der Seite von einem anderen externen Rechner (Windows XP
Pro SP2) ist die Lupe wieder nicht anklicklbar und die Scrift des
Namens in schwarz.



Der Aufruf der Seite CrmRelation.aspx erfolgte jeweils über die direkte Url in der Zone "Vertrauenswürdige Sites".



Es scheint also irgendeine "magische" Einstellung des Internet Explorers zu geben.



Gruß

Christian Elberfeld


AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Ich habe das Beispiel wie beschrieben ausprobiert für die Firmen und Opportunities ausprobiert. Bekomme aber nie das gewünschte Ergebnis.


Beim Aufruf der Opportunity wird nach einer langen "Ladezeit" (http://localhost:5555/MsCRM Extension/CrmRelation.aspx?oid=null&otype=null .....) im IFRAME zwar die Lupe angezeigt,
diese kann aber nicht "angeklickt" werden.


Die Darstellung der Lupe ist bei Zeilengröße 1 im IFRAME auch abgeschnitten.


#########################################################################################


Das Problem scheinen  unterschiediche  Konfigurationen oder Versionen des Internet Explorers zu sein.


Beim Aufruf der Seite von dem Lokalen Server (Windows 2003 Server / Verstärtkte Sicherheitskonfiguration deaktiviert) ist die Lupe nicht anklickbar, auch der Name der verknüpften Entität escheint in schwarzer Schrift anstellen von blau. Der Name der verknüpften Entität ist allerdings anklickbar.


Beim Aufruf der Seite von einem externen Rechner (Windows XP Pro SP2) ist die Lupe anklickbar und der Name der verknüpften Entität wird auch in blau angezeigt.


Beim Aufruf der Seite von einem anderen externen Rechner (Windows XP Pro SP2) ist die Lupe wieder nicht anklicklbar und die Scrift des Namens in schwarz.


Der Aufruf der Seite CrmRelation.aspx erfolgte jeweils über die direkte Url in der Zone "Vertrauenswürdige Sites".


Es scheint also irgendeine "magische" Einstellung des Internet Explorers zu geben.


#########################################################################################


Hallo,


ich habe auch das Verhalten feststellen können. Bei mir erscheint zusätzlich eine Anmelde-Box, an der ich mich an der Domäne anmelden soll (obwohl ich das schon bin).


Die Dateiberechtigungen für CrmRelation.aspx habe ich auch schon kontrolliert. IISReset hat auch nichts genützt. Die "magische Einstellung" im IE konnte ich noch ebenfalls nicht finden.


Hat schon jemand eine Lösung gefunden ?


Besten Gruß
Reinsi



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo,


bei mir läuft mittlerweile das Beispiel. Ich habe in der CrmRelation.aspx der URL Aufruf von href="http://crm/...   nach href="http://<server>/... geändert. Seitdem funktioniert es.


Gruß
Stefan



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

[quote user="Stefan Gross"]

Hallo,


bei mir läuft mittlerweile das Beispiel. Ich habe in der CrmRelation.aspx der URL Aufruf von href="http://crm/...   nach href="http://<server>/... geändert. Seitdem funktioniert es.


Gruß
Stefan


[/quote]


Hallo Stefan,


das war's auch bei mir. Danke !


Besten Gruß
Reinsi



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

[quote user="Stefan Gross"]

Hallo,


bei mir läuft mittlerweile das Beispiel. Ich habe in der CrmRelation.aspx der URL Aufruf von href="http://crm/...   nach href="http://<server>/... geändert. Seitdem funktioniert es.


Gruß
Stefan

[/quote]

Hallo Stefan,

bei mir läuft es jetzt auch wunderbar. Das erklärt auch warum es bei mir vorher nur auf einigen Rechnern lief. Dort ging die Url http://crm/... auf unser internes CRM.

Hoch praktischer ist es übrigens die URLs von href="http://crm/_nav/nav.css" in href="/_nav/nav.css" zu ändern. dann wird automatisch der richtige Server genommen.

Auch das problem der langen Ladezeit ist bei mir dadurch verschwunden.

Gruß
Chris



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo Jürgen,

echt klasse, Deine 1-1 Relation zu Systementitäten.
Ich hätte da noch eine kleine Frage:

Kann ich einen vordefinierten Filter mitgeben?

Beispiel: Ich möchte eine  Suchliste für Kontakte, die auf eine best. Firma gefiltert werden.

Es würde hier aussreichen, wenn die Kontaktliste ausgewählt ist und im Suchfeld der Firmenname steht.
Der Firmenname kann auch aus einen weiteren "hidden" Feld kommen.

Grüße
Thomas


Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Über so ein Feature mache ich mir auch schon seit längerem Gedanken, bin aber auch noch nicht zu einer entgültigen Lösung gekommen.


Man könnte es beispielsweise ausnutzen, dass die Felder, in denen gesucht wird, definiert werden können. So kann man beispielsweise bei den Kontakten das Firmenfeld als Suchfeld hinzufügen, so dass nach Eingabe der Firma die Kontakte dieser Firma angezeigt werden. Nun müsste man nur noch programmatisch die Firma automatisch in das Suchfeld eingeben lassen und, voilà, es werden Konakte dieser Firma angezeigt. Zumindest wird es in den meisten Fällen so sein. Wenn es Firmen gibt, die über denselben Namen verfügen, wird das Ergebnis natürlich entsprechend sein.



AW: Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Feine Sache.
Leider werden keine Umlaute abgebildet, der Lookup zeigt dann im iFrame z.B. ein "Musterhauskchen Fachgeschft" an.

Lässt sich das noch irgendwie beheben?


Re: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Ist mir noch gar nicht aufgefallen. Da wird wohl eine falsche Codepage verwendet. Ggflls. müsste man da mal die aspx-Datei nochmal anpassen.


AW: Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Kann ich nicht bestätigen; wenn ich aus "Mister Minit" den "Mister Münüt" mache, wirds im Lookup trotzdem korrekt angezeigt, auch dort im Tiptext, im aufrufenden Formular und und und...


Re: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Tja, seltsam ...
Hier ist es definitiv so.

CRM ist doch mit UTF-8 codiert, oder?
Die crmrelation.aspx codiert zwar eigentlich den HTML-Teil auch mit UTF-8, wenn ich aber die Seitencodierung im IE manuell auf Western (ISO) stelle, wird mir das Iframe richtig angezeigt, mit Umlauten.
Allerdings ist dann der Rest "kaputt" ...

Komische Sache.


AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Ich habe das Beispiel wie beschrieben für Firma und Kontakte ausprobiert. Leider bekomme ich einen Fehler beim Erstellen des Formulars:


Fehler im benutzerdfinierten Ereignis dieses Felds


Feld: crmForm


Ereignis: onLoad


crmForm.all.IFRAME_Introducer.parentElement ist Null oder kein Objekt.


Wenn ich den URL wie nachfolgend direkt eingebe


http://crms1:5555/MsCrmExtension/CrmRelation.aspx?oid=null&otype=null&oname=null&oidfield=new_introducerid&otypefield=new_introducertype&onamefield=new_introducername&lookuptypes=1,2&lookuptypenames=account:1,contact:2&lookuptypeicons=/_imgs/ico_16_1.gif:/_imgs/ico_16_2.gif&lookupClass=BasicCustomer


 habe ich die Möglichkeit über die Luppe eine Firma oder einen Kontakt auszuwählen.


Was ist denn das bei mir falsch? Wie muß denn Abschnitt heißen?



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo Nadja,


kannst Du bitte die Groß-/Kleinschreibung bei den neu angelegten Feldern überprüfen und abh. davon im onLoad-Ereignis anpassen?


Gruß
Stefan



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Vielen Dank!


das wars.


Grüß


Nadja



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo zusammen,

das ist ja eine prima Möglichkeit.
Ich habe das so in das Anfragen-Modul übernommen. Jedoch wollen meine User dieses ausgefüllte Anfrageformular ausdrucken, und da ist das Feld leider leer. Kennt jemand hier eine Lösung??

Gruß und Danke

M. Widmaier



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo Jürgen,


es stehen einige Update beim Kunden auf MSCRM4.0 als aktuelles Thema. Hast du schon im Erfahrung gebracht, ob dieses Script auch unter 4.0 funktioniert? Wenn nicht, was eventuell angepasst werden muss?


Für einen Hinweis wäre ich sehr dankbar.


Nadja Fink



AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Hallo Nadja,


ich bin zwar nicht Jürgen, kann die aber auch antworten.


Prinzipiell funktioniert das beschriebene Vorgehen auch in der Version 4. In CRM 4 benötigst du diese Anpassung allerdings nicht mehr, da in CRM 4 zusätzliche Systementitäten angelegt werden können. Wir haben die Formulare bei unseren Kunden nach den Updates immer angepasst.


Gruss


Michael



Re: AW: Zusätzliche Beziehung zwischen Systementitäten (von Jürgen Beck)

Kann ich so bestätigen. Insofern wird von es von mir keine Version für CRM 4.0 geben. :-)