Mail verschicken und Benutzerdefiniertes Feld per Regel ändern

  • Hallo,
    ich habe ein kleines Problem mit der Erstellung einer Regel.
    Kurz zur Ausgangslage:
    Wenn bei uns im System ein Auftrag eingeht, wird in Greyhound eine Aufgabe erstellt der eine xml-Datei mit den Auftragsdetails angehängt ist.
    Der Vertriebsmitarbeiter soll nun die Möglichkeit haben diesen Auftrag an einen externen Dienstleister weiterzuleiten. Dazu muss eine E-Mail verschickt werden, welcher wiederum das Auftrags-XML angehänt ist. Sobald dies geschehen ist, soll ein benutzerdefiniertes Feld gesetzt werden, um anzuzeigen, dass der Auftrag weitergeleitet wurde (Das Feld kann dann später zur Filterung der Aufgaben benutzt werden, bzw. um sicherzustellen, dass der Auftrag nicht zweimal weitergeleitet wird).


    Folgende Regel habe ich dafür erstellt (diese wird dann manuell vom Mitarbeiter angestossen):



    Die Regel wird auch ohne Fehler ausgeführt und die E-Mail inklusive Anhang verschickt. Nur das benutzerdefinierte Feld wird nicht auf True gesetzt.
    Wenn ich nun aber das Hinzufügen des Anhangs auskommentiere (OrderMail.Attachments.Add(Item.Attachments[0]) )
    wird die E-Mail zwar ohne Anhang verschickt, aber das benutzerdefinierte Feld auf True gesetzt.


    P.S:
    Ich habe die Regel etwas reduziert. In der Original-Regel finden noch weitere Überprüfungen statt (z.b. ob der Anhang den richtigen Namen hat) und die Anhänge werden in einer for schleife durchlaufen. Das hatte aber keinen Einfluss auf das Problem.

  • Hallo!


    Von welchem Typ ist denn dein Userfield "Item.UserFields.ItemsByName['bestellung_weitergeleitet']"? String? Boolean?


    Sofern es ein Boolean ist, nimm mal die Anführungszeichen beim Setzen von True raus: Item.UserFields.ItemsByName['bestellung_weitergeleitet'].DataTypeValue := True;

  • Hallo,
    ich habe eine Vermutung, dass es an dem end; in der 1. If-Anweisung liegt. Schau mal, ob es klappt wenn du die Abfragen etwas umstellst:



    Du hattest ja geschrieben, wenn du die Abfrage auskommentierst, dass dann das Benutzerdefinierte Feld geändert wird. Daher wird die zweite Abfrage vermutlich gar nicht geprüft. In dem Beispiel oben, würde die Änderung des Benutzerdefinierten Feldes nur erfolgen, wenn ein Anhang vorhanden ist. Wenn das Feld auch geändert werden soll, obwohl kein Anhang vorhanden ist dann müssten die If-Anweisungen mit end else begin verknüpft werden.

  • Nein, die Umstellung hat leider auch nichts geändert.



    Von welchem Typ ist denn dein Userfield "Item.UserFields.ItemsByName['bestellung_weitergeleitet']"? String? Boolean?
    Sofern es ein Boolean ist, nimm mal die Anführungszeichen beim Setzen von True raus: Item.UserFields.ItemsByName['bestellung_weitergeleitet'].DataTypeValue := True;


    Das Feld ist vom Typ Boolean. Wenn ich die Anführungszeichen wegnehme bekomme ich einen Type mismatch Error.

  • Hallo!


    So, wir haben das Problem endlich gefunden, einmal fehlt das Laden und Speichern der Anhänge im neuen Element sowie die entsprechende Zuweisung:


    OrderMail.LoadSaveAttachmentsContent := True;
    OrderMail.Attachments.Assign(Item.Attachments, iaaoLastRevision);


    Durch das Fehlen dieser Funktionen kam es zu einer Exception, die Mail wurde zwar erzeugt, allerdings wurde das Userfield nicht mehr verändert.


    Ich habe deine Regel mal zu Anlass genommen, hier eine allgemeingültige draus zu bauen:


    Code
    1. var Betreff, Absender, Empfaenger, Userfield: string; DraftItem, AutoReplyItem: TFbmItem; EntwurfID, Testmodus, Anhangspruefung: Integer;
    2. begin // Regelkonfiguration EntwurfID := 38; // Die ID des Entwurfs dessen Text versendet werden soll (ggf. Funktionen -> ID-Inspect verwenden) Absender := 'Max Mustermann <sender@sender.de>'; // Name und E-Mail-Adresse des Absenders Empfaenger := 'Max Mustermann <empfaenger@empfaenger.de>'; // Name und E-Mail-Adresse des Empfängers Betreff := 'Das ist der Betreff' // Hier kann der Betreff des Entwurfs überschrieben werden, wird die Zeile auskommentiert, wird der Betreff des Entwurfs verwendet. Testmodus := 1; // (0 oder 1) Wenn Testmodus = 1 dann werden die E-Mails erzeugt, aber nicht versendet Anhangspruefung := 0; // (0 oder 1) Wenn Anhangspruefung = 1 werden E-Mails nur erzeugt, wenn an der Aufgabe min. ein Anhang vorhanden ist. Wenn nicht, wird an die Aufgabe eine Anmerkung gemacht Userfield := 'Test' // Name des benutzerdefinierten Felds mit Boolean = True/False if (Item.Kind = ikTask) then begin if (Anhangspruefung = 1) then begin if (ifAttachment in Item.Flags) then begin // Hier kommen ggf. weitere Bedingungen rein. begin DraftItem := TFbmItem.Create(ikEmail, 0); try DraftItem.DbQuery := DbQuery; DraftItem.LoadAttachmentsContent; DraftItem.Load(EntwurfID); // if Item.Kind = DraftItem.Kind then begin AutoReplyItem := TFbmItem.Create(DraftItem.Kind, 0); try AutoReplyItem.Assign(DraftItem, [iaoAttachments, iaoProperties, iaoUserFields, iaoNowAsCreated], iasNew) Item.LoadAttachmentsContent; AutoReplyItem.LoadSaveAttachmentsContent := True; AutoReplyItem.Attachments.Assign(Item.Attachments, iaaoLastRevision); AutoReplyItem.State := isNew; AutoReplyItem.TaskNumber.Assign(Item.TaskNumber); AutoReplyItem.Classified.Assign(Item.Classified); AutoReplyItem.Recipients.Text := Empfaenger; AutoReplyItem.From.Text := Absender; AutoReplyItem.Subject := Betreff; if Testmodus = 1 then AutoReplyItem.Flags := AutoReplyItem.Flags + [ifWaiting]; AutoReplyItem.Save; finally AutoReplyItem.Free; Item.UserFields.ItemsByName[Userfield].DataTypeValue := 'True'; end; end; finally DraftItem.Free; end; end; end else begin Item.AddToRemarks('Es ist kein Anhang in der Aufgabe vorhanden, es wird keine E-Mail versendet.'); end; end else begin // Hier kommen ggf. weitere Bedingungen rein. begin DraftItem := TFbmItem.Create(ikEmail, 0); try DraftItem.DbQuery := DbQuery; DraftItem.LoadAttachmentsContent; DraftItem.Load(EntwurfID); // if Item.Kind = DraftItem.Kind then begin AutoReplyItem := TFbmItem.Create(DraftItem.Kind, 0); try AutoReplyItem.Assign(DraftItem, [iaoAttachments, iaoProperties, iaoUserFields, iaoNowAsCreated], iasNew) Item.LoadAttachmentsContent; AutoReplyItem.LoadSaveAttachmentsContent := True; AutoReplyItem.Attachments.Assign(Item.Attachments, iaaoLastRevision); AutoReplyItem.State := isNew; AutoReplyItem.TaskNumber.Assign(Item.TaskNumber); AutoReplyItem.Classified.Assign(Item.Classified); AutoReplyItem.Recipients.Text := Empfaenger; AutoReplyItem.From.Text := Absender; AutoReplyItem.Subject := Betreff; if Testmodus = 1 then AutoReplyItem.Flags := AutoReplyItem.Flags + [ifWaiting]; AutoReplyItem.Save; finally AutoReplyItem.Free; Item.UserFields.ItemsByName[Userfield].DataTypeValue := 'True'; end; end; finally DraftItem.Free; end; end; end; end;end.