Hi. I am getting the this error :

When I compile the script task:

What is missing ? Please help.

Like 0

Like

4 comments

IIRC the DataValueType param expected here isn't an enum. Try changing the code to add this:

var dataValueTypeManager = (DataValueTypeManager)userConnection.AppManagerProvider.GetManager("DataValueTypeManager");
var textDataValueType = (TextDataValueType)dataValueTypeManager.GetInstanceByName("Text");

 

Then use:

storedProcedure.WithOutputParameter("res_msg", textDataValueType);

Ryan

Ryan Farley,

Thanks. Now it runs.

But sorry, I still need some help on recovering the output prm from the stored procedure. It always returns "Core.DB.QueryParameter", instead of the string returned by the SP.

 

Ricardo Bigio,

You can capture that using this:

var resultParameter = (string)storedProcedure.Parameters.FindByName("res_msg").Value;

Ryan

Perfect. Thanks

Show all comments

Hello Community!

 

I would like to know if there is posible to send a attachment like byte[] or blob throw the web service element for a business process.

 

Thanks,

 

Like 0

Like

2 comments

Hi Federico, 

 

There are no precise restrictions on byte[] or blob attachments; however, could you please specify your business task so we could understand how to implement it better?

 

Regards,

Anastasiia

Hi Anastassia. 

 

I need to send the "Data" field to a webservice post. I have the webservice added for use with the element, but can't find the correct parameter to send my file like byte[] from the business process.

 

This is my request in CURL

 

curl --location --request POST 'https://test/upload' \

--header 'Content-Type: multipart/form-data' \

--header 'Authorization: {{api-key}}' \

--form 'file=@test.pdf' \ //Need to be application type/pdf

--form 'summary='descripción del documento' \

 

Show all comments

How can I display the Contact field and the Contacts Address fields in one view while in the Contact Section?

Like 1

Like

13 comments
Best reply

Hi Theresa,

 

Here is how the settings look like:

 

 

Regards,

Dean

Hi Theresa,

 

You can use section column settings to add the required columns to the section view. Here is the guide with examples:

https://academy.creatio.com/documents/base/7-16/setting-columns

 

Regards,

Dean

Thank you but I can't find what field to choose for the Contact's Address when it's actually located in the Account.

 

Hi Theresa,

 

Here is the example of settings:

 

 

Regards,

Dean

 

Great thank you!  This is working for most of the contacts but there are some contacts that have an address different from the Primary Address in the Account. Some of our accounts have 5 different addresses and the contacts are located in different locations.

 

Hi Theresa,

 

Unfortunately it will not be possible to display all the addresses of the single account in the contact section list. As a workaround it is possible to create a list dashboard base on contact address object that will show you the contact, its account and the contact address.

 

Regards,

Dean

That's exactly what I need to do then is the workaround. One more question: How do I set up the Column for that? What fields am I choosing because I've been trying to find the Contact.Address with no luck.

 

Hi Theresa,

 

Here is how the settings look like:

 

 

Regards,

Dean

Thank you!  I'm so glad I asked;)

 

Does anyone know why a List created under Dashboard would list a contact more than once, provide no address for the ones that are listed twice and provide the wrong city that doesn't even exist in the Account?  See attachment.  Also, the contacts that are listed twice are NOT duplicates in our main contact list.

Hello,

 

The addresses are taken from the contact page. If there is an address with empty field - the dashboard will show you empty columns.

Also, the dashboard displays address per contact, so if there are couple of addresses on the contact page - you will see the address in the list and the related contact, so Address A - Contact A, Address B - Contact A and so on like this:

 

Regards,

Dean 

Thank you Dean!  I'm actually sending my issues over to the helpdesk now because we are seeing more errors than usual in this list.  The wrong City, but the correct address; when there's only one address in the Account, why is it showing the contact more than once.  Not sure what is going on or if we have special fields that were set up by our developer.  

Hi Theresa,

 

