Benachrichtigungen per Funktion erstellen

8. Januar 2010 13:04

Nachstehend ein Beispiel, wie man per C/AL-Code eigene Benachrichtigungen erstellen kann, die dann auf der Startseite eines Rollencenters erscheinen.
Wichtig dabei ist, dass die Länge des Meldungstextes dem BLOB-Feld mitgegeben wird in Form eines CHAR-Wertes.

Folgende Varibalen sind dazu definiert:
OutStream DataType OutStream
Tex DataType Text 250
NewID DataType Integer
LenChar DataType Char

Code:
Text := 'Dies ist ein weiterer wertvoller Hinweis';
LenChar := STRLEN(Text);

Text := FORMAT(LenChar) + Text;

Cont.GET('1000');
NewID := Cont.ADDLINK('dynamicsnav://dell-rotsch:7046/myCharity/myCharity/runpage?page=5050&mode=Edit',
                      'Über eigene Funktion erstellt');

RecordLink.GET(NewID);

RecordLink.CALCFIELDS(Note);
RecordLink.Note.CREATEOUTSTREAM(OutStream);
OutStream.WRITE(Text);

RecordLink.Type := RecordLink.Type::Note;
RecordLink.Notify := TRUE;
RecordLink."To User ID" := USERID;

RecordLink.MODIFY;

Re: Benachrichtigungen per Funktion erstellen

16. März 2012 17:09

Hallo rotsch,

auch wenn es eine weile her ist, dass du dies gepostet hast, hoffe ich dennoch Hilfe zu bekommen.

Ich habe vor ein paar Tagen eine Anfrage bekommen die genau auf diese Thematik abzielt musste aber leider auch feststellen, dass das nicht so ganz funktioniert. Du erstellt zwar erfolgreich eine Benachrichtung für User XY, die ihm auch wunderschön mit der Hinweismeldung angezeigt bekommt, aber...

Der hinterlegte Link führt dich in deinem Beispiel auch wohl zur Kontaktpage, aber nicht direkt zum richtigen. Sollte nach Primärschlüsselsortierung der Kontakt 1000 der erste Datensatz sein, wirkt es nur auf den ersten Blick so, dass dies funktioniert :D. Das Feld Record ID ist nicht für den korrekten Aufruf der Page verantwortlich.

Das Schlimme ist wirklich der Linkaufbau im Feld URL1
dynamicsnav://DBSERVER:PORT/INSTANCE/COMPANYNAME/runpage?page=PAGEID&personalization=???&bookmark=???;[JAAAAACLAAAAAACJCjIwMTAwMDAwMTI=]&mode=Edit

Ich denke das die Personalization nicht so dringend wichtig ist aber die eigentliche Verlinkung betrifft den Part für Bookmark und da weiß ich beim besten willen nicht, wie der das erstellt.

Als Ergänzung hier schonmal, dass das Feld Description der Tabelle Record Link als Seite in MyNotes angezeigt wird. Lässt sich schön über die Funktion RECORDID einer RecordRef Variable füllen :)

Mit freundlichen Grüßen

iPeon

Re: Benachrichtigungen per Funktion erstellen

16. März 2012 18:23

Gotcha :)

dynamicsnav://DBSERVER:PORT/INSTANCE/COMPANYNAME/runpage?page=PAGEID&bookmark=FORMAT(RECORDID,0,10)&mode=Edit

Mit der RecordID lässt sich das bookmark erstellen über die FORMAT Funktion. Achtung! Formattype 10 ist nicht dokumentiert in der Hilfe! Das ist eine FORMAT, was auch nur der RTC kann, testen im CC ist also sinnlos ;)

Hier mal mein Codebeispiel:
Code:
OnRun()
Cust.GET('100001');
RecRef2.GETTABLE(Cust);
Send(RecRef2, 'Hallo Welt!', 21, 'USER XY');

Send(RecRef : RecordRef;Message : Text[1024];PageID : Integer;ToUser : Text[132])
LenChar := STRLEN(Message);
Message := FORMAT(LenChar) + Message;

RecordLink.GET(RecRef.ADDLINK('dynamicsnav://localhost:7046/SERVICEINSTANCE/'+COMPANYNAME+'/'+
                              'runpage?page='+FORMAT(PageID)+
                              '&bookmark='+FORMAT(RecRef.RECORDID,0,10)+
                              '&mode=Edit'));
