7.17
Sales_Creatio_enterprise_edition

Hello,

I made an external script that create Leads with oData.

It works fine, each new Lead has an associated  email activity object.

 

The problem is about rights : users can not see the email activity.

The "API" user that create Leads belong to a special group of users, so I tried to delegate read rights of  the Activity object, without success.

 

What to do next, please ?

 

best regards,

Patrice

Like 0

Like

4 comments

Hello Patrice,

 

You can try to distribute access rights by means of the business process after you create records but this is not the perfect scenario. 

It is still better to understand how to distribute access rights right after the records are created and for that please, provide more details on the process. In particular, the connection between Lead and Emal is not very clear. You create Lead by means of API and when and how do you create Activity?

Thank you for the clarification!

 

Best regards, 

Bogdan

hello Bogdan,

thanks for your reply.

Both Lead and email activity are created with the API.

 

best regards

Patrice

Patrice Vigouroux,

 

In this case, you can solve that task by means of the Business Process that will distribute access right for the newly created records of the Activity object. The process should be triggered after a new record (Activity) is added.

 

Best regards,

Bogdan S.

Bogdan Spasibov,

 

 thanks Bogdan, i will try it soon !

Show all comments
Business Process
open edit page
ProcessElement
7.16
Sales_Creatio_enterprise_edition

Hi Community,

I've some questions about using this business process element "Open Edit Page".

Is it possible to use this element without creating activities behind it? 

I would like to use this element in my process everytime I cancel or create a new record. Is it possible to open a new record page without creating a new activity? 

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

 

Like 3

Like

3 comments
Best reply

Hi Pedro,

The only other way to achieve this that comes to mind is to add a script task in your process to send a message for the user back to the client. You can see how to do that here: https://customerfx.com/article/sending-a-message-from-server-side-c-to-…

Then, in the client, you'd have to listen for that message, check to see if it is for the current user and then navigate to the record: https://customerfx.com/article/programmatically-navigating-to-a-page-in…

In order for that to work, you'd have to add your code in the client to something that is available in all pages, so you'd add it to something like MainHeaderSchema.

Ryan 

Hi Pedro,

 

Records created in the CTI-panel upon calling the "Open edit page" element are system records and disabling these system records creation is not possible in the current application logic. But we will ask our R&D team so they could add this functionality as an improvement into their functionality development roadmap.

 

Thank you for helping us to make our application better!

 

Best regards.

Oscar

Hi Pedro,

The only other way to achieve this that comes to mind is to add a script task in your process to send a message for the user back to the client. You can see how to do that here: https://customerfx.com/article/sending-a-message-from-server-side-c-to-…

Then, in the client, you'd have to listen for that message, check to see if it is for the current user and then navigate to the record: https://customerfx.com/article/programmatically-navigating-to-a-page-in…

In order for that to work, you'd have to add your code in the client to something that is available in all pages, so you'd add it to something like MainHeaderSchema.

Ryan 

Ryan Farley,

I've tried implementing your solution and it worked. Thank you.

 

Best Regards,

Pedro Pinheiro

Show all comments
Business Process
Run Process
Collections
Client-side
7.16
Sales_Creatio_enterprise_edition

Hi Community,

 

I have this situation where I need to excute some process through client side. While executing this process I want to pass a collection of ids to one of the process parameters. These ids are the Quotes that I multi-selected in the image bellow.

Pressing the  "Merge Quote" button will execute the following code.

This code will create a new collection with all the ids selected before and send them to my process. The next image shows the collection created.

I want to know which type of data should I use for my parameter in my process for this type of collection, where can I learn more about these types of collections and its methods and how can I access its values with the various process tasks?

 

For tests purposes I want to display one of the ids using a "Open Popup Window". 

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro.

Like 1

Like

1 comments

Hello Pedro,

 

Creatio works with collections if it's needed to process such data but not to display it. You can pass items to sub_process or web_service elements or perform some script_task over it. Please refer to https://academy.creatio.com/docs/user/bpm_tools/business_process_setup/process_collections where this process is described.

 

In case if you want to work with the result of your script that returns a collection as described in your example,  you need to write it in a text string with ";" separator for Id's and then - split it on the next step to parse Id's and reflect them where you want.

 

Best regards,

Bogdan

Show all comments
7.14
Sales_Creatio_enterprise_edition

Dear community,

Using FileApiService, we are able to rename the attachment. This posses a challenge because an attacker can upload any malicious file, even though we have a logic to allow only certain file types to get uploaded.

 

