Jump to content


Member Since 14 Jun 2017
Offline Last Active May 17 2019 04:09 AM

Topics I've Started

Creating "dynamic tags" - help

13 March 2019 - 01:52 AM

Morning all 


I have a question about creating "dynamic tags" through a workflow.


In essence what I am trying to do is the following   


Workflow ABC = Change Record (trigger) - Condition  - yes - add a tag  but instead of specifying a static tag name I want to to use a field name #{c_fieldname}   


The situation is that we have various developments and as a Tenant gets "approved" (the trigger) a tag is issued using a "dynamic tag"  and that Contact is then added into a Contact list that will dynamically ad matching  #{c_field name}


Or are there easier ways to do this, bear in mind that the "add to list" and "remove from list" do not work in workflow 



thanking you in advance    

Shutting down of legacy Google+ APIs

04 March 2019 - 10:52 PM

Hello all


I have had several emails discussing the  shutting down the legacy Google+ APIs  


can we expect any issues regarding these changes ?








"Hello Google+ Developer,

The email below contains your most recent usage of Google+ APIs. It also contains information about important, recent changes to aspects of the shutdown. These changes may help mitigate the impact of the shutdown for some developers. This is the final email that will be sent about this shutdown.

What do I need to know?

On March 7, 2019, we are shutting down the legacy Google+ APIs. This has been a progressive shutdown where calls to affected APIs began intermittently failing on January 28, 2019.

What recent changes were made to the shutdown?

Some APIs labelled "Google+" provide access to basic account information that is critical to sign-in use cases, including for many third-party apps and sites. To help mitigate the impact of the Google+ APIs shutdown on the sign-in use cases, we have created a new implementation of several people.get and people.getOpenIdConnect APIs that will only return basic fields necessary for sign-in functionality such as name and email address, if authorized by the user. The new implementation only allows an app to retrieve the profile of the signed-in user, and can return only basic profile fields necessary for user sign-in functionality.

While we still recommend that developers migrate to alternative APIs such as Google Sign-in and Google People API, for cases where developers are unable to move over before March 7, existing calls made to the legacy Google+ people.get and people.getOpenIdConnect APIs will automatically be served by this new implementation.

Likewise, requests for some OAuth scopes will no longer fail as previously communicated. In most cases scope requests such as those used for sign-in and usage not related to Google+ will no longer return an error as previously communicated. However, other scopes that authorized access to Google+ data such as Circle and Stream information will still no longer be granted. See the full outline of scope behavior here. While we strongly encourage developers to migrate to Google Sign-in, for cases where developers are unable to move over before March 7, scopes required for Google+ Sign-in will now be remapped to existing Google Sign-in (not Google+) scopes, which should allow these legacy applications to continue to use Google+ Sign-In until they can migrate.

See here for full details, including information if you would like to test your application.

What do I need to do?

Please review your projects listed below by March 7, 2019 and ensure they are no longer using affected Google+ APIs. The data below shows which Google+ API methods your projects have recently called, as well as Google+ OAuth scopes it has requested.


  • If you see API calls to people.get, these can be the result of using the Google+ Sign-In feature in your application, which is now fully deprecated and is being shut down. Developers should migrate from the Google+ Sign-In feature to the more comprehensive Google Sign-in authentication system.
  • You may see OAuth requests for plus.me, even if your project is not requesting this scope directly. You only need to remove such requests if your project is directly requesting this scope.


Google+ API Name


Anything else to know?

Google+ integrations for web or mobile apps are also being shut down. Please see this additional notice.

Thanks for being a valued Google+ Developer.


The Google+ API team

Was this information helpful?


© 2019 Google LLC 1600 Amphitheatre Parkway, Mountain View, CA 94043

You have received this mandatory service announcement to update you about important changes to Google services you use."

Known Issues with ver 7.1 upgrade

21 February 2019 - 05:53 AM

Hello Folks  


Please contribute hereto,  with know issues running X2Crm 7.1.



1) Workflow issues:


    1.1)  When adding or removing/contacts to List as a result of a Record Update   The  lookups to add to and remove from Lists ... "Start typing to suggest...."  link or association is broken



2) Incoming Email replies in Contacts  shows as sent from the the X2 users and not the contact - as per Eric 

Double post please delete

18 February 2019 - 10:42 PM

Double post 

X2CRM 7.1 & PHP 7.1/2 workflow error - Solved

18 February 2019 - 10:42 PM

Hi Folks 


I need help from the Workflow fundies please


When  set up my workflow that does various basic arithmetic calculations using PHP 5.4.16  much like basic Excel  i.e.  Field name 3  = ({c_fieldname1} * {c_fieldname2}) 


When using PHP 7.1 or 7.2


I get the following error and I can don't understand why.... surly PHP 7 X should be backward compatible   and the flow log for this transaction does not display anything- no popup window 


Error Code: 500
Error Message: syntax error, unexpected '*'
Stack Trace: 
[click to toggle display]