RecordLink.CALCFIELDS(Note);
RecordLink.Note.CREATEOUTSTREAM(OutStream);
OutStream.WRITE(Message);

RecordLink.Description := FORMAT(RecRef.RECORDID);
RecordLink.Type := RecordLink.Type::Notiz;
RecordLink.Notify := TRUE;
RecordLink."To User ID" := ToUser;

RecordLink.MODIFY;

Re: Benachrichtigungen per Funktion erstellen

17. März 2012 14:46

Hi iPeon

Dank für deine Beiträge. Das ist mir bis jetzt nicht aufgefallen, da ich diese Funktion ganz wenig verwende. Mit deinen Korrekturen passt das aber auf jeden Fall besser :-D

Etwas ist mir noch aufgefallen:
Die Einträge unterscheiden sich in der Erscheinung, je nachdem du sie direkt über die Karte erfasst oder per Funktion. Die Spalte Seite wird unterschiedlich dargestellt und Sonderzeichen wie ä ö ü werden nicht korrekt dargestellt (siehe Anhang).

Hast du da ev. noch eine Idee?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Benachrichtigungen per Funktion erstellen

20. März 2012 11:22

Hallo rotsch,

Keine Ursache :) man möchte ja nur helfen.

Was das Problem mit den BLOB Fields und den ÄÖÜ angeht, so habe ich eine vermutung woran das liegen kann. Ich bezieh mich auf das selbe Problem wie das auslesen von BLOB Fields und um diese dann in einen Report wieder dazustellen. Zeichensatz.

Im Code bin ich Ansi/Ascii und das Blobfield ist meines Wissens nach UTF8 fähig. Ich bastel grade noch mit einigen DotNet Variablen rum um im Code den Text umzuwandeln. Leider meint mein RTC, dass die Funktion CreateString der Classe UTF8Encoder in dem Namespace System.Text.UTF8Encoder und Assembly mscorlib.dll nicht vorhanden ist. Diese ist aber durchaus dokumentiert auf diveresen MS seiten :D

Was das Feld "Seite" in MyNotes angeht versuch ich noch irgendwie zurechtzubasteln. Sollte aber über die Caption und die Fieldrefs bezüglich Primary Key nachbaubar sein.

Ich melde mich, wenn ich es hinbekommen habe.

Re: Benachrichtigungen per Funktion erstellen

20. März 2012 15:36

Hallo rotsch,

hier schon mal der die Funktion für die Description.

Code:
BuildDescription(RecRef : RecordRef) Description : Text[1024]
Description := RecRef.CAPTION + ' -';

KeyRef := RecRef.KEYINDEX(1); //1 for Primary Key
FOR i := 1 TO KeyRef.FIELDCOUNT DO BEGIN
  FldRef := KeyRef.FIELDINDEX(i);
  IF i = 1 THEN
    Description += ' ' + FORMAT(FldRef.VALUE)
  ELSE
    Description += ', ' + FORMAT(FldRef.VALUE);
END;


Das Problem mit meiner DotNet Variabel habe ich hinbekommen, aber ich scheine da noch was falsch zu codieren. Ich bin dabei mitlerweile auf den Namespace System.Text.Encoding gewechselt um die Sachen besser auszuprobieren. Die Funktion ist wie folgt:

Code:
NoteOutStream.WRITE(
  dstEncoding.GetString(
    Encoding.Convert(
      srcEncoding,
      dstEncoding,
      srcEncoding.GetBytes(Message))));


srcEncoding ist ASCII und dstEncoding ist UTF8. Dadurch werden auf den Zeichen aus dem Screenshot in "?". Weiß da einer mehr von welcher Codepage zu welcher Codepage man hier encodieren muss?

Re: Benachrichtigungen per Funktion erstellen

16. Januar 2013 09:43

HI,

das Thema lag wieder ne Zeit aber ich bin interessiert ob dus hinbekommen hast iPeon.

Dazu: gibt es irgendwie die Möglichkeit den System Part "MyNotes" anzupassen? :/

Re: Benachrichtigungen per Funktion erstellen

16. Januar 2013 13:58

Hallo Matthias,

Leider hab ich noch keine Lösung für NAV 2009 R2.

Ab NAV 2013 ist das Problem gelöst aufgrund der Unicode-fähigkeit und der erweiterteten DotNET 4 Interoperability zu NAV.

http://community.dynamics.com/product/n ... -2013.aspx.