Sure, please approach to the support since it is better to have a closer look to the website to find out why you have some missing or redundant addresses in the list.

 

Regards,

Dean

I appreciate ALL your help.  I learned a lot!

Show all comments

I am unable to get the "replacing view model" option to work on 7.17 on the trial cloud with the most basic of custom cases. I am assuming that "replacing view model" on 7.17 replaces "replacing client module" on earlier versions. Please validate. Am I missing a step here? Any help here would be greatly appreciated.

 

Thanks in advance...

Like 0

Like

4 comments

Dear Amanthen,

 

You are correct. The titles are a bit changed in the new interface but it is the same as old "replacing client module".

 

Regards,

Dean

Dean Parrett,

Thanks for confirming Dean!

 

The problem is I am unable to get the replacing module logic to work on 7.17. The same logic seems to be working fine on 7.16. 

 

I have created a new trial instance and am creating a single replacing client module overriding the parent "communication panel schema" of "UiV2" package. Below is the custom code I have written, but it doesn't seem to work on 7.17. Am I missing a step here?

 

define("CommunicationPanel", [],
function() {
	return {
            methods: {
              init: function() {   
                window.console.log("Test");
                window.alert("Test");
                this.callParent(arguments);                
              }
            }
        };
    });

 

Hi Amanthena,

 

The latest update interface is available as the trial version for beta-testing only and may include some inaccuracy. Thank you for reporting! The issue is already fixed in the coming release. 

 

However, there is a workaround for replacing client module schema; please follow the previous configuration address to make the changes you need:

[your_website]/0/WorkspaceExplorerModule.aspx

 

Regards, 

Anastasiia

Anastasiia Markina,

Thank you Anastasiia!

Show all comments



Hello,

 

I've implemented a custom notification, but i've seen that there is one field : "unique caption ID" by this field I already know that there are possibilities to redirect to one contact, account, etc.

But I want to redirect the user to one folder when this user is clicking on the link of the notification

 

 

And by the way, by a second notification I want to redirect the user to one tab of the Contact's section dashboards

 

 

Is anyone knows how can I do these several things?

 

Like 0

Like

2 comments
Best reply

Hello Marvyn,

 

The difficulty here that makes this task almost impossible is that notifications were developed to open some section record, but not to select some section element (like tab or folder). Theoretically it could be done using pushing the current user back to the section of the notification record

 

