Announcement

Collapse
No announcement yet.

Question regarding entity formula

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Question regarding entity formula

    Hello,

    we are currently testing Espo for our company and it looks great so far – Espo is really smart and intuitive! But we need a certain functionality to make it perfect for our needs:

    If a new email comes in via any personal or group email account, it should be checked if the sender's email address is already known to Espo in any contact, account, opportunity or lead (NOT user), and if so, this email should be assigned/linked to a certain team. If have already tried to find a way to get this working via formula for Email entity like this:

    ifThenElse(entity\isNew() && >>from condition here<< , entity\addLinkMultipleId('teams', 'my-team-ID'))

    The team assignment works fine in principle (tested with "from == >specific emailAddress<"), but I did not manage to set up a working >from condition<, which should be TRUE if 'from' (senders email) is found in the email addresses of ANY account or contact or lead or opportunity.
    As Espo already links the name of the sender in the email's from field to corresponding contacts or users, I think this should be possible? Would this work using entity formula or do I need the Advanced Pack extension to set up a workflow? Can you help or give advice?

    Thanks!
    jashe

  • #2
    Hello
    The main code is here
    application/Espo/Core/Mail/Importer.php method importMessage
    it calls from application/Espo/Services/InboundEmail.php

    possible you need to check parent field (parentType and parentId)

    Comment


    • #3
      Thanks for this, Tanya!

      This is what I found out after some more investigation:
      - Entity formula works fine if I use 'parentType !== null' instead of 'parentType != null' in the formula -- the comparison with '!=' (see documentation) doesn't seem to work correctly. So, what I use now is this:
      Code:
      ifThen(entity\isNew() && parentType !== null, entity\addLinkMultipleId('teams', 'my-team-ID'))
      - I found that detection of a parent contact does not work (function findParent in application/Espo/Core/Mail/Importer.php). Detection of leads or accounts work fine. Unfortunately, at first I always tested only with contacts and always wondered why it didn't work. Once I tested with leads it worked seamlessly. I stepped into the code and think in function findParent the check for b2c mode should not be negated to work correctly? So it should be like this
      Code:
      if ($this->getConfig()->get('b2cMode')) {
      instead of
      Code:
      if (!$this->getConfig()->get('b2cMode')) {
      ? Or am I missing something?

      My Espo works in standard B2B mode (B2C not checked in settings). If I do the above change in code, everything works fine including contacts. Could you please confirm if the current code is correct or not?
      Thanks again!

      Comment


      • #4
        Hello
        I've read the code ''' if (!$this->getConfig()->get('b2cMode')) {///} ''' everything is logically. If we found a contact and model is B2B, set as an email parent - the main account of this contact, if B2C - set as an email parent found contact
        About first... will be fixed in the next version
        https://github.com/espocrm/espocrm/c...59c6a8a9262b35
        Last edited by tanya; 06-08-2017, 04:07 PM.

        Comment


        • #5
          I understand. You are right – the code is correct if the goal is to always find a parent account for a contact. So, it might not be a good idea to use 'single' contacts (contacts without related account) in B2B mode like we currently do for a few contacts, because then nothing is found?

          Comment


          • #6
            Although I would have preferred to leave the original code unchanged, I added an else clause as a workaround for this to meet our needs...
            If in B2B mode a related account is found for a contact => the related account gets parent. If not => the contact itself gets parent (just like it was, if we were in B2C mode):
            PHP Code:
            if (!$this->getConfig()->get('b2cMode')) {
                if (
            $contact->get('accountId')) {
                    
            $email->set('parentType''Account');
                    
            $email->set('parentId'$contact->get('accountId'));
                    return 
            true;
                } else {
                    
            $email->set('parentType''Contact');
                    
            $email->set('parentId'$contact->id);
                    return 
            true;
                }
             } 

            Comment


            • #7
              Create own Importer, extends \Espo\Core\Mail\Importer, but override findParent method
              You can customize InboundEmail service (http://forum.espocrm.com/forum/devel...d-into-account), override the method fetchFromMailServer. Copy core code of this method, but set own importer. Rebuild EcpoCRM

              Comment

              Working...
              X