---------------------

Was den System Part MyNotes betrifft, so musst du diese Page nachbauen und überall dort einbinden wo du deiner erweiterte Funktionalität brauchst.

Gruß André

Re: Benachrichtigungen per Funktion erstellen

16. Januar 2013 15:01

vielen dank Peon :)

Re: Benachrichtigungen per Funktion erstellen

16. Januar 2013 16:50

ich muss nochmal erweitern :/

Code:
LenChar := STRLEN(MessageText);
MessageText := FORMAT(LenChar) + MessageText;

RecordLink.GET(RecRef.ADDLINK('dynamicsnav://localhost:7046/SERVICEINSTANCE/'+COMPANYNAME+'/'+
                              'runpage?page='+FORMAT(PageID)+
                              '&bookmark='+FORMAT(RecRef.RECORDID,0,10)+
                              '&mode=Edit'));
                             
RecordLink.CALCFIELDS(Note);
RecordLink.Note.CREATEOUTSTREAM(OutStream);
streamWriter := streamWriter.StreamWriter(OutStream, encoding.Unicode);

// streamWriter := streamWriter.StreamWriter(OutStream);
streamWriter.WriteLine(MessageText);
streamWriter.Close();

RecordLink.Description := initDescription(RecRef);
RecordLink.Type := RecordLink.Type::Note;
RecordLink.Notify := TRUE;
RecordLink."To User ID" := ToUser;

RecordLink.MODIFY;


Dieser Code gibt leider diese Meldung zurück "Die Daten können nicht angezeigt werden, da sie ungültig sind."
setze ich ...
Code:
streamWriter := streamWriter.StreamWriter(OutStream, encoding.Unicode);

... diesen Code, zeigt er die Sonderzeichen zwar an aber schneidet Pro Sonderzeichen hinten ein Zeichen ab :/


jemand ne Idee? :/

Re: Benachrichtigungen per Funktion erstellen

16. Januar 2013 19:02

leider tritt außerdem noch dieses bei mir auf: http://www.mibuso.com/forum/viewtopic.p ... =RTC+Notes

Ich kann nicht mehr als 127 Zeichen erstellen :( hat da jemand eine Lösung?

Re: Benachrichtigungen per Funktion erstellen

28. Januar 2013 11:06

Die Lösung ist so einfach: Die Anzeige der NAV Benachrichtigungen ist schlichtweg verbuggt! Diese Zeigt leider lange Texte nicht richtig an. Folgende Phänomene:
  • Texte werden nicht vollständig angezeigt
  • Texte werden Teilweise willkürlich geschnitten

Gelöst hab ich dies über eine eigene Page :/

Re: Benachrichtigungen per Funktion erstellen

28. Januar 2013 11:17

Ah Super danke dir :)

Re: Benachrichtigungen per Funktion erstellen

21. Juni 2013 17:05

Und immer wieder das selbe Thema :)

Ich bin nun endlich nach etwas längere Zeit dazu gekommen das ganze mit dem Streamwriter zu testen und bei mir klappt es ohne Encoding. Umlaute kommen an :D und natürlich schneidet er was was... Aber da weiß ich auch warum er das macht. Das ist nicht verbuggt. Ich übergeben ihm mit der Message die Char Length die ihm angibt wie viel Text er anzeigen muss. Da liegt die Konvertierung offenbar auf 4 Bit pro Zeichen und Umlaute im Blobfield sind 8 Bit. Ergo schneidet er hinten je Sonderzeichen was ab. Da hilft aber die Umlaut2PlainText Funktion sehr gut bevor die die Chars zählen lasse. Weiterhin hab ich den Code nochmal ausgebaut, was Host und Port angeht. Alles dynamisch jetzt ;)

Worauf ich auch lange drauf reingefallen bin ist die Stream Konvertierung zwischen NAV und DotNet. Microsoft spricht zwar davon, dass es geht, sagt aber nicht dass es erst ab einer bestimmten Buildversion klappt. Also aufpassen. Die Standard Installation von Mircosoft Dynamics NAV 2009 R2 RTM klappt es nicht.

Ich kann jetzt zumindest sagen, dass ich mit der Funktion jetzt so mehr als glücklich bin, dass Sonderzeichen funktionieren und auch der Rest stimmt. Cooperationsarbeit - Danke nochmal MatthiasKönig und rotsch

