Suche nach Elementen und Gruppen anhand von verschiedenen Kriterien

  • Hallo,


    ich würde gerne nach Elementen und Gruppen anhand von speziellen Kriterien suchen. Ich denke es würde sich TFbmDbQuery hierzu anbieten, da ich hierdurch ja direkt SQL-Querys ausführen kann. Jedoch fehlt mir nun das Datenbankschema von Greyhound. Des weiteren habe ich leider auch keine Informationen in der Dokumentation gefunden in welche Form ich die Ergebnisse erhalte.


    Ziel des Ganzen ist es alle existierenden Gruppen zu erhalten welche eine spezielle E-Mail Adresse hinterlegt haben. Das ganze lässt sich auch wirklich gut realisieren über folgenden Code:


    Code
    1. Item.AutoGroup(iagfRecipients);


    Jedoch verwenden wir zu besseren Übersicht folgendes System:


    cnXXXX-pnXXXX@domain.de, cnXXXX steht hier für die Kundennummer und pnXXXX für die Projektnummer des Kunden. Wenn ein Kunden jedoch an eine Adresse schreibt bei der die Kundennummer stimmt, jedoch nicht die Projektnummer, soll die E-Mail dennoch dem Kunden zugeordnet werden. Auch ist in diesem Fall klar, dass der Kunden versucht hat im Bezug auf ein Projekt Kontakt mit uns aufzunehmen. Das Ganze soll also der Gruppe "KUNDENNAME->Projekte->Nicht zugeordnet" zugewiesen werden.


    Außerdem würde ich gerne die Gruppenzuordnung für E-Mail folgendermaßen automatisieren:


    Wir haben Gruppen denen Kontakte zugeordnet sind. Wenn nun eine Mail von einer Adresse kommt, welcher einem Kontakt zugeordnet ist, soll diese auch der Gruppe des Kontaktes zugeordnet werden, das ganze soll natürlich erst gesehen wenn die Oben genannte Zuordnung fehl schlägt, das lässt aber einfach über eine If-Abfrage lösen.


    Da sich weiter solche oder ähnliche Anforderungen sicher noch ergeben werden wäre es wirklich ungemein praktisch direkt auf der der Datenbank (lesend) operieren zu können.

  • Hallo,


    der Zugriff auf die Datenbank ist bewusst nicht dokumentiert. Externe Programme sollten die XML-RPC oder JSON-RPC Schnittstelle verwenden, um auf Daten von GREYHOUND zuzugreifen. Das Regelsystem stellt vordefinierte Klassen zur Verfügung.


    Im Prinzip benötigst du ähnliche Funktionen, wie in diesem Beitrag beschrieben: Gruppen-ID per Gruppennamen ermittlen


    Anstelle von


    Code
    1. Item.GroupCache.GetPathByID


    verwendest du einfach


    Code
    1. Item.GroupCache.GetEMailByID


    und führst die gewünschten Vergleiche aus. Ich denke damit müsstest du eigentlich alle angesprochenen Punkte lösen können.

  • Hallo,


    außer das FbmRegExMatch nicht richtig funktioniert habe ich alles für den ersten Teil hin bekommen. Was mir jetzt für den zweiten Teil


    Außerdem würde ich gerne die Gruppenzuordnung für E-Mail folgendermaßen automatisieren:


    Wir haben Gruppen denen Kontakte zugeordnet sind. Wenn nun eine Mail von einer Adresse kommt, welcher einem Kontakt zugeordnet ist, soll diese auch der Gruppe des Kontaktes zugeordnet werden, das ganze soll natürlich erst gesehen wenn die Oben genannte Zuordnung fehl schlägt, das lässt aber einfach über eine If-Abfrage lösen.


    fehlt ist die Möglichkeit alle Elemente (im diesem Konkreten Fall die Kontakte) welche in einer Gruppe enthalten sind zu durchsuchen. Ich brauche also eine Liste der IDs von Kontaktelementen welche einer Gruppe zugeordnet sind.

  • Hallo,


    im Moment gibt es keine Möglichkeit innerhalb des Regelsystems alle Kontakte einer Gruppe zu durchsuchen. Ehrlich gesagt habe ich das genaue Problem bzw. das genaue Ziel auch noch nicht komplett erfasst. Ich habe aber irgendwie die Vermutung, dass sich das Problem viel einfacher lösen lässt.

  • Hallo,


    wenn es einfacher geht wäre das natürlich toll. Das Ziel des ganzen ist es alle Nachrichten auf einfache Weise zu sortieren ohne für jeden neuen Kunden, Mitarbeiter von Kunden etc. eine extra Regel anzulegen. Das ganze soll vollkommen automatisch gesehen. Deshalb sollen Mails von Kontakten welche einer Gruppe angehören in die selbe Gruppe eingeordnet werden wie die Kontakte. Wenn Gruppen nun auch noch benutzerdefinierte Felder, wie Elemente, besitzen würden, könnten man alles super automatisieren. Am aller besten wäre es natürlich es wäre möglich neue Element anzulegen die Eigenschaften von bereits bestehenden erben. So wäre es möglich aus einem Gruppen Container einen Kunden Container zu machen usw.

  • Hallo,


    wenn die E-Mail Adressen der Kunden in Kontakten hinterlegt sind, kann man die Zuordnung zu den Kontakten über die automatische Klassifizierung bewerkstelligen. Die Kontakt-IDs (Element-IDs) der klassifizierten Kontakte befinden sich in Item.Classified.


    Die automatisch klassifizierten Kontakte lassen sich nun in einer eigenen Instanz von TFbmItem laden. Aus der Instanz kann nun die Gruppen-ID in das Element kopiert werden. Natürlich lassen sich auch andere Eigenschaften des Kontaktes in das Element kopieren.


    Kurzes Beispiel:


  • Hi,


    vielen Dank Oliver - nach so einem Schnipsel suchte ich schon lange! :)
    Allerdings habe ich dabei noch ein Problem - siehe unten unter dem Code-Schnipsel.



    Falls es vielleicht anderen auch nützt - ich habe das leicht modifiziert, um es als einzelne Regel in eine Reihe von Eingangsregeln einzubinden, damit:


    a. das Thema für ein gescanntes Dokument automatisch gesetzt wird anhand des Themas des klassifizierten Kontaktes


    b. der Betreff automatisch gesetzt wird anhand eines am Kontakt hinterlegten benutzerdefinierten Feldes.


    Sieht dann so aus:


    Ich nutze das, damit z. B. eingescannte Rechnungen sofort den richtigen Kontakt, das richtige Thema und einen passenden Betreff bekommen.



    So - nun habe ich dabei aber noch ein Problem:
    Wie man ja sehe kann, habe ich die Schleife auskommentiert und habe stattdessen einfach den ersten gefundenen Kontakt genommen -> ContactItem.Load(Item.Classified[0]).
    Das habe ich gemacht, weil ich - wenn ich die Schleife nehme - folgende Fehlermeldung bekomme:


    Der Bytecode konnte nicht ausgeführt werden, folgende Fehler sind aufgetreten: (EListError): Listenindex überschreitet das Maximum (1)


    Kann mir das evtl. jemand erklären? Ich versteh's nämlich nicht ... ?(

  • Danke für den Hinweis - habe ich nun eingebaut.


    Was aber noch viel wichtiger ist:
    Man sollte die if-Abfrage oben besser so formulieren:

    Code
    1. if ((Item.ClassifiedCount > 0) and (Item.Kind = ikLetter)) then
    2. begin
    3. ....


    Denn mir fiel plötzlich auf, dass ich auffällig viele Emails ohne Betreff bekam .... *flöööööt* ;) Nur gut, dass es ein Systemprotokoll gibt ... ( Regel: 10180 Thema und Betreff auf Basis von Kontkat ändern - Der Betreff wurde von "Fehler im Bestellprozess" auf "" geändert.)


    Gut wäre hier im Grunde, wenn man noch abfragen würde, ob in ContactItem.UserFields.ItemsByName['BuchungsBetreff'].Value überhaupt was drin steht. Wie lautet denn da die Syntax? Gibt es ein if !empty oder so?

  • :thumbup: Vielen Dank!


    Falls das also jemand benutzen möchte, hier noch mal der bereinigte Code - inkl. der notwendigen Abfragen:


  • Hallo an alle!


    Eine Frage von mir da ich die Zuordnung der eingehenden Mails auf unsere angelegten Kontakte wichtig finde:


    Kann ich den oben stehenden Quellcode so übernehmen wenn ich noch die automatische Klassifizierung einfüge?


    Müsste ja dann in etwa so sein:


    var
    i: Integer;
    ContactItem: TFbmItem;


    begin
    Item.AutoClassify([iackIdentifiers], 100, False, False);
    if ((Item.ClassifiedCount > 0) and (Item.Kind = ikLetter)) then
    begin
    ContactItem := TFbmItem.Create(ikContact, 0)


    try
    ContactItem.DbQuery := Item.DbQuery;

    ContactItem.Load(Item.Classified[0]);
    Item.TopicRef := ContactItem.TopicRef;

    if ContactItem.UserFields.ItemsByName['BuchungsBetreff'].Value <> '' then
    try
    Item.Subject := ContactItem.UserFields.ItemsByName['BuchungsBetreff'].Value;
    except
    end;


    finally
    ContactItem.Free;
    end;
    end;
    end.



    Danke für die Hilfe!

  • Hallo,


    ich weiß nicht, wie du die Regel nun genau zusammengebaut hast und wie der Quelltext eingebunden ist. Hast du den Experten abgeschaltet und arbeitest im Quelltextmodus? Wenn nicht, müssen die beiden Variablen in einem separaten Regelknoten definiert werden.


    Du kannst ja mal einen Export der Regel anhängen.