Mit InsertNewObject eingefügte MergeFields füllen

  • Hallo,

    WPTOols 5.211 unter Delphi 2006.

    Ich möchte ein MergeField programmatisch in den Header eintragen. Dies mache ich so:

    Code
    Paragraph := WP.HeaderFooter.Get(wpHeader, wpraOnAllPages).FirstPar;  WP.WritingAttr.Clear;  CharAttr := WP.WritingAttr.CharAttr;  Paragraph.ClearText;  Paragraph.ASet(WPAT_Alignment, Integer(paralLeft));  Paragraph.Insert(0, 'Berichtsnummer: ', CharAttr);  MergeField := Paragraph.InsertNewObject(MaxInt, wpobjMergeField, False, False, CharAttr);  MergeField.Name := 'Nr';

    Später möchte ich das MergeField mit folgenden Aufruf füllen:

    Code
    WP.MergeText('Nr', True);

    Die Ereignisbehandlungsroutine:

    Code
    procedure TFrmEditor.WPMailMergeGetText(Sender: TObject; const inspname: string;
      Contents: TWPMMInsertTextContents);
    begin
      if SameText(inspname, 'Nr')
      then Contents.StringValue := 'was_auch_immer';
    end;

    Leider erscheint das MergeField nach dem Einfügen nicht oder zumindest ohne Text im Header. Auch der o.g. Aufruf von MergeText füllt das MergeField nicht.

    MergeFields die ich im Body mittels WP.InputMergeField('Nr', 'Nr') einfüge werden demgegenüber korrekt gefüllt.

    Ich nehme an, dass es mir mit o.g. Code nicht gelingt, den FieldName und den DisplayName des MergeFields korrekt zu setzen. Oder ist es ein anderes Problem?

    Was mache ich falsch?

    Vielen Dank für Ihre Hilfe
    Mathias Gerlach

    Einmal editiert, zuletzt von Mam (28. Juni 2007 um 15:14)

  • Zwischenzeitlich ist es mir gelungen, mit...

    Code
    MergeField := Paragraph.AppendNewObject(wpobjMergeField, True, False, CharAttr);
    MergeField.Name := 'Nr';
    MergeField.Params := 'Nr';
    MergeField := Paragraph.AppendNewObject(wpobjMergeField, True, True, CharAttr);
    MergeField.Name := 'Nr';
    MergeField.Params := 'Nr';

    ...das MergeField zu erstellen und auch mittels MergeText zu befüllen.

    Allerdings erscheint (im Gegensatz zur Nutzung von InputMergeField) kein DisplayText zwischen den Markern des MergeFields.
    Lt. Doku verwendet WPTools den Inhalt von Params als DisplayField.

    Was mache ich noch falsch?

    • Offizieller Beitrag

    Hallo,

    >> Ich möchte ein MergeField programmatisch in den Header eintragen.

    Achtung - merge felder treten immer gepaart auf - die beiden objekte müssen durch denselben "tag" wert verbunden sein.

    Man kan entweder AppendNewObjectPair verwenden:

    Code
    Paragraph := WPRichText1.HeaderFooter.Get(wpHeader, wpraOnAllPages).FirstPar;  obj := Paragraph.AppendNewObjectPair(wpobjMergeField, 'Display Text', 0);  obj.Name := 'Field_Name';

    oder SetTag:

    Code
    Paragraph := WPRichText1.HeaderFooter.Get(wpHeader, wpraOnAllPages).FirstPar;
      MergeField := Paragraph.AppendNewObject(wpobjMergeField, True, False, 0);
      MergeField.Name := 'Field_Name';
      Paragraph.Append('Display Text');
      obj := Paragraph.AppendNewObject(wpobjMergeField, True, True, 0);
      obj.SetTag(MergeField.NewTag);

    Viele Grüsse,

    Julian Ziersch