Code:
OBJECT Codeunit 50007 Record Notification
{
  OBJECT-PROPERTIES
  {
    Date=21.06.13;
    Time=17:04:07;
    Modified=Yes;
    Version List=CDG V1.00;
  }
  PROPERTIES
  {
    OnRun=BEGIN
          END;

  }
  CODE
  {

    PROCEDURE CreateNotification@1000000000(RecRef@1000000000 : RecordRef;PageID@1000000001 : Integer;MessageText@1000000002 : Text[1024];ToUserID@1000000007 : Code[20]);
    VAR
      RecLink@1000000016 : Record 2000000068;
      Session@1000000015 : Record 2000000009;
      DomDoc@1000000014 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{88D96A05-F192-11D4-A65F-0040963251E5}:'Microsoft XML, v6.0'.DOMDocument60";
      DomNode@1000000013 : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{2933BF80-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v6.0'.IXMLDOMNode";
      encoding@1000000012 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Text.Encoding";
      streamWriter@1000000009 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.StreamWriter";
      stream@1000000008 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.Stream";
      NoteOutStream@1000000017 : OutStream;
      ChrLen@1000000006 : Char;
      ServerName@1000000005 : Text[50];
      ServerPort@1000000004 : Text[50];
      ServerInstance@1000000003 : Text[50];
    BEGIN
      ChrLen := STRLEN(Umlaut2PlainText(MessageText));
      MessageText := FORMAT(ChrLen) + MessageText;

      Session.RESET;
      Session.SETRANGE("My Session", TRUE);
      Session.FINDFIRST;
      ServerName := Session."Host Name";

      IF ISCLEAR(DomDoc) THEN
        CREATE(DomDoc);
      DomDoc.load(APPLICATIONPATH + 'CustomSettings.config');
      DomNode := DomDoc.selectSingleNode('//appSettings/add[@key=''ServerPort'']');
      ServerPort := DomNode.attributes.item(1).text;
      DomNode := DomDoc.selectSingleNode('//appSettings/add[@key=''ServerInstance'']');
      ServerInstance := DomNode.attributes.item(1).text;

      RecLink.GET(RecRef.ADDLINK('dynamicsnav://' + ServerName +
                                 ':' + ServerPort +
                                 '/' + ServerInstance +
                                 '/' + COMPANYNAME +
                                 '/runpage?page=' + FORMAT(PageID) +
                                 '&bookmark=' + FORMAT(RecRef.RECORDID,0,10) +
                                 '&mode=Edit'));
      RecLink.Description := BuildDescription(RecRef);
      RecLink.Type := RecLink.Type::Notiz;
      RecLink.CALCFIELDS(Note);
      RecLink.Note.CREATEOUTSTREAM(NoteOutStream);
      streamWriter := streamWriter.StreamWriter(NoteOutStream);
      streamWriter.WriteLine(MessageText);
      streamWriter.Close();

      RecLink.Notify := TRUE;
      RecLink."To User ID" := ToUserID;
      RecLink.MODIFY;
    END;

    PROCEDURE BuildDescription@1000000020(RecRef@1000000000 : RecordRef) Description : Text[1024];
    VAR
      i@1000000003 : Integer;
      FldRef@1000000002 : FieldRef;
      KeyRef@1000000001 : KeyRef;
    BEGIN
      Description := RecRef.CAPTION + ' -';

      KeyRef := RecRef.KEYINDEX(1); //1 for Primary Key
      FOR i := 1 TO KeyRef.FIELDCOUNT DO BEGIN
        FldRef := KeyRef.FIELDINDEX(i);
        IF i = 1 THEN
          Description += ' ' + FORMAT(FldRef.VALUE)
        ELSE
          Description += ', ' + FORMAT(FldRef.VALUE);
      END;
    END;

    PROCEDURE Umlaut2PlainText@1107700003(Text@1107700000 : Text[1024]) NewText : Text[1024];
    VAR
      J@1107700004 : Integer;
      I@1107700005 : Integer;
    BEGIN
      J := 0;
      FOR I := 1 TO STRLEN(Text) DO
        CASE Text[I] OF
          'Ž','','’': AddChar(NewText,'AE',J);
          '„','†','‘': AddChar(NewText,'ae',J);
          'µ','·','¶','Ç': AddChar(NewText,'A',J);
          ' ','…','ƒ','Æ': AddChar(NewText,'a',J);

          '€': AddChar(NewText,'C',J);
          '‡': AddChar(NewText,'c',J);

          'Ñ': AddChar(NewText,'D',J);
          'Ð': AddChar(NewText,'d',J);

          '','Ô','Ò','Ó': AddChar(NewText,'E',J);
          '‚','Š','ˆ','‰': AddChar(NewText,'e',J);

          'Ö','Þ','×','Ø': AddChar(NewText,'I',J);
          '¡','','Œ','‹': AddChar(NewText,'i',J);

          '¥': AddChar(NewText,'N',J);
          '¤': AddChar(NewText,'n',J);

          '™','': AddChar(NewText,'OE',J);
          '”','›': AddChar(NewText,'oe',J);
          'à','ã','â','å': AddChar(NewText,'O',J);
          '¢','•','“','ä': AddChar(NewText,'o',J);

          'š': AddChar(NewText,'UE',J);
          '': AddChar(NewText,'ue',J);
          'é','ë','ê': AddChar(NewText,'U',J);
          '£','—','–': AddChar(NewText,'u',J);

          'í': AddChar(NewText,'Y',J);
          'ì','˜': AddChar(NewText,'y',J);

          'á': AddChar(NewText,'ss',J);

          '¸': AddChar(NewText,'(c)',J);
          '©': AddChar(NewText,'(r)',J);
          '®': AddChar(NewText,'<<',J);
          '¯': AddChar(NewText,'>>',J);
          '¬': AddChar(NewText,'1/4',J);
          '«': AddChar(NewText,'1/2',J);
          'ó': AddChar(NewText,'3/4',J);
          ELSE
            AddChar(NewText,FORMAT(Text[I]),J);
        END;
    END;

    LOCAL PROCEDURE AddChar@1107700004(VAR Text@1107700000 : Text[1024];NewText@1107700001 : Text[30];VAR NewTextPos@1107700002 : Integer);
    VAR
      Counter@1107700003 : Integer;
    BEGIN
      FOR Counter := 1 TO STRLEN(NewText) DO BEGIN
        IF NewTextPos < MAXSTRLEN(Text) THEN BEGIN
          NewTextPos += 1;
          Text[NewTextPos] := NewText[Counter];
        END;
      END;
    END;

    BEGIN
    END.
  }
}

Re: Benachrichtigungen per Funktion erstellen

21. Juni 2013 20:11

Hallo André,

in meinem Beitrag zum Notizen auslesen habe ich damals den BinaryReader erwähnt. Der wird wohl intern auch zum Lesen und Schreiben der Notizen verwendet. Damit kann die Längenermittlung und Umwandlung der Zeichen komplett entfallen.

Ich habe mal für Dynamics NAV 2013 eine Codeunit geschrieben, um ebenfalls Notizen zu "bearbeiten". Danke übrigens für das nette Konstrukt mit dem ADDLINK :-D

Ich denke das sollte, abgesehen von einigen Spezialitäten (ServerInstance, Text ohne Länge), so auch in Version 2009 R2+ laufen (nicht RTM 8-) ).

