Execute a formula with custom button

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • shalmaxb
    Senior Member
    • Mar 2015
    • 1606

    Execute a formula with custom button

    How can I execute a formula (in this case ext/email/send) with a custom button in detail view. If not possible, could anybody provide the necessary action to achieve this. Thanks in advance.
  • rabii
    Active Community Member
    • Jun 2016
    • 1250

    #2
    not sure what is your use case, but the ext/email/send require first to create an email and then execute sending it. if you want to implement that on detail view who/where the email will be build ?
    Rabii
    Web Dev

    Comment

    • yuri
      Member
      • Mar 2014
      • 8454

      #3
      A Workflow with the manual trigger will do the job.
      If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

      Comment

      • heligonaut
        Junior Member
        • Feb 2021
        • 19

        #4
        My solution has always been to create a hidden boolean field (default is "false"), then create a button that changes the field's boolean state to "true", the "true" state triggers the formula process at the end of which add a command to change the field's boolean back to "false".

        Example:

        PHP Code:
        ifThen(entity\isAttributeChanged('hiddenBooleanField')
            && hiddenBooleanField == true,
            $sendEmailButton = record\create(
                'Email',
                'from', 'email@address.mail',
                'to', emailAddress,
                'status', 'Draft',
                'isHtml', true,
                'parentId', id,
                'parentType', 'ParentType',
        );
            ext\email\applyTemplate($sendEmailButton, 'templateIdNumber');
            ext\email\send($sendEmailButton);
            hiddenBooleanField = false;
        );
        Last edited by heligonaut; 03-18-2024, 02:19 PM.

        Comment


        • shalmaxb
          shalmaxb commented
          Editing a comment
          heligonaut, thank you very much. This is, what I had been looking for.
      • shalmaxb
        Senior Member
        • Mar 2015
        • 1606

        #5
        I tried, but I do not find the right code for the button action. Could you help again?

        Comment

      • heligonaut
        Junior Member
        • Feb 2021
        • 19

        #6
        Simple example

        PHP Code:
        actionMyActionForButton: function (data, e) {
            this.view.model.set('hiddenBooleanField', true);
            this.view.model.save();
            Espo.Ui.notify("Action OK!", 'success', 5000);
        } 
        

        Comment


        • shalmaxb
          shalmaxb commented
          Editing a comment
          heligonaut, thank you very much again. I guess I do not have enough skills in javascript.....
          I will try with this one, thanks again.
      • shalmaxb
        Senior Member
        • Mar 2015
        • 1606

        #7
        I copied the code exactly from the espoCRM doc but I do not even get the button to appear. I always get the error "JSON syntax error". Here is my code for the button:

        PHP Code:
        "menu": {
        "detail": {
        "buttons": [
        "__APPEND__",
        {
        "label": "Fragebogen absenden",
        "name": "fragebogenAbsendenButton",
        "action": "fragebogenAbsendenAction",
        "style": "default",
        "acl": "edit",
        "aclScope": "Software",
        "data": {
        "handler": "custom:fragebogen-absenden-action-handler"
        },
        "initFunction": "initManageFragebogenAbsendenAction"
        }
        ]
        }
        }, 
        


        I do not see anything wrong. Anybody does?

        Comment

        • yuri
          Member
          • Mar 2014
          • 8454

          #8
          As the error message says, JSON syntax is invalid. There should not be the trailing comma, and your entire code should be wrapped into { ... }. https://docs.espocrm.com/development...p-right-corner
          If you find EspoCRM good, we would greatly appreciate if you could give the project a star on GitHub. We believe our work truly deserves more recognition. Thanks.

          Comment


          • shalmaxb
            shalmaxb commented
            Editing a comment
            The comma ist there, because there follows other code in the file Software.json. Because of that also no wrapping {....}, as there are already these wrapping (main) braces. Or do I understand something wrong?
        • shalmaxb
          Senior Member
          • Mar 2015
          • 1606

          #9
          For few days I am trying (with the above help) to implement this in my custom entity, but do not get it to work. I acnnot see, if the button would be displayed, as the detal view does not open.
          As I do not get it to work, I want to ask for pointing me to the direction, where I did something wrong.
          So I will post all files involved.
          My custom entity is named "Software". The action I want to execute is "fragebogen absenden" (fragebogen means questionnaire), which will be the attachment to send by mail.
          The file custom/Espo/Custom/metadata/Resources/clientDefs/Software.json is already present, as there is some of the configuration of fields etc..
          I want to display a button, which should execute a formula to send an email with an attachment.

          My files:

          custom/Espo/Custom/metadata/Resources/clientDefs/Software.json: I added this code

          Code:
          "menu": {
                               "detail": {
                                       "buttons": [
                       {
                          "label": "Fragebogen absenden",
                          "name": "fragebogenAbsendenButton",
                          "action": "fragebogenAbsenden",
                          "style": "default",
                          "acl": "edit",
                          "aclScope": "Software",
                          "data": {
                                 "handler": "custom:fragebogen-absenden-action"
                            },
                            "initFunction": "fragebogenAbsenden"
                     }
                 ]
            }
          }
          Handler: client/custom/src/software/fragebogen-absenden-action.js

          Code:
          Espo.define('custom:views/software/fragebogen-absenden-action', 'views/detail', function (Dep) {
          
                              return Dep.extend({
                                       setup: function() {
                                             Dep.prototype.setup.call(this);
          
                                        this.addMenuItem('buttons', {
                                             name: 'fragebogenAbsenden',
                                             label: 'Fragebogen absenden',
                                             style: 'primary',
                                             acl: 'edit',
                                             action: 'fragebogenAbsenden'
                                        }, true);
                                  },
          
                                      actionFragebogenAbsenden: function (data, e) {
                                      this.view.model.set('hiddenBooleanField', true);
                                      this.view.model.save();
                                      Espo.Ui.notify("Fragebogen gesendet", 'success', 5000);
                                      }
          });
          Formula in entity Software:

          ifThen(entity\isAttributeChanged('hiddenBooleanFie ld')
          && hiddenBooleanField == true,
          $sendEmailButton = record\create(
          'Email',
          'from', 'email@address.mail',
          'to', emailAddress,
          'status', 'Draft',
          'isHtml', true,
          'parentId', id,
          'parentType', 'ParentType',
          );
          ext\email\applyTemplate($sendEmailButton, 'templateIdNumber');
          ext\email\send($sendEmailButton);
          hiddenBooleanField = false;
          );​

          Thank you in advance.


          Comment

          Working...