For example, ABC.bat can be renamed as ABC.txt. After uploading this file, the attacker can change the name of file to ABC.bat.

 

We have locked the fields of attchment detail on UI, but it is not much of help if the file is renamed through FileApiService.

 

Any method to restrict renaming using this API would be appreciated.

 

Thanks

 

Like 0

Like

4 comments

Hello Shivani,

 

Unfortunately, there are no methods available that can restrict file renaming. But we are planning to release the filter that will check the file extension directly from the file and not from its name. As a result, there won't be a possibility of changing the filly type by means of renaming.

We will post that information in Release Notes as soon as the feature will be added to the product.

 

Best regards,

Bogdan

Bogdan Spasibov,

 

Thanks Bogdan. Also now that you have mentioned about using file signatures (please correct me if I am wrong), I am curious to know how text and csv files can be checked. The challenge we have with our custom logic to allow only 'whitelisted' file types is that csv and txt files do not have file sigfnatures. Is there a way to verify that the attached file is really csv or txt and not a disguise?

 

Thanks

Shivani Lakshman,

 

We confirmed the information with R&D regarding your request and unfortunately, it's not possible to verify the real extension of the file if it is not specified in the file signature. In this case, the application checks the extension.

 

Best regards,

Bogdan S.

Bogdan Spasibov,

Thanks Bogdan. A possible solution would be to restrict file name change. Once file is uploaded, name change can be prohibited. Hence, a file ABC.bat that has been renamed to ABC.txt to pass filter, can never be renamed to ABC.bat :)

Show all comments
7.16
Sales_Creatio_enterprise_edition

hello Community,

in a process, I'm trying to associate a SocialChannel to a SocialMessage (in an ESNNotification).

The goal is to notify users who subscribed to a socialChannel, when a new message is created.

There is no field related to socialChannel in SocialMessage Entity, so i guess this must use associative table.

I could not figure how it work yet..

Maybe someone can help me figuring things ?

best regards

Patrice

Like 0

Like

2 comments

Hello, Patrice, 

 

there is OOB business process that sends a notification to users when a new comment is posted or a user mention added: ESNNotificationProcess.

Maybe it will fit your need?

 

Best regards,

Daria

Daria Zigulya,

Hello Daria,

thanks for the answer,

i will try to do something with that notification mecanism, it may be good enough.



best regards

Patrice

Show all comments
call
process
outgoing
7.16
Sales_Creatio_enterprise_edition

Dear mates,

I build a process for new calls but it did not launch when a new call is add into the database:

It looks like my problem:

https://community.creatio.com/questions/open-call-page-after-call

#SR-0898365

Thank you,

Nicolas

Like 0

Like

3 comments

Hello,

 

I've created the process with similar signal. It works fine and the process is launched:

Most likely your created call doesn't satisfy your signal conditions. Try to disable the filter and see if the process launches or make sure the call record satisfies it.

 

Regards,

Dean

Hello Dean,

 

I did.

In my "Appel sortant: enregistrer les données du Lead dans l'appel" process:

I just let the outgoing filter.

 

The record is well add to the object:

But the process has not been launched:

An idea ?

Thank you Dean,

Nicolas

 

Hi Nicolas,

 

The settings seem to be fine and the process should have launched the process. What I suggest is to try is to disable the background execution in the signal settings. If this cannot help - try to re-add the signal completely. If still no success - it is necessary to investigate the trigger on the database level. In this case it is better to  approach the support team. I'm afraid it might necessary to have a closer look to the website, rather than trying to guess the possible solution.

 

Regards,

Dean

Show all comments
soap
configurationservice
service
7.16
Sales_Creatio_enterprise_edition

Hi community,

 

We have this situation where we need to create a bi-directional connection with our customer platform, using SOAP protocol. We would like to know if its possible to create a SOAP based services in Creatio to be accessed by our customer? If yes, any information on how to implement this?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Like 0

Like

10 comments

Hello Pedro,

 

You need to develop a configuration service (either regular or anonymous) using SOAP. Here is the article that describes how to configure web-services and integrate them into the Creatio app.

 

For example:

1) Create a source code for the service contract SPMSUBPServiceContract:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SPMSUBPService
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        SPMClientInfoResponse SPMClientInfo(string Login);
    }
 
    [DataContract]
    public class SPMClientInfoResponse
    {
        bool success = true;
        string errorText = "";
 
        [DataMember]
        public bool Success
        {
            get { return success; }
            set { success = value; }
        }
 
        [DataMember]
        public string ErrorText
        {
            get { return errorText; }
            set { errorText = value; }
        }
    }
}