Code:
OBJECT Codeunit 52000 Notes Handling
{
  OBJECT-PROPERTIES
  {
    Date=21.06.13;
    Time=12:00:00;
    Version List=;
  }
  PROPERTIES
  {
    OnRun=VAR
            RecRef@1000000000 : RecordRef;
            Customer@1000000001 : Record 18;
            NoteId@1000000002 : Integer;
          BEGIN
            Customer.FINDFIRST;
            RecRef.GETTABLE(Customer);
            NoteId := WriteNote(RecRef, PAGE::"Customer Card",
                STRSUBSTNO('Hällööö, dies ist meine Nötiz (%1)',CURRENTDATETIME), USERID);

            MESSAGE(ReadNote(NoteId));
          END;

  }
  CODE
  {

    PROCEDURE ReadNote@1000000000(NoteId@1000000000 : Integer) : Text;
    VAR
      RecordLink@1000000001 : Record 2000000068;
      NoteInStream@1000000002 : InStream;
      StreamReader@1000000003 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.StreamReader";
      BinaryReader@1000000004 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.BinaryReader";
      NoteText@1000000005 : Text;
    BEGIN
      RecordLink.GET(NoteId);
      RecordLink.CALCFIELDS(Note);

      RecordLink.Note.CREATEINSTREAM(NoteInStream);
      StreamReader := StreamReader.StreamReader(NoteInStream);
      BinaryReader := BinaryReader.BinaryReader(StreamReader.BaseStream);

      NoteText := BinaryReader.ReadString();
      BinaryReader.Close();
      StreamReader.Close();

      EXIT(NoteText);
    END;

    PROCEDURE WriteNote@1000000001(RecRef@1000000000 : RecordRef;PageID@1000000008 : Integer;NoteText@1000000006 : Text;NotificationUserID@1000000005 : Code[50]) : Integer;
    VAR
      RecordLink@1000000001 : Record 2000000068;
      ServerInstance@1000000007 : Record 2000000112;
      NoteOutStream@1000000002 : OutStream;
      StreamWriter@1000000003 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.StreamWriter";
      BinaryWriter@1000000004 : DotNet "'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.BinaryWriter";
    BEGIN
      ServerInstance.SETRANGE("Server Instance ID",SERVICEINSTANCEID);
      ServerInstance.FINDFIRST;

      RecordLink.GET(
        RecRef.ADDLINK(
          STRSUBSTNO('DynamicsNAV://%1:%2/%3/%4/runpage?page=%5&bookmark=%6&mode=Edit',
          ServerInstance."Server Computer Name",
          FORMAT(ServerInstance."Server Port"),
          ServerInstance."Service Name",
          COMPANYNAME,
          FORMAT(PageID),
          FORMAT(RecRef.RECORDID,0,10))));

      RecordLink.Description := GetDescription(RecRef);
      RecordLink.Type := RecordLink.Type::Note;
      RecordLink.Created := CURRENTDATETIME;
      RecordLink."User ID" := USERID;
      RecordLink.Company := COMPANYNAME;

      IF NotificationUserID <> '' THEN BEGIN
        RecordLink.Notify := TRUE;
        RecordLink."To User ID" := NotificationUserID;
      END;

      RecordLink.Note.CREATEOUTSTREAM(NoteOutStream);

      StreamWriter := StreamWriter.StreamWriter(NoteOutStream);
      BinaryWriter := BinaryWriter.BinaryWriter(StreamWriter.BaseStream);

      BinaryWriter.Write(NoteText);

      BinaryWriter.Close();
      StreamWriter.Close();

      RecordLink.MODIFY;

      EXIT(RecordLink."Link ID");
    END;

    PROCEDURE GetDescription@1000000002(RecRef@1000000000 : RecordRef) : Text;
    VAR
      Description@1000000001 : Text;
    BEGIN
      Description := FORMAT(RecRef.RECORDID);
      EXIT(RecRef.CAPTION + COPYSTR(Description,STRPOS(Description,':')));
    END;

    BEGIN
    END.
  }
}

