Record created from mobile app or web

Hi,

is there a way to know if a record has been created from the mobile app or from the web?

If not, do you think we can achieve this by adding a custom field with a logic that writes app or web depending on the entry point?

Thanks

Omar

Parents
  • Hello Omar,

    That’s a great question! 
    I explored several ways to achieve this, and I believe the best approach is to create a custom SugarLogic formula function.

    This method requires adding one custom PHP file, and once in place, you can apply it to any field using Studio — no further code changes per module needed.

    I’ve named the new function currentUserPlatform(), and it retrieves the platform used at login.

    By default, the web interface uses the base platform, the mobile app uses the mobile platform, and you can also define custom platform names for your integrations. (like postman for example)

    This function lets you automatically capture and record which platform the user is on.


    1 - Create the custom file: 

    custom/include/Expressions/Expression/Generic/CurrentUserPlatformExpression.php

    <?php
    require_once 'include/Expressions/Expression/String/StringExpression.php';
    
    class CurrentUserPlatformExpression extends StringExpression
    {
        /**
         * Returns the raw platform name used in the current request.
         * Examples: base, mobile, portal, Integration123, etc.
         */
        public function evaluate()
        {
            $platform = null;
    
            // Preferred: from REST service object
            if (isset($GLOBALS['service'])) {
                if (method_exists($GLOBALS['service'], 'getPlatform')) {
                    $platform = $GLOBALS['service']->getPlatform();
                } elseif (property_exists($GLOBALS['service'], 'platform')) {
                    $platform = $GLOBALS['service']->platform;
                }
            }
    
            // Fallbacks for non-REST contexts or integrations
            if (!$platform && !empty($_SERVER['HTTP_X_SUGAR_PLATFORM'])) {
                $platform = $_SERVER['HTTP_X_SUGAR_PLATFORM'];
            }
            if (!$platform && !empty($_SERVER['HTTP_SUGAR_PLATFORM'])) {
                $platform = $_SERVER['HTTP_SUGAR_PLATFORM'];
            }
            if (!$platform && !empty($_SERVER['HTTP_X_SUGAR_CLIENT'])) {
                $platform = $_SERVER['HTTP_X_SUGAR_CLIENT'];
            }
            if (!$platform && !empty($_SERVER['HTTP_SUGAR_CLIENT'])) {
                $platform = $_SERVER['HTTP_SUGAR_CLIENT'];
            }
    
            // As a last fallback, SugarCRM Mobile app often includes its signature in the User-Agent
            if (
                !$platform &&
                !empty($_SERVER['HTTP_USER_AGENT']) &&
                stripos($_SERVER['HTTP_USER_AGENT'], 'SugarCRM Mobile') !== false
            ) {
                $platform = 'mobile';
            }
    
            // Default to 'base' if nothing is found
            return trim($platform ?: 'base');
        }
    
        public static function getJSEvaluate()
        {
            // Client side: used only in Studio previews
            return <<<JS
                return "base";
            JS;
        }
    
        public static function getOperationName()
        {
            return ['currentUserPlatform'];
        }
    
        public static function getParameterTypes()
        {
            return [];
        }
    
        public static function getParamCount()
        {
            return 0;
        }
    }
    


    2 - Run Repairs and Clear Cache 

    Go to Admin → Repair → Quick Repair and Rebuild and Repair Sugar Logic Functions. 
    Clear the cache of your browser to make sure it loads the new function 

    3  - In Studio, you should now be able so see the new function in the formula picker 


    4 - Add the desired formula to the field that you need.

    Here’s a simple example that sets the platform only when the record is first created,
    preventing it from being overwritten on edits:


    ifElse(equal($description,""),currentUserPlatform(),$description)


    I've added in the description filed and now it's showing the platform that was used on creation: 




    I’ve done limited testing, so please validate it in your environment to ensure it behaves as expected

    Let me know if this is what you are looking for and if it works for you. 


    Cheers, 

    André 



  • Thank you!
    But we are on Sell, and to do this we'll need to talk to our partner.

Reply Children
  • Hello  , 

    If you have access to the Module Loader, you can try adding this custom file yourself as a learning exercise or to explore how it works in a test instance. 

    You can refer to this document for guidance on how to create a Module Loader package that copies files into your instance. I’ve also attached the package I used for my own testing.

    That said, since you’re already working with a Sugar partner, I strongly recommend having them review the package before installing it in any production environment—just to make sure it’s fully compatible with your existing customisations and setup.

    CustomSugarLogicFuncion.zip

    Cheers,

    André