and the source code of the SPMSUBPService service directly:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
 
namespace SPMSUBPService
{
    public class SPMSUBPService : IService
    {
        public SPMClientInfoResponse SPMClientInfo(string Login)
        {
            return new SPMClientInfoResponse();
        }
    }
}

2) Create a file with SPMSUBPService.svc name in the Terrasoft.WebApp\ServiceModel folder with the following text:

 

<%@ ServiceHost Language="C#" Debug="true" Service="SPMSUBPService.SPMSUBPService" Factory="System.ServiceModel.Activation.ServiceHostFactory" %>

 

3) Add the description of the service to the Terrasoft.WebApp\ServiceModel\http\services.config file:

<services>
    ...
    <service behaviorConfiguration="BaseServiceBehavior" name="SPMSUBPService.SPMSUBPService">
        <endpoint name="SPMSUBPServiceEndPoint"
            binding="webHttpBinding"
            behaviorConfiguration="RestServiceBehavior"
            bindingNamespace="http://Terrasoft.WebApp.ServiceModel"
            contract="SPMSUBPService.IService" />
        <endpoint address="soap" binding="basicHttpBinding" contract="SPMSUBPService.IService"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
    ...
</services>

4) Modify the Terrasoft.WebApp\Web.config file:

...
<location path="ServiceModel/SPMSUBPService.svc">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
</location>
...

And everything is ready, the service is accessible via /0/ServiceModel/SPMSUBPService.svc and the WSDL as well /0/ServiceModel/SPMSUBPService.svc?singleWsdl

 

Best regards,

Oscar

Oscar Dylan,

 

Thank you for your response.

 

I've tried to implement the solution you provided above and I'm getting this error when sending a request through both Postman and SoapUI.

Can you please tell me what this error means and how can I fix it?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

 

Hi Pedro Pinheiro,

Did you got the WSDL file. For me it is showing 404 not found error if I try to access that url.

Also how can we know the what input format to pass parameters to method. Can you share those details here.

 

Thanks in advance.

Regards,

Manideep.

Hi Korni Manideep Reddy,

 

We manage to make this service working, but since it was a long time ago we don't have the specific steps to fix the error.

 

However,  we have the updated steps that we use in order to make the service available. Maybe if you go through these following steps  you could fix your problem.

 

Note: These steps only work for .Net Framework instances.

 

1. Create a new file called “DemoServiceName.svc" in ..\Terrasoft.WebApp\ServiceModel folder, and add this line:

 

<%@ ServiceHost Language="C#" Debug="true" Service="Terrasoft.Configuration.DemoServiceNameSpace.DemoServiceName” Factory="System.ServiceModel.Activation.ServiceHostFactory" %>

 

2. Add the following configuration to the ..\Terrasoft.WebApp\web.config file:

 

<configuration>

  ...

  <location path="ServiceModel/DemoServiceName.svc">

    <system.web>

      <authorization>

        <allow users="*" />

      </authorization>

    </system.web>

  </location>

  ...

  <appSettings>

    ...

    <add key="AllowedLocations" value="https://yourwebsitedomain.creatio.com/0/;ServiceModel/DemoServiceName.s…"  />

    ...

  </appSettings>

  ...

</configuration>

 

3. Add the following service to the ..\Terrasoft.WebApp\ServiceModel\https\services.config file:

 

    <service behaviorConfiguration="BaseServiceBehavior" name="Terrasoft.Configuration.DemoServiceNameSpace.DemoServiceName">

        <endpoint name=“DemoServiceNameEndpoint" address="" binding="webHttpBinding" behaviorConfiguration="RestServiceBehavior" bindingNamespace="http://Terrasoft.WebApp.ServiceModel" contract="Terrasoft.Configuration.DemoServiceNameSpace.IDemoServiceNameRest" />

        <endpoint address="soap/demoservicename” binding="basicHttpBinding" contract="Terrasoft.Configuration.DemoServiceNameSpace.IDemoServiceNameSoap"/>

    </service>

 

4. Add the following service to the ..\Terrasoft.WebApp\ServiceModel\http\services.config file:

 

    <service behaviorConfiguration="BaseServiceBehavior" name="Terrasoft.Configuration.DemoServiceNameSpace.DemoServiceName">

 

        <endpoint name="DemoServiceNameEndpoint" address="" binding="webHttpBinding" behaviorConfiguration="RestServiceBehavior" bindingNamespace="http://Terrasoft.WebApp.ServiceModel" contract="Terrasoft.Configuration.DemoServiceNameSpace.IDemoServiceNameRest" />

 

        <endpoint address="soap/demoservicename" binding="basicHttpBinding" contract="Terrasoft.Configuration.DemoServiceNameSpace.IDemoServiceNameSoap"/>

 

    </service>

 