ParseError in /home/x2/public_html/x2engine/protected/components/Formatter.php(198) : eval()'d code(1)
#0 /home/x2/public_html/x2engine/protected/components/x2flow/actions/X2FlowAction.php(158): Formatter::parseFormula('= ({c_extrent2}...', Array)
#1 /home/x2/public_html/x2engine/protected/components/x2flow/actions/X2FlowRecordUpdate.php(86): X2FlowAction->setModelAttributes(Object(Tenant), Array, Array)
#2 /home/x2/public_html/x2engine/protected/models/X2Flow.php(590): X2FlowRecordUpdate->execute(Array, '3667', Object(X2Flow))
#3 /home/x2/public_html/x2engine/protected/models/X2Flow.php(579): X2Flow->validateAndExecute(Array, Object(X2FlowRecordUpdate), Array, '3667', '4')
#4 /home/x2/public_html/x2engine/protected/models/X2Flow.php(540): X2Flow->executeBranch(Array, Array, '3667', '4')
#5 /home/x2/public_html/x2engine/protected/models/X2Flow.php(559): X2Flow->executeBranch(Array, Array, '3667', '4')
#6 /home/x2/public_html/x2engine/protected/models/X2Flow.php(559): X2Flow->executeBranch(Array, Array, '3667', '4')
#7 /home/x2/public_html/x2engine/protected/models/X2Flow.php(540): X2Flow->executeBranch(Array, Array, '3667', '4')
#8 /home/x2/public_html/x2engine/protected/models/X2Flow.php(698): X2Flow->executeBranch(Array, Array, '3667', '4')
#9 /home/x2/public_html/x2engine/protected/models/X2Flow.php(304): X2Flow::_executeFlow(Object(X2Flow), Array, NULL, '3667')
#10 /home/x2/public_html/x2engine/protected/components/behaviors/FlowTriggerBehavior.php(75): X2Flow::trigger('RecordUpdateTri...', Array)
#11 /home/x2/public_html/x2engine/framework/base/CComponent.php(561): FlowTriggerBehavior->afterUpdate(Object(CEvent))
#12 /home/x2/public_html/x2engine/protected/models/X2Model.php(830): CComponent->raiseEvent('onafterupdate', Object(CEvent))
#13 /home/x2/public_html/x2engine/protected/models/X2Model.php(841): X2Model->onAfterUpdate(Object(CEvent))
#14 /home/x2/public_html/x2engine/protected/models/X2Model.php(928): X2Model->afterUpdate()
#15 /home/x2/public_html/x2engine/framework/db/ar/CActiveRecord.php(1132): X2Model->afterSave()
#16 /home/x2/public_html/x2engine/protected/models/X2Model.php(903): CActiveRecord->update(NULL)
#17 /home/x2/public_html/x2engine/protected/controllers/x2base.php(462): X2Model->save()
#18 /home/x2/public_html/x2engine/protected/modules/tenant/controllers/TenantController.php(119): x2base->update(Object(Tenant), Array, '0')
#19 [internal function]: TenantController->actionUpdate('29')
#20 /home/x2/public_html/x2engine/framework/web/actions/CAction.php(109): ReflectionMethod->invokeArgs(Object(TenantController), Array)
#21 /home/x2/public_html/x2engine/framework/web/actions/CInlineAction.php(47): CAction->runWithParamsInternal(Object(TenantController), Object(ReflectionMethod), Array)
#22 /home/x2/public_html/x2engine/framework/web/CController.php(308): CInlineAction->runWithParams(Array)
#23 /home/x2/public_html/x2engine/framework/web/filters/CFilterChain.php(134): CController->runAction(Object(CInlineAction))
#24 /home/x2/public_html/x2engine/protected/controllers/x2base.php(581): CFilterChain->run()
#25 /home/x2/public_html/x2engine/framework/web/filters/CInlineFilter.php(58): x2base->filterSetPortlets(Object(CFilterChain))
#26 /home/x2/public_html/x2engine/framework/web/filters/CFilterChain.php(131): CInlineFilter->filter(Object(CFilterChain))
#27 /home/x2/public_html/x2engine/framework/web/filters/CFilter.php(40): CFilterChain->run()
#28 /home/x2/public_html/x2engine/framework/web/filters/CFilterChain.php(131): CFilter->filter(Object(CFilterChain))
#29 /home/x2/public_html/x2engine/framework/web/filters/CFilter.php(40): CFilterChain->run()
#30 /home/x2/public_html/x2engine/framework/web/filters/CFilterChain.php(131): CFilter->filter(Object(CFilterChain))
#31 /home/x2/public_html/x2engine/framework/web/CController.php(291): CFilterChain->run()
#32 /home/x2/public_html/x2engine/framework/web/CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#33 /home/x2/public_html/x2engine/framework/web/CWebApplication.php(282): CController->run('update')
#34 /home/x2/public_html/x2engine/protected/components/X2WebApplication.php(65): CWebApplication->runController('tenant/tenant/u...')
#35 /home/x2/public_html/x2engine/framework/base/CApplication.php(185): X2WebApplication->processRequest()
#36 /home/x2/public_html/x2engine/index.php(67): CApplication->run()
#37 {main}

X2Engine Version: 7.1
PHP Version: 7.2.10