+49 (0)7531 906010| service@combit.net

cRM Daten in Html

Hallo zusammen,

mit nachfolgendem Script lese ich die Daten aus dem aktuellen Datensatz in einer Html Datei aus.
Was muss ich tun, damit ich alle Datensätze in einer Schleife auslesen kann?
move.first oder next und eof klappt irgendwie nicht.
Sicherlich gehört auch das RecordSet und nicht der einzelne Record angesprochen.
Gibt es da irgendwo ein Beispiel?

Danke und viele Grüße

Robert

Hi Robert,

folgender Pseudo-Code als Ausgangshilfe:

[code]’ Schleife durch alle Datensätze im Filter
if oCurrentRecordSet.MoveFirst then

Set oCurrentRecord = oCurrentRecordSet.CurrentRecordSynchronized
do
	
'... z.B. oCurrentRecord.GetContentsByName ...
	
loop until oCurrentRecordSet.MoveNext = 0
Set oCurrentRecord = Nothing

end if[/code]

Gruß

Alex

Hallo Alex,

danke für Deine Antwort. Kam aber jetzt erst dazu zum testen. Vielleicht mal vorab: die html Datei wird aufgerufen in/aus einem Fenster der Ansicht „WebElemente“ . Deswegen in Javascript, weil dann die Darstellung im Fenster (innerhalb der html) bleibt. Bei Aufruf eines VBScriptes (in der html) habe ich es erfolglos mit WScript.Echo versucht.

Jetzt hab ich nun zwei Ergebnisse (beide nicht passend + unten angefügt).

Variante 1 bringt mir (logisch) 5 mal den gleichen DS, also Namen und bleibt dann ordnungsgemäß stehen.
Variante 2 bringt mir zwar das gewünschte Ergebnis, aber „oCurrentRecordSet.MoveNext“ lädt hier gleich im Anschluss die nächsten 5 Datensätze (beginnend mit dem 5ten wieder, auch klar, weil hier der Datensatzzeiger noch steht), aber dies dann gleich mit einem Refresh der Ansicht WebElemente, was gar nicht erwünscht ist.

MoveNext allein bringt eine Fehlermeldung. Ein eingrenzen in der Schleife mittels

        var bNext = oCurrentRecordSet.MoveNext;
        if (nZaehler == 6) {
            bNext = "";
        }

bringt ebenfalls nichts. Ebenso wenig ein break; „oCurrentRecordSet.MoveNext“ agiert hier einfach übergeordnet und macht weiter bis zum eof oder eof des aktuellen Extraktes und bringt dann eine Fehlermeldung. Aber es ist notwendig, um den Datensatzzeiger vorzustellen.

Gibt es dafür noch eine andere Funktion?

Vielen Dank und viele Grüße

Robert

Variante 1

[code]var oCurrentRecordSet = window.external.View.CurrentRecordSet;

var nZaehler = 1;
while (nZaehler <= 5) {
var oCurrentRecord = oCurrentRecordSet.CurrentRecordSynchronized;
var sName = oCurrentRecord.GetContentsByName(„Firstname“) + ’ ’ + oCurrentRecord.GetContentsByName(„Name“);
document.write('Name: ’ + sName + '–Zaehler: ’ + nZaehler + ‚
‘);
nZaehler++;
//oCurrentRecordSet.MoveNext;
}

// Ausgabeergebnis:

Name: Name01–Zaehler: 1
Name: Name01–Zaehler: 2
Name: Name01–Zaehler: 3
Name: Name01–Zaehler: 4
Name: Name01–Zaehler: 5
[/code]

Variante 2 (gleich wie 1 nur hier mit aktivem …MoveNext)

var oCurrentRecordSet = window.external.View.CurrentRecordSet;

 var nZaehler = 1;
     while (nZaehler <= 5) {
        var oCurrentRecord = oCurrentRecordSet.CurrentRecordSynchronized;
        var sName = oCurrentRecord.GetContentsByName("Firstname") + ' ' + oCurrentRecord.GetContentsByName("Name");
        document.write('Name: ' + sName + '--Zaehler: ' + nZaehler + '<br>');
        nZaehler++;
        oCurrentRecordSet.MoveNext;
     }

// Ausgabeergebnis:

Name: Name01--Zaehler: 1
Name: Name02--Zaehler: 2
Name: Name03--Zaehler: 3
Name: Name04--Zaehler: 4
Name: Name05--Zaehler: 5

//Hier dann Refresh der Ansicht "WebElemente" und dann weiter mit