(this.sandbox.publish("PushHistoryState", {

                                        hash: requestUrl

                                    })

 

and data manipulations in the SysProfileData table, but this was never tested.

 

Best regards,

Oscar

Hello Marvyn,

 

The difficulty here that makes this task almost impossible is that notifications were developed to open some section record, but not to select some section element (like tab or folder). Theoretically it could be done using pushing the current user back to the section of the notification record

 

(this.sandbox.publish("PushHistoryState", {

                                        hash: requestUrl

                                    })

 

and data manipulations in the SysProfileData table, but this was never tested.

 

Best regards,

Oscar

Oscar Dylan,

Thanks a lot for your answer, i've tested the fact that if the unique caption ID field is not completed the user will be redirected to the section of the notification..

But if you find a way in order to do this task, let me know it..



Thanks a lot.

Show all comments

Hi Community,

 

Scenario : We have 6 request type [created a new section - request] and for each type there is a printable assigned. So, whenever we open a request type and click on the printable, we get all the 6 printables drop down.

 

Question: Is there a way we can restrict showing all the printables expect for the type we have selected while creating the request?

File attachments
Like 0

Like

2 comments

Hi Amritha,

 

Theoretically it is possible and to do that you will need to override the initCardPrintForms method on the edit page of your section. Please firstly see the basic method declaration in the PrintReportUtilities mixin.

 

There should be something like this in the edit page schema code:

//get the collection of all printables
var printMenuItems = this.get(this.moduleCardPrintFormsCollectionName);
printFormsMenuCollection.each(function(item) {
  item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
}, this);

and then declare the custom logic in the getPrintMenuItemVisible method

getPrintMenuItemVisible: function(reportId) {
  //logic that returns true/false
}

Or you can use the preparePrintFormsMenuCollection method in the mixin and call it in your schema code:

preparePrintFormsMenuCollection: function(printForms) {
			printForms.eachKey(function(key, item) {
				if (!item.get("Caption")) {
					item.set("Caption", item.get("NonLocalizedCaption"));
				}
				item.set("Tag", key);
				if (item.get("TypeColumnValue")) {
					item.set("Visible", {bindTo: "getPrintMenuItemVisible"});
				}
			}, this);
		},

and again bind some logic to getPrintMenuItemVisible.

 

We don't have a ready example, but debugging the existing logic shouldn't be difficult.

 

Best regards,

Oscar

Hello Amritha,

If you still need help implementing this, I did a complete writeup of what is needed here: https://customerfx.com/article/showing-or-hiding-printables-based-on-a-…

Ryan

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

Hello colleagues,

 

I have a process and some elements have a lot of parameters, I need to create another with the same parameters to get some info, and don't want to have to write all them again. Is there any way to do it?

 

Thanks in advance

Like 0

Like

4 comments

The only way to do it is to duplicate the entire process by selecting it in the process library and clicking the Copy option.

Dear Julio, 



Please see the response above from Ryan. 

The only possible way to copy all the needed parameters is to copy an entire process and then work with this copy. 



Kind regards,

Roman

Thanks or create a custom one and reuse it, in this case the element I want to reuse was a "User Task", thanks

It would be really helpful to be able to copy a single process element instead of copying an entire business process. Can this functionality be added?

 

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

Hi all,

 

We just tried installing our package on our pre-prod environment to test and unfortunately have met an error :

 

2020-10-23 10:24:19,373 System.UnauthorizedAccessException: Access to the path '_MetaInfo.json' is denied.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)

at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)

at Terrasoft.Common.IO.FileWrapper.Create(String path)

at Terrasoft.Core.ContentGeneration.ConfigurationMetaInfoFileWriter.Write(ConfigurationMetaInfo configurationMetaInfo, String configurationMetaInfoFilePath)

at Terrasoft.Core.Packages.ConfigurationAssemblyFileStorageTransaction.UpdateConfigurationVersion(Int32 version)

at Terrasoft.Core.Packages.ConfigurationAssemblyFileStorageTransaction.Commit()

at Terrasoft.Core.Packages.WorkspaceBuilder.BuildInternalNetStandard(Boolean force, BuildResultType& buildResultType)

at Terrasoft.Core.Packages.WorkspaceBuilder.Build()

at Terrasoft.Core.AppInstallation.Packages.Operations.SystemPackageOperations.Save(IEnumerable`1 packages, PackageInstallOptions options)

at Terrasoft.Core.AppInstallation.Packages.SystemPackageManager.Save(PackageInstallOptions installOptions)

at Terrasoft.Core.AppInstallation.Packages.AppInstaller.Install(String sourcePath, String destinationPath, PackageInstallOptions installOptions, IInstalledAppInfo installedAppInfo)

at Terrasoft.Core.ServiceModelContract.PackageInstaller.AppInstallerServiceInternal.<>c__DisplayClass9_0.b__0()

at Terrasoft.Core.ServiceModelContract.PackageInstaller.BaseInstallerServiceInternal.InvokeWithLogging[TResult](Func`1 action)

 

Compilation works without errors though.

 

Any ideas how to solve this ? We are on an on-prem version.

 

Thanks and lovely day !

Like 0

Like

2 comments

Dear Amandine,

 

Usually, this error means that IIS user does not have access to all paths Creatio needs to compile the application. Try to provide full access to IIS user and check if it helps by performing full compilation. 

 

Best regards,

Angela

Angela Reyes,

Hi Angela, it was indeed a permission issue, got solved the same day :) Thanks for answering !

Show all comments