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

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

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

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

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

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

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:

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

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

...
&lt;location path="ServiceModel/SPMSUBPService.svc"&gt;
    &lt;system.web&gt;
      &lt;authorization&gt;
        &lt;allow users="*" /&gt;
      &lt;/authorization&gt;
    &lt;/system.web&gt;
&lt;/location&gt;
...

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:

 

&lt;serviceBehaviors&gt;
 
...
 
              &lt;behavior name="BaseServiceBehavior"&gt;
 
                       ...
 
                       &lt;serviceMetadata httpsGetEnabled="true" /&gt;
 
                       ...
 
              &lt;/behavior&gt;
 
             &lt;behavior name="RestServiceBehavior"&gt;
 
                       ...
 
                       &lt;serviceMetadata httpsGetEnabled="true" /&gt;
 
                       ...
 
             &lt;/behavior&gt;
 
...
 
&lt;/serviceBehaviors&gt;

 

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

 

&lt;serviceBehaviors&gt;
 
...
 
              &lt;behavior name="BaseServiceBehavior"&gt;
 
                       ...
 
                       &lt;serviceMetadata httpGetEnabled="true" /&gt;
 
                       ...
 
              &lt;/behavior&gt;
 
             &lt;behavior name="RestServiceBehavior"&gt;
 
                       ...
 
                       &lt;serviceMetadata httpGetEnabled="true" /&gt;
 
                       ...
 
             &lt;/behavior&gt;
 
...&lt;/serviceBehaviors&gt;



Hope this helps.

 

Best Regards,

Pedro Pinheiro

Pedro Pinheiro,

Thank you, Pedro.

The soap service is working.

Show all comments

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

Dear,

When i try to add a specific email address, the system return me the following error:

"This account allready exist. Modifiy email address and try again".

But the email address is not in the list, may be it has been added and delete next, but the email address is not in the creatio email list anymore.

How can i solve this issue please,

Thanks,

Nicolas

Like 0

Like

1 comments

Hello Nicolas,

 

Hope you're doing well.

 

If you are trying to add a new mailbox to the system and you have received the notification which you have mentioned before, it can mean that possibly the other user has already added this email to the system under its own profile. You can check the absence of the needed email by running the next query in your DB:

 

select * from MailboxSyncSettings

 

This query will show you the list of the already connected mailboxes. There you also can check who is the owner of the mailbox by the "SysAdminUnitId" column via the next query:

 

select * from SysAdminUnit where Id='SysAdminUnitId_value_for_the_needed_record'

 

In case when the needed mailbox was already added by other user, you can ask this user to set the shared mailbox (more information about this you can find in this article) if it fits your business tasks or log in under this user and delete the mailbox.

 

Also, you can delete the mailbox from the database using SQL Studio if the instance is on-site or by using SQL Executor if it is a cloud environment. At the same time we do not recommend to delete mailboxes from the application using other way than standard delete procedure from system user profile.

 

Best regards,

Roman

Show all comments

Hi,

I would like to add the payment status data within the Financial Indicators tab of the Project detail pages. This will allow our team to easily see information that can help them determine correct responses.

The Opportunity is connected to a Project and the Order, but when I add a 'New Detail' to the Financial Indicators with the following settings, I get no output:

  • Detail - Orders
  • Detail Column - Opportunities
  • Object Column - ID

I have tried other variations, but so far no output. I would be thankful for any guidance on how I can show the following information on this Financial Indicators tab:

Order Number       Payment Status

 

thanks

 

Mark

Like 0

Like

3 comments

Dear Mark,

 

Detail setup has the following logic: 

"Detail" is the name of the detail in the system.

"Caption on the page" is how it will be named on the page.

"Detail column" is an object in your detail that is equal to the current record. If you are adding Contact detail to accounts then you select Account as detail column since each contact has an account and you will see all contacts with Account = Current record when you open this detail. 

"Object column" is a column that specifies what will be shown in detail. Usually, it is ID of the connected record. 

 

Try to apply similar logic to your architecture to see which field to use as "Detail column" - maybe it is missing in the object? 

 

Best regards,

Angela

Hi Angela

 

Thanks for your reply. I have not been able to identify the correct combination to use so far.

 

As the Order is not directly connected to a Project, instead each are connected to the same Opportunity, I concentrated on trying both of these as the Detail, but no success so far.

 

thanks

 

Mark

Mark Roberts,

Then you need to check that records added to detail have needed columns. So that when you add a new record into detail Project, the project must have the same opportunity as in Order. Thy to add Opportunity field in detail to track if is added or not. 

 

Best regards,

Angela

Show all comments