Re: Benachrichtigungen per Funktion erstellen

23. Juni 2013 21:30

Hi an alle,
bleibt noch nur noch zu ergänzen, das man ab 2013 für das Ermitteln der Server Instance die CU 9500 anzapfen kann.
Etwa so:
Code:
IF ISNULL(Config) THEN
  Config := Config.Instance;
ServerComputerName := Config.GetStringSetting('Server');
ServerInstance := Config.GetStringSetting('ServerInstance');
ServerPort := Config.GetStringSetting('ClientServicesPort');

UrlString := STRSUBSTNO('DynamicsNAV://%1:%2/%3/%4',ServerComputerName,ServerPort,ServerInstance,COMPANYNAME);
EXIT(UrlString);

Hier wird die Serverinstance aus der Config gelesen. Hierzu werden wiederum 'DLLs' aus dem Installationsverzeichnis verwendet, die etwas Mühe beim Einbinden in eigenen Codeunits bereiten (Geht leider nicht, liegt wohl an der Lizenz oder auch an mir :lol: :lol: ).
ist insbesondere dann hilfreich, wenn man mehrere Instanzen auch einer Maschine laufen hat.

So Long

Micha

Re: Benachrichtigungen per Funktion erstellen

23. Juni 2013 21:39

Fido hat geschrieben:das man ab 2013 für das Ermitteln der Server Instance die CU 9500 anzapfen kann.

... oder einfach die Systemfunktion SERVICEINSTANCEID nutzen kann ;-)

Re: Benachrichtigungen per Funktion erstellen

23. Juni 2013 23:18

Mit der man listig einen Get auf die Tabelle Server Instance macht. :-? :-? :wink: :roll:
Danke :-D