From the /ServiceModel/AuthService.svc/Login authorization API respond with 4 Set-Cookie headers in the response. But according to the spec [https://datatracker.ietf.org/doc/html/rfc6265#section-4.1] , "Servers SHOULD NOT include more than one Set-Cookie header field in the same response with the same cookie-name."  From the client application, it can't get the all 4 header values, only first one retrievable. Could you please give a fix or suitable workaround for this.

Like 0

Like

2 comments
Best reply

Hi Anusha, 

 

it's now allowed in HTTP/2 (https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.5), which specifies: 

 

8.1.2.5.  Compressing the Cookie Header Field
 
   The Cookie header field [COOKIE] uses a semi-colon (";") to delimit
   cookie-pairs (or "crumbs").  This header field doesn't follow the
   list construction rules in HTTP (see [RFC7230], Section 3.2.2), which
   prevents cookie-pairs from being separated into different name-value
   pairs.  This can significantly reduce compression efficiency as
   individual cookie-pairs are updated.
 
   To allow for better compression efficiency, the Cookie header field
   MAY be split into separate header fields, each with one or more
   cookie-pairs.  If there are multiple Cookie header fields after
   decompression, these MUST be concatenated into a single octet string
   using the two-octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
   before being passed into a non-HTTP/2 context, such as an HTTP/1.1
   connection, or a generic HTTP server application.
 
   Therefore, the following two lists of Cookie header fields are
   semantically equivalent.
 
     cookie: a=b; c=d; e=f
 
     cookie: a=b
     cookie: c=d
     cookie: e=f

Please also check out this article:

 

https://datatracker.ietf.org/doc/html/rfc6265#page-7

 

Best Regards, 

 

Bogdan L.

 

Hi Anusha, 

 

it's now allowed in HTTP/2 (https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.5), which specifies: 

 

8.1.2.5.  Compressing the Cookie Header Field
 
   The Cookie header field [COOKIE] uses a semi-colon (";") to delimit
   cookie-pairs (or "crumbs").  This header field doesn't follow the
   list construction rules in HTTP (see [RFC7230], Section 3.2.2), which
   prevents cookie-pairs from being separated into different name-value
   pairs.  This can significantly reduce compression efficiency as
   individual cookie-pairs are updated.
 
   To allow for better compression efficiency, the Cookie header field
   MAY be split into separate header fields, each with one or more
   cookie-pairs.  If there are multiple Cookie header fields after
   decompression, these MUST be concatenated into a single octet string
   using the two-octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
   before being passed into a non-HTTP/2 context, such as an HTTP/1.1
   connection, or a generic HTTP server application.
 
   Therefore, the following two lists of Cookie header fields are
   semantically equivalent.
 
     cookie: a=b; c=d; e=f
 
     cookie: a=b
     cookie: c=d
     cookie: e=f

Please also check out this article:

 

https://datatracker.ietf.org/doc/html/rfc6265#page-7

 

Best Regards, 

 

Bogdan L.

 

Bogdan Lesyk,

Thanks Bogdan. It was really helpfull, will check alternative way to process from the client API side.

Show all comments

Hi, community.

I have custom activity types besides the factory ones (Call, Email, etc):

 

 

But in the case manager of sections, when trying to set up activities tied to the stages, I can only see these:

 

 

Why can't I see my other activity types?

 

And also, how can I add the activity category field to this view? Or any other field, for that matter? Which schema must I modify and how?

 

Thank you!

Like 0

Like

1 comments

Hi Juan, 

 

"Tipos de actividades" I believe that's "Activity types", but the values you may choose in "Task category" ("Categoria de tarea") are fields from "Activity Category" lookup. 

 

So please add required values to this Lookup and you will be able to select them.

 

Best Regards, 

 

Bogdan L. 

Show all comments

I'm having trouble packaging out custom system settings and their values.  I have two entries for data in my package.  One for the SysSetting entry and one for the SystemSettingValue entry.  Upon installing the package, I can see the values as they should in the Database, but in the UI, the setting entry is there, but the value for the setting is not.  I tired clearing the Redis Cache, but that didn't help.



What is the correct procedure for packaging out system settings?



Thanks!

Like 0

Like

2 comments

Hi Jeremy,

Adding data for SysSetting and SysSettingValue are the correct things to package for system settings - I package those frequently and never an issue. Could it be that the SysSettingValue data record isn't including the correct fields? Can you see a record related to the SysSetting record in the SysSettingValue table? Maybe it's not showing the value in the UI because the correct columns aren't being included? (A SysSettingValue record uses one of multiple different fields depending on the datatype of the setting). Could that be the case?

Ryan

Hi Ryan

 

Yes, there are records in both tables joined by Id-->SysSettingsId.  It's a Text value and there is a value in the Text field on SysSettingsValue. 

 

I added a value to the setting in the UI and it created another record in SysSettingsValue for that SysSettingsId.  Only diference I could see is that the original entry had a Null for SysAdminUnitId.  Sure enough, after I set that value in the DB, my original value started showing up in the UI. 

 

I looked at the source system and target system and they both have the same SysAdminUnitId in the SysAdminUnit table.

 

I ended up decompiling the package to see if the value was in the Data step for SysSettingsValue and it was not.

 

Any idea why just that value would not copy over?

Show all comments

Hi,



Have problem with the creatio web service, I have added the oauth2 and it says it was successful. I even tested the received token in postman and it works perfectly. But running the same configuration in creatio always gives me (401) Unauthorized.



You can check the attachments for additional details.



Have you experienced the same thing?

What's the best approach to solve this?



Best regards,

Solem A.

Like 0

Like

1 comments

Hello Solem, 

 

There is a need to double-check the set oauth2 settings, based on the information from the provided screenshots it seems that some of them might be incorrect. 

Please refer to the below article for more detailed information and examples of how the corresponding URLs and Scopes should be set:

https://academy.creatio.com/docs/user/no-code_customization/web_service…

 

Thank you!

Best regards, 

Anastasiia

Show all comments

I would like to get all the accounts that hadn't got an email titled "Hey we missed you...".

For instance, this contact has got the email:

 

But I haven't got a clue where the Emails are stored. I try a filter:

The Response object seems useless - there's no Subject field. Email message object too:

Could someone advise?

Like 0

Like

4 comments

Hello Yuriy,

 

For example, in my system I have only one account with the following email:



In order to filter all the accounts that received such email there is a need for below filter:

And in order to filter all the accounts that hadn’t receive this email (including those that have no email at all) please refer to the below filter:

Best regards,

Anastasiia

Anastasiia Zhuravel,

Thank you. Could you explain to me why this is not working?

The contact has got the emails, yet he's not filtered:

 

 

 

Yuriy Konstantinov,

 

Try to set the filter the following way:

 

[Subject contains %hey%missed%you%] or any other appropriate key words. 

 

Best regards, 

Anastasiia

Anastasiia Zhuravel,

it's the same. I tried:

It doesn't help.

Show all comments

Hi Community

I'm trying to filter ContactInTag data by EntityId column using ODATA v4,

but I receive a generic error.

If I try to filter using the Id column is work fine.

What Am I doing wrong ?

Like 0

Like

4 comments

Hi Stefano,

 

Can you please specify why are you using empty spaces in the select parameter between columns names? Due to the example from the article, there shouldn't be empty spaces.

Oscar Dylan,

Hi Oscar,

I removed the $select  parameter but the issue persists

Secondly: why are you using eq inside the request URI? Please use this as an example:

 

https://o_drobina.tscrm.com/0/odata/ContactInTag?$select=Id,TagId,EntityId&$filter=Entity/Id%20eq%20c4ed336c-3e9b-40fe-8b82-5632476472b4

o_drobina.tscrm.com is the baseURI from your screen (change it to your application URI).

 

Also please double-check the documentation I sent, it contains useful examples.

Great, it works!

the mistake was the filter clause condition.

I used $filter=EntityId eq 8d392b32-3062-4f76-96a2-1a2f650a9c9a and this does not work

$filter=Entity/Id eq 8d392b32-3062-4f76-96a2-1a2f650a9c9a it works

 

Thank you very much Oscar!

Show all comments

As in the embedded screenshot, the Achieved Rate column (using the "Average" method to calculate totals) does not reflect the correct value of Opportunity amount column / Budget column. In this case, the row of month 8 contains 2 records of opportunities, but its Achieved Rate column value 0.83 is not 249,600/306,798; instead, 0.83 is the average of the 2 ratios of Opportunity amount/Budget of those 2 opportunities.

How can I do to display the value of 249,600/306,798 ?

Like 0

Like

7 comments

Hello Andrew,

 

Hope you're doing well.

 

Could you please provide us with the setup of the "Month" column and "Achieved Rate" column as well (with a description from which object you add it)?

 

Thank you in advance.

 

Best regards,

Roman

Hello Andrew,

 

Thank you for your reply.

At first, you can try to change the type of calculation from the "Average" to others for the 'Achieved Rate' column (for example set "Amount" to see how the calculations will be changed). Also you can compare the accuracy of the formula you use if you check the report of the needed records in excel. For that you will need to find the needed section (Opportunity), open the needed records/details for the 8th month, and export those records to excel. After that you will be able to re-check the value you received in the pivot table with the value you got in the excel report for the same period.

 

Also in the article below you can find more information about the formulas that are being used in the system:

Best regards,

Roman

Roman Rak,

Hi Roman,

 

Thank you for your reply. But it didn't answer my question.

As the screenshot below, you can see there is obviously no appropriate item to calculate what I need, and of course I had tried every item and no result was right. 

 

On the other hand, I found that in the Forecast section, the (pivot) table shown there is correct! I added a new forecast "FORECAST BY OPPORTUNITY" as shown below, and you can see the three Achieved Rates of the last 3 rows are correct respectively under the 3rd quarter of 2021.

So, what do you think?

 

Hello Andrew,

 

Could you please specify where is located the needed pivot table ('Quarter Achievement)?

 

Thank you in advance.

Hello.  I'm facing a similar issue.  Did you manage to solve it?

Show all comments

For syncing with an external app, I created a user called SyncerConnection.

 

I use DataService to connect with Creatio and I try to get AccountCommunication.

 

401 - Unauthorized: Access is denied due to invalid credentials.



 

You do not have permission to view this directory or page using the credentials that you supplied.



  

But it works for another user.

What is needed for the user SyncerConnection to get data with DataService?

 

Like 0

Like

3 comments

Hello Yuriy,



You can try to add the role of system administrator to your user and see how it will be after that. In case if it doesn't help please mail us on support@creatio.com and give us the external access under the supervisor, credentials of your user and the example of your request. 

We couldn't get the error on our side when we tried to reproduce it with access rights on the operation for the AccountCommunication object and with the restrictions on the CanUseODataService operation (that theoretically might limit the access). In addition, maybe something went wrong with BRMCSRF cookies in Postman when the request was sent on your side, but again it's only our assumption, since we need a full description of the problem. 



Best Regards,

Tetiana

Well, I removed the sales creatio commerce edition cloud license from one user and gave it to the SyncerConnection user and it worked.

But the number of licenses is limited, is it necessary?

Hello,



Yes, that's true that the marketing active contacts license doesn't give a right to work in the system in usual mode and it is used mostly for checking the ability of sending mails from the system.

 

Here are all the rights that the license gives:



Active marketing contact licenses ("marketing creatio 1000 active contacts"). The licenses are used for creating records in the [ Email ], [ Campaigns ], and [ Events ] sections. The number of licenses must not be less than the number of active contacts who receive marketing communications (emails, campaigns, or events).



Best Regards,

Tetiana

Show all comments

I'm getting a reply such as this JSON

        "company_naics_code": [
            "3271201",
            "3332491",
            "327213",
            "333249",
            "3339930",
            "3333187"
        ],

I've linked the propper array (see pictures), but the "3271201" value and so on are not saved to any parameter.

https://prnt.sc/1rli55a

https://prnt.sc/1rli5ii

How do I handle these values in the Web service method page? Surely, I need to use some nested parameter to use the retrieved vaules. But how do I format my Path to element (JSONPath) corrently when they dont have a name?

Like 1

Like

1 comments
Best reply

It's better to deserialize the JSON string directly inside the business process or the logic that you will use when calling the web service and then substruct needed values and pass them to either process parameters or use them according to your needs. Something like this in C#:

or (in case something should be performed from the client side):

If you are going to use the web-service inside the business process don't forget to add Newtonsoft.Json.Linq using in the process properties.

It's better to deserialize the JSON string directly inside the business process or the logic that you will use when calling the web service and then substruct needed values and pass them to either process parameters or use them according to your needs. Something like this in C#:

or (in case something should be performed from the client side):

If you are going to use the web-service inside the business process don't forget to add Newtonsoft.Json.Linq using in the process properties.

Show all comments

Hi community,

 

I'm tryng to upload an image in SysImage entity using odata 4.0 services.

I followed this creatio guide Integrations & API (creatio.com).

Page 22 explains how to create the record on the SysImage entity and how to load the image, but missing how to pass the stream data to the odata service.



Using postman I send a PUT command with a  json  like this

{ "Name": "file.png", "Data": stream image }

the call is completed succesfully, but nothing is uploaded.

Here the postman call to odata service

Like 0

Like

7 comments

Hi Stefano,



Please break your request into two separate ones. 

One with JSON body for "Name" and the second one with binary type body. You need to  attach the  .png file to that second request.



Best regards,

Yurii

Thank you Yuril,

it works fine!

Stefano Bassoli,

Hi Yuril,

the image is uploaded correctly on SysImage entity.

I updated the Contact.PhotoId field using the id of SysImage record used for upload image,

The contact page show a white image for the contact.

What Am I doing wrong?

Stefano Bassoli,



Please make sure that the image is indeed updated, to do so send a GET request to /0/odata/SysImage(id)/Data

Also, make sure to send PATCH request to 0/odata/Contact(id)

to check if the id is updated send another GET request to /0/odata/Contact(id) and check if PhotoId is indeed equal to SysImage.Id of the image you've created. 



Yurii.

Yurii Sokil,

I checked every data are correct, but the image is white.

I loaded the image showed below 



and on contact.PhotoId the SysImage.Id is referenced

Stefano Bassoli,

Hi Yurii,

after some minutes the contact picture is showed correctly,

Thank you very much

Stefano Bassoli,



Hello, I am facing the exact issue, but unfortunately, the image is still white despite waiting over a day. Can you please tell me how you sent the Image content?

Show all comments