Read current URL in formula

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

    Read current URL in formula

    Hello,
    is it possible to read the current url to set into field by formula?
    I tried this, but it does not work.

    Code:
    url='http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
    Any idea?
  • DEN
    Senior Member
    • Apr 2021
    • 106

    #2
    Hello, I think, it's not supported.
    Last edited by Maximus; 04-09-2021, 12:38 PM.

    Comment

    • item
      Active Community Member
      • Mar 2017
      • 1476

      #3
      Hello,
      strange for my understand :
      url are 99% so sample :



      $siteUrl = rtrim($this->getConfig()->get('siteUrl'), '/');
      $this->getSiteUrl() . '/#' . $entityType . '/view/' . $entityId;

      You have
      siteUrl : it's unique, you can write this by hand
      entityType : maybe by formula (not checked)
      view : hard coded
      entityId : in formula

      so just concat string.
      If you could give the project a star on GitHub. EspoCrm believe our work truly deserves more recognition. Thanks.​

      Comment

      • shalmaxb
        Senior Member
        • Mar 2015
        • 1602

        #4
        Hi, yes, this is exactly what I did so far, but with putting the URL itself into the formula means, that in every instance I install my app, I have to exchange the URL to the respective URL of that installation.
        For that I would like to read it from the installation itself. I know, kind of a "luxury problem", but would be nice to have this.

        Comment

        • item
          Active Community Member
          • Mar 2017
          • 1476

          #5
          Hello,

          just need a custom formula who return $this->getConfig()->get('siteUrl')
          i have checked config.php but nothing else data is relevant.

          https://docs.espocrm.com/development...on-in-formula/



          Not tested but something so :

          GetConfig('siteUrl')

          PHP Code:
          <?php
          
          namespace Espo\Custom\Core\Formula\Functions\StringGroup;
          
          use Espo\Core\Exceptions\Error;
          
          class GetConfigType extends \Espo\Core\Formula\Functions\Base
          {
          public function process(\StdClass $item)
          {
          $args = $this->fetchArguments($item);
          
          $value = $args[0];
          
          return $this->getConfig()->get($value);
          }
          }
          ?>
          If you could give the project a star on GitHub. EspoCrm believe our work truly deserves more recognition. Thanks.​

          Comment

          • shalmaxb
            Senior Member
            • Mar 2015
            • 1602

            #6
            item
            Have mercy with me , I am no programmer. Where would I put this to try? In the config.php? And do I understand right, that so it would extend the abilities of the formula to make it possible to have a formula like this:


            Code:
            url='http://' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];

            Comment

            • criffoh
              Member
              • Jun 2020
              • 55

              #7
              You can use this custom function.


              Create custom\Espo\Custom\Resources\metadata\app\formula. json file

              Code:
              {
              "functionList": [
              "__APPEND__",
              {
              "name": "string\\getSiteUrl",
              "insertText": "string\\getSiteUrl()"
              }
              ],
              "functionClassNameMap": {
              "string\\getSiteUrl": "Espo\\Custom\\Core\\Formula\\Functions\\StringGroup\\GetSiteUrl"
              }
              }

              Create custom\Espo\Custom\Core\Formula\Functions\StringGr oup\GetSiteUrl.php

              PHP Code:
              <?php
              
              namespace Espo\Custom\Core\Formula\Functions\StringGroup;
              
              use Espo\Core\Utils\{
              Config,
              Config\ConfigFileManager
              };
              
              class GetSiteUrl extends \Espo\Core\Formula\Functions\Base {
              
              public function process(\StdClass $args = null) {
              $fileManager = new ConfigFileManager();
              $config = new Config($fileManager);
              return $config->getSiteUrl();
              }
              
              }


              And you can see and use in formula:
              Click image for larger version

Name:	getSiteUrl.jpg
Views:	654
Size:	21.6 KB
ID:	74847

              Comment

              • shalmaxb
                Senior Member
                • Mar 2015
                • 1602

                #8
                Thank you criffoh , I gonna test it in the next days.

                Comment

                • yuri
                  Member
                  • Mar 2014
                  • 8440

                  #9
                  It's not possible to know the current browser URL by design as EspoCRM is a single page application.
                  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

                  • esforim
                    Active Community Member
                    • Jan 2020
                    • 2204

                    #10
                    So that mean the code above won't work? All it do it get the siteURL only, getting /#entity/view/ is wishful thinking?

                    Comment

                    • shalmaxb
                      Senior Member
                      • Mar 2015
                      • 1602

                      #11
                      Today I succeeded in implementing the custom function from criffoh and it works in the following way:

                      1. Create a custom function (here is one small modification from the code example of criffoh). The function will be named string\getSiteUrl:

                      Create custom\Espo\Custom\Resources\metadata\app\formula. json


                      Code:
                      { "functionList": [ "__APPEND__", { "name": "string\\getSiteUrl", "insertText": "string\\getSiteUrl()" } ], "functionClassNameMap": { "string\\getSiteUrl": "Espo\\Custom\\Core\\Formula\\Functions\\StringGro up\\GetSiteUrl" } }
                      Create custom\Espo\Custom\Core\Formula\Functions\Base\StringGroup\GetSiteUrl.php (the modification is in the path, green folder name, add it also to the namespace!)

                      Code:
                      <?php
                      
                      namespace Espo\Custom\Core\Formula\Functions\Base\StringGroup;
                      
                      use Espo\Core\Utils\{
                      Config,
                      Config\ConfigFileManager
                      };
                      
                      class GetSiteUrl extends \Espo\Core\Formula\Functions\Base {
                      
                      public function process(\StdClass $args = null) {
                      $fileManager = new ConfigFileManager();
                      $config = new Config($fileManager);
                      return $config->getSiteUrl();
                      }
                      
                      }

                      Clear cache (probably also Browser cache). This will read https://yourHostname.domain and the function string\getSiteUrl() will appear in the function list of the formula.



                      To get the entire URL you will have to concatenate the necessary parts of the URL by formula and output in another field, like so (an example to get a complete link to an image embedded in your entity):

                      Field 1: current URL (Text), where you fetch the current hostname:

                      Code:
                      currentURL=string\getSiteUrl();
                      Field 2: concatenate currentURL with image link:

                      Code:
                      imageAddress=string\concatenate(
                      currentURL, '/','?entryPoint=DubasPublicAttachment&id='
                      );
                      What happens here:

                      -The formula takes the hostname from the previous created field, a slash is added and after that the entry point part. This part I get from the image link (copy any image link one time, to see, how it is formed). In my case I use for downloading images the free extension from emillod called DubasPublic Attachment, which allows downloads from outside of espoCRM (you can find it here: https://github.com/dubas-pro/ext-public-attachment). Mind the security isues in case of production sites.

                      Field 3: complete URL in an URL field. Concatenate the above string with the file ID (or image ID) of the current record:

                      Code:
                      imageDownloadLink=string\concatenate(imageAddress,imageId);
                      Hope it helps.




                      Comment


                      • esforim
                        esforim commented
                        Editing a comment
                        Wow, you getting good shalmax
                    Working...