[GRLĂ–ST] USERID zur Laufzeit in der Printer Selection ...

Bild Microsoft Dynamics NAV 4.xx
(ehem. Microsoft Business Solutions-Navision)

[GRLĂ–ST] USERID zur Laufzeit in der Printer Selection ...

Beitragvon MSNAVLerner » 3. Januar 2018 15:23

Hey Leute,

ich stehe auf dem Schlauch.
Mein NAS-User führt regelmäßig Reports aus.

Nun habe ich einen Fall, bei dem - abhängig von verschiedenen Parameter - ein Bericht an dem einen oder anderen Drucker ausgedruckt werden soll.

Wie bekomme ich es hin, dass ich - bevor der Report ausgefĂĽhrt wird - ich diesem mitgeben kann an welchem Drucker gedruckt werden soll?
Mein Plan ist zur Laufzeit dem Bericht einen andere USERID mitzugeben.

Ist dies so realisierbar?

So sieht der Eintrag in der Printer Selection Tabelle aus

Code: Alles auswählen
USERID  Berichts-ID  Druckername

HANS   50500   DruckerA
PETER  50500  DruckerB
LISE     50500 DruckerC


GrĂĽĂźe
Zuletzt geändert von MSNAVLerner am 5. Januar 2018 11:02, insgesamt 3-mal geändert.
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection definieren

Beitragvon fiddi » 3. Januar 2018 16:14

Hallo,

wenn du Codeunit 1 bearbeiten darfst, kannst du eine Funktion definieren, die die nötigen Informationen in CU1 abspeichert bevor das System den Drucker in CU1 sucht. In dieser Funktion setzt du halt die nötigen Parameter und sorgst so dafür dass deine gesetzten Parameter als der Funktion FindPrinter zurück gegeben werden.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: USERID zur Laufzeit in der Printer Selection definieren

Beitragvon MSNAVLerner » 3. Januar 2018 16:23

Zugriff auf Cun1 habe ich, geht das nur dort in meinem Fall?

Wann genau wird die Cun1 Funktion FindPrinter aufgerufen?

Würde nur ungern die Standardfunktion "FindPrinter" modifizieren, wenn sich das vermeiden lässt.
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection definieren

Beitragvon MSNAVLerner » 3. Januar 2018 16:47

Ich denke gerade an sowas hier.

Code: Alles auswählen
PrinterSelection.RESET;
PrinterSelection.SETRANGE(USERID, 'HANS');
IF PrinterSelection.FINDFIRST THEN BEGIN
 REPORT.RUNMODAL(PrinterSelection."Report ID", FALSE, FALSE, recSoundSo);
END;      


Das mĂĽsste dann noch irgendwie hier reingewuschtelt werden

Code: Alles auswählen
// Bericht am Platz X drucken
reportDruck.Def(recPhaseSP);
reportDruck.USEREQUESTFORM(FALSE);
reportDruck.RUN;
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection definieren

Beitragvon fiddi » 3. Januar 2018 18:45

Zugriff auf Cun1 habe ich, geht das nur dort in meinem Fall?

Ja
Wann genau wird die Cun1 Funktion FindPrinter aufgerufen?

Der wird vom Report.RUN aus dem System heraus aufgerufen.
Deine Funktion in muss also vor dem Aufruf von Report.RUN in CU1 die Parameter setzen. Da CU1 eine SingleInstance- Codeunit ist, kannst du CU1 lokal definieren, und die Parameter setzten. Das System wird dann auf die Werte Zugriff haben.

Würde nur ungern die Standardfunktion "FindPrinter" modifizieren, wenn sich das vermeiden lässt.

Kann ich verstehen, ist aber die einzige Möglichkeit

Der Aufruf:
Code: Alles auswählen
CU1.Setparam(USERID);
Report.RUN


die Funtion in CU1 (GlobalUserid ist eine globale Varible von Typ Code50):
Code: Alles auswählen
Function Setparm(pUserID:Code[50])
BEGIN
   GlobalUserID := pUserID;
END;


die Funktion FindPrinter benötigt eine lokale Variable LocalUserid:
Code: Alles auswählen
BEGIN
  LocalUserid := GlobalUserID; // diese zwei Zeilen sorgen dafĂĽr das GlobalUserid beim nächsten Aufruf von Report.RUN garantiert wieder gelöscht ist, egal ob ein Fehler auftritt oder nicht
  GlobalUserid := '';

  if LocalUserid = '' THEN
    LocalUserid :=USERID;
 
  CLEAR(PrinterSelection);

  IF NOT PrinterSelection.GET(LocalUserid,ReportID) THEN
    IF NOT PrinterSelection.GET('',ReportID) THEN
      IF NOT PrinterSelection.GET(LocalUserid,0) THEN
        IF PrinterSelection.GET('',0) THEN;

  EXIT(PrinterSelection."Printer Name");