Name: Name05--Zaehler: 1
Name: Name06--Zaehler: 2
Name: Name07--Zaehler: 3
Name: Name08--Zaehler: 4
Name: Name09--Zaehler: 5

//usw.usw........

Hi Robert,

tut mir leider, du wirst es ungern hören, aber, ich muss jetzt leider deutlich sagen: du brauchst eine Schulung.

  • Grundlegendes Verständnisproblem: du benutzt z.Zt. den aktiven RecordSet der Ansicht, um durch irgendwelche Daten zu laufen, aber die Web-Elemente, in deren Kontext das Script ja läuft, beruhen ja auf der Eingabemaske, wo du ja auf einem KONKRETEN Datensatz dieses RecordSets STEHST. Du kannst da dann nicht „weglaufen“, das gibt das totale Chaos, weil sich dann die Eingabemaske aktualisieren wird oder was weiß ich!

D.h. das geht alles so nicht. Der RecordSet, den du durchläufst und in einem Web-Element anzeigen willst, der muss WOANDERS herkommen, (nämlich per CreateRecordSet ausgehend von einer ViewConfig erzeugt und per Filter auf Datensätze, die irgendwie zum „aktuellen“ Datensatz der Eingabemaske „gehören“ (wäre quasi eine Relation) eingeschränkt o.ä.).

  • CurrentRecordSynchronized wird nicht innerhalb der Schleife benutzt sondern vorher

  • der Rückgabewert von MoveNext sagt, ob es noch Daten gibt, muss unbedingt geprüft und dann die Schleife abgebrochen werden

Fazit: Schulung!! Das wird ansonsten ein Fass ohne Boden, ich kann es leider nicht stopfen, da fehlt mir die Zeit - ist nicht böse gemeint. :slight_smile:

Viel Erfolg

Alex

Hallo Alex,

Du hast ja Recht. Trotzdem vielen vielen Dank!

Viele Grüße

Robert

Hallo Alex,

also, bin Deinem Rat natürlich gefolgt und hab heute einen Schulungstermin vereinbart :slight_smile:

Dennoch hat mich das ein wenig beschäftigt (wollte doch das Loch im Fass etwas stopfen) und hab mir vorhin nochmal Deine Antwort genau durchgelesen, ein wenig hier im Forum nachgeschaut und mir dann auch die Objekthierarchie im Handbuch genauer angeschaut.

Das ist dabei rausgekommen :slight_smile:

Dim oProject
Dim oListViewConfigs, oHelpView
	Const sView="Objekte"

	Set oProject = cRM.CurrentProject

	Set Listviewconfigs = oProject.ViewConfigs
	Set oHelpView=listviewconfigs.itemByName(cstr(sView))


Dim oRecordSet
        Set oRecordSet = oHelpView.CreateRecordSet
        

Dim oRecord, nBox, sObjTitel, sObjOrt

If oRecordSet.MoveFirst Then

	Set oRecord = oRecordSet.CurrentRecordSynchronized
	Do
	
		sObjTitel = oRecord.GetContentsByName("ObjTitel")
		sObjOrt = oRecord.GetContentsByName("ObjOrt")

		If sObjOrt = "Aidenbach" Then
			nBox = MsgBox (sObjTitel  & vbCrlf & sObjOrt, 1+64, "Objekt")
			If nBox = 2 Then
				WScript.Quit
			End If
		End If
	
	Loop until oRecordSet.MoveNext = 0
	
	Set oRecord = Nothing

End If

Funktioniert einwandfrei, aus jeder Ansicht heraus, auch dann wenn „Objekte“ geschlossen ist.
Jetzt muss ich es nur noch in Javascript umsetzen, dann hab ich meine Lösung.

Danke Dir und viele Grüße

Robert

Das Leben könnte so schön sein…

<script type="text/javascript">
1
2             const sView = "Objekte";
3             var oListViewConfigs = window.external.ViewConfigs;
4             var oHelpView = oListViewConfigs.ItemByName("sView");
5             ..............

Bei der Schreibweise bekomme ich in Zeile 2 einen Syntax-Fehler ??? Da komm ich erst gar nicht weiter.
Bei var sView = „Objekte“; bekomme ich in Zeile 4 den Fehler <Die Eigenschaft „ItemByName“ eines undefinierten oder Nullverweises kann nicht abgerufen werden.>

Was mach ich falsch? Kann mir hier bitte jemand helfen?

Vielen vielen Dank!

Viele Grüße

Robert

© combit GmbH