[gelöst] link drucken

9. September 2009 15:39

Wie kann ich einen bestimmten Link auf einem Report ausgeben?
In der Hilfe steht, dass man auf die Tabelle "records links" nicht filtern kann.
Zuletzt geändert von rallnus am 5. Oktober 2009 07:46, insgesamt 1-mal geändert.

9. September 2009 17:15

rallnus hat geschrieben:In der Hilfe steht, dass man auf die Tabelle "records links" nicht filtern kann.

Als normaler NAV-Benutzer nicht, als Programmierer natürlich schon :-)

Ich fasse mal [Gelöst] Tabelle "Record Link" erweitert - nun Form erweitern für deine Zwecke zusammen:

Links für einen Datensatz holen
Du holst dir einen bestimmten Datensatz, für den du die Links brauchst, sagen wir mal Artikel. Hierzu füllst du dir die Recordvariable Item.
Du brauchst außerdem:
Recordvariable mit Subtype "Record Link" (ich nenne Sie jetzt RecordLink):
Code:
RecordRef.GETTABLE(Item);
RecordLink.RESET;
RecordLink.SETRANGE("Record ID", RecordRef.RECORDID);
IF RecordLink.FINDSET THEN BEGIN
  REPEAT
    ...
  UNTIL RecordLink.NEXT  = 0;
END;


Wobei mir noch nicht klar ist, was davon du jetzt im Report wie andrucken möchtest ...

Re: Link drucken

10. September 2009 11:02

Hallo Natalie, danke für die ANtwort. Ich habe es probiert mit einer Änderung:
Ich habe UNTIL RecordLine.NEXT = 0 gegen UNTIL RecordLink.NEXT = 0 ersetzt.
Es klappt aber trotzdem nicht. Record links werden nicht gefunden, es sei denn, man hat eine "leere" Record ID.

Code:
RecRef.GETTABLE("Sales Header");
RecordLink.RESET;
RecordLink.SETRANGE("Record ID", RecRef.RECORDID);
IF RecordLink.FINDSET THEN BEGIN
REPEAT
    i +=1;
    Linktext[i] := RecordLink.URL1;
  UNTIL RecordLink.NEXT  = 0;
END;

Re: Link drucken

10. September 2009 11:06

rallnus hat geschrieben:Hallo Natalie, danke für die ANtwort. Ich habe es probiert mit einer Änderung:
Ich habe UNTIL RecordLine.NEXT = 0 gegen UNTIL RecordLink.NEXT = 0 ersetzt.

Jupp, war (m)ein Tippfehler :-) (korrigier ich sofort ...)

Es klappt aber trotzdem nicht. Record links werden nicht gefunden, es sei denn, man hat eine "leere" Record ID.

Hat genau dieser Sales Header überhaupt mind. einen Recordlink? Hast du das Ganze gedebuggt? Werden wirklich keine Datensätze gefunden?

Re: Link drucken

10. September 2009 13:35

Sollen denn die RecordLinks eines bestimmten SalesHeader gefunden werden? Dann dürfte noch ein RecRef.setview(SalesHeader.getview) und RecRef.findfirst fehlen.

Re: Link drucken

10. September 2009 13:39

Wenn "Sales Header" das DataItem deines Reports ist, dann gehört dein Quelltext in "Sales Header" - OnAfterGetRecord.

McClane hat geschrieben:Sollen denn die RecordLinks eines bestimmten SalesHeader gefunden werden? Dann dürfte noch ein RecRef.setview(SalesHeader.getview) und RecRef.findfirst fehlen.

Sind nicht notwendig, da im nachfolgenden Quelltext nicht der RecRef selbst verarbeitet wird, sondern RecRef.RECORDID -> genau der Datensatz, auf dem man gerade steht.

Re: Link drucken

10. September 2009 13:41

Natalie hat geschrieben:genau der Datensatz, auf dem man gerade steht.

Darauf muss man RecRef doch erst mal stellen?

Re: Link drucken

10. September 2009 13:51

McClane hat geschrieben:
Natalie hat geschrieben:genau der Datensatz, auf dem man gerade steht.

Darauf muss man RecRef doch erst mal stellen?

Allererste Zeile:
Code:
RecRef.GETTABLE("Sales Header");

Und wenn wir uns im OnAfterGetRecord-Trigger befinden, dann ist "Sales Header" auch gerade ordentlich gefüllt.

Re: Link drucken

10. September 2009 13:59

Irgendwas verstehe ich wohl miss. Bei mir klappt´s nur mit anschließendem recRef.findfirst :-?

Re: Link drucken

10. September 2009 14:09

McClane hat geschrieben:Bei mir klappt´s nur mit anschließendem recRef.findfirst :-?

Dann bist du nicht im Sales Header - OnAfterGetRecord ;-)

Re: Link drucken

10. September 2009 16:14

Ich habe es jetzt so, aber es klappt immer noch nicht.

Code:

Sales Header - OnAfterGetRecord()



RecRef.GETTABLE("Sales Header");
RecRef.SETVIEW(SalesHeader.GETVIEW);
IF RecRef.FINDFIRST THEN BEGIN
  RecordLink.RESET;
  RecordLink.SETRANGE("Record ID", RecRef.RECORDID);
  IF RecordLink.FINDSET THEN BEGIN
    i :=0;
    REPEAT
      i +=1;
      Linktext[i] := RecordLink.URL1;
    UNTIL RecordLink.NEXT  = 0;
  END ELSE BEGIN
    i:=1;
    Linktext[i]:='';
  END;
END;

Re: Link drucken

10. September 2009 16:17

Wenn du dir per Debugger nicht das Innenleben deines Quelltextes angeschaut hast, kann zumindest ich dir nicht mehr weiter helfen.
Und ich bleibe weiterhin bei meiner Version des Textes :twisted:

Re: Link drucken

10. September 2009 17:35

Natalie hat geschrieben:Dann bist du nicht im Sales Header - OnAfterGetRecord

daran lag's :)

Re: [gelöst] link drucken

26. August 2010 08:50

Ich habs jetzt auch!


Code:
    IF Item.GET(ArtikelNummer) THEN BEGIN
      IF Item.HASLINKS THEN BEGIN
        RecRef.GETTABLE(Item);
        glRecordId := RecRef.RECORDID;
        IF RecRef.HASLINKS THEN BEGIN
          RecordLink.RESET;
          RecordLink.SETRANGE("Record ID",glRecordId);
          IF RecordLink.FIND('-') THEN BEGIN
            i :=0;
            REPEAT
              i +=1;
              Linktext[i] := FORMAT(RecordLink.URL1);
            UNTIL RecordLink.NEXT  = 0;
            .......



2 Dinge sind also jetzt hinzugekommen:

- Einbau einer Übergabevariable (glRecordId)
- Einsatz von "format" (Linktext[i] := FORMAT(RecordLink.URL1))