END

Du musst aber sicherstellen das du CU1.Setparm unmittelbar vor JEDEM zu ändernden Report.RUN aufrufst, damit die Userid immer gelöscht wird, bevor du einen anderen Report aufrufst, oder ein Fehler passieren kann.

GruĂź Fiddi

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: USERID zur Laufzeit in der Printer Selection definieren

Beitragvon MSNAVLerner » 4. Januar 2018 09:32

Okay, also im Endeffekt funktioniert die FindPrinter wie bisher auch, auĂźer rufe vor einem Report.RUN die SetParamID-Funktion der CUN1 auf und befĂĽlle diese mit meiner gewĂĽnschten USERID.

Ich denke so einen Eingriff in die Cun1 ist okay.

Danke vielmals!
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection ...

Beitragvon MSNAVLerner » 4. Januar 2018 13:04

Umgesetzt, doch die globale UserID-Variable ist zur Laufzeit vom Report leer.


// Beleg drucken
repDruckAmPlatz.Def(recLBK);
repDruckAmPlatz.DefSammelkennzeichen(codNummer);
repDruckAmPlatz.USEREQUESTFORM(FALSE);
g_cun1.SetParamForModifyFindPrinter(codPlatz); // definieren welche USERID den Report ausfĂĽhrt
repDruckAmPlatz.RUN;
CLEAR(repDruckAmPlatz);



Habe ich irgendwas ĂĽbersehen?
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection ...

Beitragvon fiddi » 4. Januar 2018 16:11

Hallo,

die GlobalUserid wird sofort nach dem Aufruf von FindPrinter und der Zuweisung wieder gelöscht, damit auch im Fehlerfall (hier höchst unwahrscheinlich aber möglich) beim nächsten Aufruf nichts falsches in der Variable steht.
Die LocalUserid (sollte auch eine lokale Variable von FindPrinter sein) wird benutzt um den Drucker zu finden. Was in USERID steht ist belanglos, falls du den Parameter ĂĽbergeben hast.

Eine Besonderheit gibt es bei den SingleInstance- Codeunits noch. Du muss den Client nach einer Ă„nderung neu starten, damit die Ă„nderung gezogen wird.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: USERID zur Laufzeit in der Printer Selection ...

Beitragvon MSNAVLerner » 4. Januar 2018 16:51

Alles genauso umgesetzt.
Debugge ich, dann sehe ich wie die neue Funktion den ĂĽbergebenen User in die Global reinschreibt.

Direkt danach läuft dann der Report.RUN und geht direkt zu FindPrinter und da ist die Global dann leer.
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: USERID zur Laufzeit in der Printer Selection ...

Beitragvon fiddi » 4. Januar 2018 17:16

Ich wäre gestern besser im Bett geblieben. :oops:

Du hast natürlich recht. aber das ändert nur wenig an der Funktionalität.
Es wird nur ein wenig komplizierter.

Damit das ganze funktioniert benötigen wir eine SingleInstance- Codeunit.

die enthält mindestens die Funktionen Setparm, die wir schon kennen, und die Funktion Getparm und die globale Variable GlobalUserID
Code: Alles auswählen
Procedure GETparm () ResultUserID : Code[50]
BEGIN
  ResultUserID := GlobaleUserID;
  GlobalUserID:= '';
END;


in FindPrinter definierst du jetzt die O.G. Cosdunit als Lokale Variable und den Code
Code: Alles auswählen
  LocalUserid := GlobalUserID;
  GlobalUserid := '';
durch
Code: Alles auswählen
LocalUserID := SingleInstanceCU.GetParam;


Die GlobalUserID wird jetzt natürlich nicht mehr in CU1 benötigt.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: USERID zur Laufzeit in der Printer Selection ...

Beitragvon MSNAVLerner » 5. Januar 2018 11:01

Jetzt hat es funktioniert, prima.
Danke!
MSNAVLerner
 
Beiträge: 145
Registriert: 15. September 2015 16:50
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV


ZurĂĽck zu NAV 4.xx

Wer ist online?

Mitglieder in diesem Forum: Unbekannter Spider und 1 Gast

cron