5. In the ..\Terrasoft.WebApp\ServiceModel\https\bindings.config file we need to change the basicHttpBinding to:

 

<basicHttpBinding>

        <binding maxReceivedMessageSize="10485760">

            <readerQuotas maxDepth="32" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="10485760"/>

            <security mode="Transport">

                <transport clientCredentialType="None" />

            </security>

        </binding>

        <binding name="ReportServiceBinding">

            <security mode="Transport">

                <transport clientCredentialType="None" />

            </security>

        </binding>

</basicHttpBinding>

 

 

6. In the ..\Terrasoft.WebApp\ServiceModel\http\bindings.config file we need to change the basicHttpBinding to:

 

<basicHttpBinding>

    <binding maxReceivedMessageSize="10485760">

        <readerQuotas maxDepth="32" maxStringContentLength="10485760" maxArrayLength="10485760" maxBytesPerRead="10485760"/>

        <security mode="Transport">

            <transport clientCredentialType="None" />

        </security>

    </binding>

    <binding name="ReportServiceBinding" />

</basicHttpBinding>

 

After all of this changes are made the application needs to be restarted.

 

About the input format of the method, we used a CustomObject and CustomResponse which we define using the DataContract attribute.

 

        public class DemoServiceName: IDemoServiceNameRest, IDemoServiceNameSoap {
             //This service needs to be anonymous.
             //Implement Methods here. you don't need to define WebInvoke here.
        }

        [ServiceContract]
		public interface IDemoServiceNameSoap
		{
           	[OperationContract]
		    CustomResponse MethodNameSoap(CustomObject cobject);  
		}
	    
	    
		[ServiceContract]
		public interface IDemoServiceNameRest
		{
          	[OperationContract]
			[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
		    CustomResponse MethodNameRest(CustomObject cobject);
		}




 

Hope this helps solving your issue.

 

Best Regards,

Pedro Pinheiro

 

 

 

Hi Pedro Pinheiro,

I have tried above configuration settings But I am still not able to set  soap service. I am getting 500 ServiceActivationException.

 

Rakshith Dheer Reddy,

 

What is the error description you receive when trying to access "http://localhost:83/0/ServiceModel/SoapTestService.svc" through a browser?

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

We are getting this error from the browser. 

Hi Pedro Pinheiro,

In Postman, I am getting 500 error with ActionNotSupported.

Hi Kumaran K,

 

Sorry, I forgot to mention that you need to add the service behavior for the metadata. This can be done with the following steps:

 

1. In the ..\Terrasoft.WebApp\ServiceModel\https\behaviors.config file we need to set the httpsGetEnabled to true on both behaviors:

 

<serviceBehaviors>

...

              <behavior name="BaseServiceBehavior">

                       ...

                       <serviceMetadata httpsGetEnabled="true" />

                       ...

              </behavior>

             <behavior name="RestServiceBehavior">

                       ...

                       <serviceMetadata httpsGetEnabled="true" />

                       ...

             </behavior>

...

</serviceBehaviors>

 

2. In the ..\Terrasoft.WebApp\ServiceModel\http\behaviors.config file we need to set the httpGetEnabled to true on both behaviors:

 

<serviceBehaviors>

...

              <behavior name="BaseServiceBehavior">

                       ...

                       <serviceMetadata httpGetEnabled="true" />

                       ...

              </behavior>

             <behavior name="RestServiceBehavior">

                       ...

                       <serviceMetadata httpGetEnabled="true" />

                       ...

             </behavior>

...</serviceBehaviors>



Hope this helps.

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

Thank you, Pedro.

The soap service is working.

Show all comments
Business Process
message
Opportunity
section
7.16
Sales_Creatio_enterprise_edition

Hi community,

 

I've this situation where I need to refresh my Opportunity Section right after I save my mini page when creating a new Opportunity.

Since some of the values are calculated during this "save" operation using a business process, I've tried to send a message to my Opportunity  Section page, using the same process. But the main problem happens when two or more users are in the Opportunity Section page those pages (Opportunity Section of each user) are refreshed. Is there any solution to refresh the page of only one user (the user that created the new Opportunity)?

 

Thanks in Advance.

 

Best Regards,

Pedro Pinheiro

Like 1

Like

3 comments
Best reply

Hello Pedro,

To reload/refresh a section list, you can use:

this.updateSection();

As far as sending a message for only the current user, you can use the ServerChannel to send a message from a process and include the user Id of who created the opportunity in the message, then check that value with the current user when received on the client.

Info on sending a message from server to client: https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

Info on getting current user: https://customerfx.com/article/getting-the-current-user-in-bpmonline/

Ryan

Hello Pedro,

To reload/refresh a section list, you can use:

this.updateSection();

As far as sending a message for only the current user, you can use the ServerChannel to send a message from a process and include the user Id of who created the opportunity in the message, then check that value with the current user when received on the client.

Info on sending a message from server to client: https://customerfx.com/article/how-to-refresh-a-page-from-a-process-in-…

Info on getting current user: https://customerfx.com/article/getting-the-current-user-in-bpmonline/

Ryan

I've also written up a more detailed description of the ways to refresh a section, or parts of a section, here: https://customerfx.com/article/refreshing-a-section-list-in-creatio/

Ryan

Ryan Farley,

Thanks for the response, your solution fixed our problem.

 

Best Regards,

Pedro Pinheiro

Show all comments

Hello everyone,

 

In the TIMELINE or the HISTORY of the LEADS part we don't see the phone calls while in the account or contact part it works.

 

Could you help me to set up this section?

 

Thank you in advance.

Best regards.

Like 1

Like

5 comments

Hi Antoine,



Could you please clarify if there's no information in the Leads section regarding the call with the same contact connected to the lead, which has it in the Contacts section?



Is it all empty here?



Also what is the version and product of the instance you use?



Thank you.

Hello Bohdan,

 

Thank you for your answers

 

We use the Sales Creatio, enterprise edition 7.16.4.1731.

Here is an example of a LEADS sheet:

 

 

Hi Antoine, 



To display the information regarding phone calls on the lead edit page you should go to the timeline tab and choose "Calls" option from the dropdown menu as it is shown on the screenshot attached:

 

Thank you for choosing Creatio!

Bohdan Zdor,

Hi Bohdan,

 

Thank you for your answers.

The choice calls is well selected in the drop-down list.

 

Best regards.

 

 

 

Hello Antoine CIEUTAT,

 

We kindly ask you to contact our Technical support team at support@creatio.com with a detailed description of your issue. We would be happy to take a closer look at the issue and provide you with a proper solution. 

 

Thank you in advance!

Olga. 

Show all comments

Dear,

We currently have some timeout error while a Creatio webservice execution.

However, the json order is well received by our server.

I tryed to increase the timeout in the setting panel (120000) but we still have the error currently.

 

System.Net.WebException: The operation has timed out.

   at Terrasoft.Services.Runtime.ServiceClient.d__7.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

   at Terrasoft.Services.Runtime.ServiceClient.Execute(IServiceClientRequest request, TimeSpan timeout, CancellationToken cancellationToken)

   at Terrasoft.Services.WebServiceUserTaskImplementation.Execute(ProcessWebService userTask, ProcessExecutingContext context)

   at Terrasoft.Core.Process.ProcessActivity.ExecuteElement(ProcessExecutingContext context)

   at Terrasoft.Core.Process.ProcessActivity.ExecuteItem(ProcessExecutingContext context)

   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

 

Like 0

Like

5 comments

Hello Nicolas,

 

Can you please check if your IIS can see the host where your custom Webservice logic is stored and vice versa? Also do you receive any other messages in application logs?

 

Best regards,

Oscar

Hello Dylan,

This morning i allready had 4 webservices errors:

 

 

Our Platform host is Amazon. 

 

 

The system said "The operation has timed out." but it had reach and send json data to our server and the action is the final one in the process:

 

 

i can not find more informations...

 

Thank you

 

Nicolas,

 

Can you please increase the execution timeout for calling a web-service to 1 minute for example? And also please specify which version of the application do you use? In case its 7.16.4 can you go to the Terrasoft\Web.config file, find the 

Feature-EnableOAuth20Integration parameter and set the "false" value for it and restart the app after that?

 

Best regards,

Oscar

Oscar Dylan,

Oscar,

We are using 7.16.4, so the support has modified the Terrasoft\Web.config file and has restarted.

i did yesterday, the modification to the maximum execution timeout.

but we still have sometimes the error (2 timeout errors today)

Thank you Oscar !!!

it works !

Show all comments